mirror of
https://github.com/ZSCNetSupportDept/scheduler.git
synced 2025-10-28 20:45:05 +08:00
增加pgx驱动,完善前端的代码,暂定supabase后端数据库
This commit is contained in:
@@ -28,7 +28,7 @@ document.getElementById('getAssignment').addEventListener('click', function () {
|
|||||||
cell.textContent = item.Name || item.ID;
|
cell.textContent = item.Name || item.ID;
|
||||||
|
|
||||||
// 优先判断 Access 条件
|
// 优先判断 Access 条件
|
||||||
if (item.Access < 5) {
|
if (item.Access <=3) {
|
||||||
cell.classList.add('cell_Moderator');
|
cell.classList.add('cell_Moderator');
|
||||||
} else if (item.Note === 1) {
|
} else if (item.Note === 1) {
|
||||||
cell.classList.add('cell_SwitchOrRepay');
|
cell.classList.add('cell_SwitchOrRepay');
|
||||||
|
|||||||
@@ -116,8 +116,8 @@ button:hover {
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>选择日期</h1>
|
<h1>请选择日期</h1>
|
||||||
<i>如果不选择的日期的话,则自动获取今天的值班表</i><br></br>
|
<i>不选择日期则自动获取今天的值班表</i><br></br>
|
||||||
<input type="date" id="calendar">
|
<input type="date" id="calendar">
|
||||||
<button id="getAssignment">获取值班表</button>
|
<button id="getAssignment">获取值班表</button>
|
||||||
<div id="response"></div>
|
<div id="response"></div>
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ package db
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
//"gorm.io/driver/postgres"
|
||||||
|
"os"
|
||||||
|
|
||||||
"gorm.io/driver/postgres"
|
"gorm.io/driver/postgres"
|
||||||
"gorm.io/driver/sqlite"
|
"gorm.io/driver/sqlite"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"os"
|
|
||||||
"zsxyww.com/scheduler/config"
|
"zsxyww.com/scheduler/config"
|
||||||
"zsxyww.com/scheduler/model"
|
"zsxyww.com/scheduler/model"
|
||||||
)
|
)
|
||||||
@@ -17,12 +19,12 @@ func Connect() {
|
|||||||
case "SQLite":
|
case "SQLite":
|
||||||
connectSQLite()
|
connectSQLite()
|
||||||
case "PostgreSQL":
|
case "PostgreSQL":
|
||||||
//connectPGSQL()
|
connectPGSQL()
|
||||||
PGSQL()
|
PGSQL()
|
||||||
default:
|
default:
|
||||||
panic("DBType error")
|
panic("DBType error")
|
||||||
}
|
}
|
||||||
Main.AutoMigrate(&model.Member{}, &model.Tweak{})
|
//Main.AutoMigrate(&model.Member{}, &model.Tweak{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func connectSQLite() {
|
func connectSQLite() {
|
||||||
@@ -33,6 +35,7 @@ func connectSQLite() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Main.AutoMigrate(&model.Member{}, &model.Tweak{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func connectPGSQL() {
|
func connectPGSQL() {
|
||||||
@@ -40,4 +43,5 @@ func connectPGSQL() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
Main.AutoMigrate(&model.Member{}, &model.Tweak{})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package db
|
package db
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/jackc/pgx/v5/pgxpool"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Main *gorm.DB //Main database connection
|
var Main *gorm.DB //Main database connection
|
||||||
|
|
||||||
|
var PGX *pgxpool.Pool
|
||||||
|
|||||||
26
database/pgsql.go
Normal file
26
database/pgsql.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"github.com/jackc/pgx/v5/pgxpool"
|
||||||
|
"os"
|
||||||
|
"zsxyww.com/scheduler/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
// use pgx to connect
|
||||||
|
func PGSQL() {
|
||||||
|
pgx, err := pgxpool.New(context.Background(), config.Default.DB.Path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Unable to create connection pool: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
version := ""
|
||||||
|
if err := pgx.QueryRow(context.Background(), "SELECT version()").Scan(&version); err != nil {
|
||||||
|
fmt.Printf("Query failed: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Connected to:", version)
|
||||||
|
PGX = pgx
|
||||||
|
}
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
package handler
|
|
||||||
|
|
||||||
//
|
|
||||||
// import (
|
|
||||||
// "github.com/gocarina/gocsv"
|
|
||||||
// "os"
|
|
||||||
// "zsxyww.com/scheduler/config"
|
|
||||||
// //"zsxyww.com/scheduler/database"
|
|
||||||
// "zsxyww.com/scheduler/model"
|
|
||||||
// )
|
|
||||||
//
|
|
||||||
// func init() {
|
|
||||||
// allMember, err := loadMembers()
|
|
||||||
// if err != nil {
|
|
||||||
// panic(err)
|
|
||||||
// }
|
|
||||||
// _ = allMember
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// func loadMembers() ([]model.Member, error) {
|
|
||||||
// data, err := os.OpenFile(config.File, os.O_RDWR|os.O_CREATE, os.ModePerm)
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
// defer data.Close()
|
|
||||||
//
|
|
||||||
// var m []model.Member
|
|
||||||
//
|
|
||||||
// err = gocsv.UnmarshalFile(data, m)
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
// //for index, member := range *m {
|
|
||||||
// // fmt.Printf("%v:%v\n", index, member) // for debug concerns
|
|
||||||
// //}
|
|
||||||
// return m, nil
|
|
||||||
// }
|
|
||||||
1
handler/repay.go
Normal file
1
handler/repay.go
Normal file
@@ -0,0 +1 @@
|
|||||||
|
package handler
|
||||||
31
handler/test.go
Normal file
31
handler/test.go
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/jackc/pgx/v5"
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
"zsxyww.com/scheduler/database"
|
||||||
|
"zsxyww.com/scheduler/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
var cxt = context.Background()
|
||||||
|
|
||||||
|
func HandlerTest(i echo.Context) error {
|
||||||
|
|
||||||
|
switch i.QueryParam("acts") {
|
||||||
|
case "test":
|
||||||
|
if err := db.PGX.Ping(cxt); err != nil {
|
||||||
|
return i.String(500, err.Error())
|
||||||
|
}
|
||||||
|
return i.String(200, "ok")
|
||||||
|
case "select":
|
||||||
|
a, _ := db.PGX.Query(cxt, "select * from members")
|
||||||
|
result, err := pgx.CollectRows(a, pgx.RowToStructByName[model.Member])
|
||||||
|
if err != nil {
|
||||||
|
return i.String(500, err.Error())
|
||||||
|
}
|
||||||
|
return i.JSON(200, result)
|
||||||
|
default:
|
||||||
|
return i.String(200, "give arguments please")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,46 +1,46 @@
|
|||||||
|
// CRUD的基础操作
|
||||||
package uo
|
package uo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"zsxyww.com/scheduler/database"
|
||||||
"zsxyww.com/scheduler/model"
|
"zsxyww.com/scheduler/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 增加一项tweak
|
// 增加一项tweak
|
||||||
func (uo *uoPrototype) addTweak(in *model.Tweak) error {
|
func AddTweak(in *model.Tweak) error {
|
||||||
_ = uo.c.Create(in)
|
result := db.Main.Create(in)
|
||||||
if uo.c.Error != nil {
|
return result.Error
|
||||||
return uo.c.Error
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除一项tweak
|
// 删除一项tweak
|
||||||
func (uo *uoPrototype) deleteTweak(in *model.Tweak) error {
|
func DeleteTweak(in *model.Tweak) error {
|
||||||
if uo.c.Error != nil {
|
if db.Main.Error != nil {
|
||||||
return uo.c.Error
|
return db.Main.Error
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询一些tweak,通过IssueID
|
// 查询一些tweak,通过IssueID
|
||||||
func (uo *uoPrototype) getTweakByIssueID(in *model.Tweak) (result []*model.Tweak, err error) {
|
func GetTweakByIssueID(in *model.Tweak) (result []*model.Tweak, err error) {
|
||||||
if uo.c.Error != nil {
|
if db.Main.Error != nil {
|
||||||
return nil, uo.c.Error
|
return nil, db.Main.Error
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询一些tweak,通过一个日期
|
// 查询一些tweak,通过一个日期
|
||||||
func (uo *uoPrototype) getTweakByTime(in *model.Tweak) (result []*model.Tweak, err error) {
|
func GetTweakByTime(in *model.Tweak) (result []*model.Tweak, err error) {
|
||||||
if uo.c.Error != nil {
|
if db.Main.Error != nil {
|
||||||
return nil, uo.c.Error
|
return nil, db.Main.Error
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询一些tweak,通过一个工号
|
// 查询一些tweak,通过一个工号
|
||||||
func (uo *uoPrototype) getTweakByID(in *model.Tweak) (result []*model.Tweak, err error) {
|
func GetTweakByID(in *model.Tweak) (result []*model.Tweak, err error) {
|
||||||
if uo.c.Error != nil {
|
if db.Main.Error != nil {
|
||||||
return nil, uo.c.Error
|
return nil, db.Main.Error
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
package uo
|
|
||||||
|
|
||||||
import (
|
|
||||||
"gorm.io/gorm"
|
|
||||||
"zsxyww.com/scheduler/database"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Unit Operations
|
|
||||||
type uoPrototype struct {
|
|
||||||
c *gorm.DB
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
Uo := &uoPrototype{c: db.Main}
|
|
||||||
_ = Uo
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
package model
|
package model
|
||||||
|
|
||||||
type Member struct {
|
type Member struct {
|
||||||
ID int `csv:"工号"` //工号
|
ID int `csv:"工号" db:"id"` //工号
|
||||||
Name string `csv:"姓名"`
|
Name string `csv:"姓名" db:"name"`
|
||||||
Sex bool `csv:"性别"` //不要把女生安排进男生宿舍,male=True
|
Sex bool `csv:"性别" db:"sex"` //不要把女生安排进男生宿舍,male=True
|
||||||
FreeDay int `csv:"有空"` //哪天有空
|
FreeDay int `csv:"有空" db:"free_day"` //哪天有空
|
||||||
FreeDay2 int `csv:"有空"`
|
FreeDay2 int `csv:"有空" db:"free_day2"`
|
||||||
Access int `csv:"权限"` //遵循报修系统的access enum ,用来标注管理层
|
Access int `csv:"权限" db:"access"` //遵循报修系统的access enum ,用来标注管理层
|
||||||
Arranged bool `csv:"-"` //供分配程序使用的字段
|
Arranged bool `csv:"-" db:"-"` //供分配程序使用的字段
|
||||||
Note int `csv:"-"` //正常=0,换班/补班=1,蹭班=2,供分配程序使用
|
Note int `csv:"-" db:"-"` //正常=0,换班/补班=1,蹭班=2,供分配程序使用
|
||||||
}
|
}
|
||||||
|
|
||||||
// 权限:
|
// 权限:
|
||||||
|
|||||||
@@ -13,4 +13,5 @@ func Route(app *echo.Echo) {
|
|||||||
|
|
||||||
api := app.Group("/api/")
|
api := app.Group("/api/")
|
||||||
api.GET("getAssignment", handler.GetAssignment)
|
api.GET("getAssignment", handler.GetAssignment)
|
||||||
|
api.GET("test", handler.HandlerTest)
|
||||||
}
|
}
|
||||||
|
|||||||
28
signals/issueID.go
Normal file
28
signals/issueID.go
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package signals
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
//"zsxyww.com/scheduler/database"
|
||||||
|
)
|
||||||
|
|
||||||
|
var IssueID int
|
||||||
|
var IssueIDMutex sync.Mutex
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
//启动程序时从数据库获取最后的IssueID用来初始化程序的IssueID变量~
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssueID++
|
||||||
|
func IssueIDPP() {
|
||||||
|
|
||||||
|
IssueIDMutex.Lock()
|
||||||
|
IssueID++
|
||||||
|
IssueIDMutex.Unlock()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetIssueID() int {
|
||||||
|
IssueIDMutex.Lock()
|
||||||
|
defer IssueIDMutex.Unlock()
|
||||||
|
return IssueID
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user