From 66980958f5a7f33412441f8d9b74b5d5165b005f Mon Sep 17 00:00:00 2001 From: govolokatliai Date: Wed, 21 May 2025 08:50:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0pgx=E9=A9=B1=E5=8A=A8?= =?UTF-8?q?=EF=BC=8C=E5=AE=8C=E5=96=84=E5=89=8D=E7=AB=AF=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E6=9A=82=E5=AE=9Asupabase=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FrontEnd/renderTable.js | 2 +- FrontEnd/testAssignment.html | 4 ++-- database/database.go | 10 +++++++--- database/model.go | 3 +++ database/pgsql.go | 26 +++++++++++++++++++++++++ handler/init.go | 37 ------------------------------------ handler/repay.go | 1 + handler/test.go | 31 ++++++++++++++++++++++++++++++ handler/unit/tweaks.go | 36 +++++++++++++++++------------------ handler/unit/unit_entry.go | 16 ---------------- model/member.go | 16 ++++++++-------- route/route.go | 1 + signals/issueID.go | 28 +++++++++++++++++++++++++++ 13 files changed, 126 insertions(+), 85 deletions(-) create mode 100644 database/pgsql.go delete mode 100644 handler/init.go create mode 100644 handler/repay.go create mode 100644 handler/test.go delete mode 100644 handler/unit/unit_entry.go create mode 100644 signals/issueID.go diff --git a/FrontEnd/renderTable.js b/FrontEnd/renderTable.js index 8a0ff48..47c709b 100644 --- a/FrontEnd/renderTable.js +++ b/FrontEnd/renderTable.js @@ -28,7 +28,7 @@ document.getElementById('getAssignment').addEventListener('click', function () { cell.textContent = item.Name || item.ID; // 优先判断 Access 条件 - if (item.Access < 5) { + if (item.Access <=3) { cell.classList.add('cell_Moderator'); } else if (item.Note === 1) { cell.classList.add('cell_SwitchOrRepay'); diff --git a/FrontEnd/testAssignment.html b/FrontEnd/testAssignment.html index 66c7616..3224051 100644 --- a/FrontEnd/testAssignment.html +++ b/FrontEnd/testAssignment.html @@ -116,8 +116,8 @@ button:hover {
-

选择日期

- 如果不选择的日期的话,则自动获取今天的值班表

+

请选择日期

+ 不选择日期则自动获取今天的值班表

diff --git a/database/database.go b/database/database.go index e583dd9..799fc00 100644 --- a/database/database.go +++ b/database/database.go @@ -2,10 +2,12 @@ package db import ( "fmt" + //"gorm.io/driver/postgres" + "os" + "gorm.io/driver/postgres" "gorm.io/driver/sqlite" "gorm.io/gorm" - "os" "zsxyww.com/scheduler/config" "zsxyww.com/scheduler/model" ) @@ -17,12 +19,12 @@ func Connect() { case "SQLite": connectSQLite() case "PostgreSQL": - //connectPGSQL() + connectPGSQL() PGSQL() default: panic("DBType error") } - Main.AutoMigrate(&model.Member{}, &model.Tweak{}) + //Main.AutoMigrate(&model.Member{}, &model.Tweak{}) } func connectSQLite() { @@ -33,6 +35,7 @@ func connectSQLite() { os.Exit(1) } + Main.AutoMigrate(&model.Member{}, &model.Tweak{}) } func connectPGSQL() { @@ -40,4 +43,5 @@ func connectPGSQL() { if err != nil { panic(err) } + Main.AutoMigrate(&model.Member{}, &model.Tweak{}) } diff --git a/database/model.go b/database/model.go index 595abb7..9acb539 100644 --- a/database/model.go +++ b/database/model.go @@ -1,7 +1,10 @@ package db import ( + "github.com/jackc/pgx/v5/pgxpool" "gorm.io/gorm" ) var Main *gorm.DB //Main database connection + +var PGX *pgxpool.Pool diff --git a/database/pgsql.go b/database/pgsql.go new file mode 100644 index 0000000..9f6916e --- /dev/null +++ b/database/pgsql.go @@ -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 +} diff --git a/handler/init.go b/handler/init.go deleted file mode 100644 index a974322..0000000 --- a/handler/init.go +++ /dev/null @@ -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 -// } diff --git a/handler/repay.go b/handler/repay.go new file mode 100644 index 0000000..abeebd1 --- /dev/null +++ b/handler/repay.go @@ -0,0 +1 @@ +package handler diff --git a/handler/test.go b/handler/test.go new file mode 100644 index 0000000..3ab5827 --- /dev/null +++ b/handler/test.go @@ -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") + } +} diff --git a/handler/unit/tweaks.go b/handler/unit/tweaks.go index ffca8da..a669f06 100644 --- a/handler/unit/tweaks.go +++ b/handler/unit/tweaks.go @@ -1,46 +1,46 @@ +// CRUD的基础操作 package uo import ( + "zsxyww.com/scheduler/database" "zsxyww.com/scheduler/model" ) // 增加一项tweak -func (uo *uoPrototype) addTweak(in *model.Tweak) error { - _ = uo.c.Create(in) - if uo.c.Error != nil { - return uo.c.Error - } - return nil +func AddTweak(in *model.Tweak) error { + result := db.Main.Create(in) + return result.Error + } // 删除一项tweak -func (uo *uoPrototype) deleteTweak(in *model.Tweak) error { - if uo.c.Error != nil { - return uo.c.Error +func DeleteTweak(in *model.Tweak) error { + if db.Main.Error != nil { + return db.Main.Error } return nil } // 查询一些tweak,通过IssueID -func (uo *uoPrototype) getTweakByIssueID(in *model.Tweak) (result []*model.Tweak, err error) { - if uo.c.Error != nil { - return nil, uo.c.Error +func GetTweakByIssueID(in *model.Tweak) (result []*model.Tweak, err error) { + if db.Main.Error != nil { + return nil, db.Main.Error } return nil, nil } // 查询一些tweak,通过一个日期 -func (uo *uoPrototype) getTweakByTime(in *model.Tweak) (result []*model.Tweak, err error) { - if uo.c.Error != nil { - return nil, uo.c.Error +func GetTweakByTime(in *model.Tweak) (result []*model.Tweak, err error) { + if db.Main.Error != nil { + return nil, db.Main.Error } return nil, nil } // 查询一些tweak,通过一个工号 -func (uo *uoPrototype) getTweakByID(in *model.Tweak) (result []*model.Tweak, err error) { - if uo.c.Error != nil { - return nil, uo.c.Error +func GetTweakByID(in *model.Tweak) (result []*model.Tweak, err error) { + if db.Main.Error != nil { + return nil, db.Main.Error } return nil, nil } diff --git a/handler/unit/unit_entry.go b/handler/unit/unit_entry.go deleted file mode 100644 index 5151a57..0000000 --- a/handler/unit/unit_entry.go +++ /dev/null @@ -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 -} diff --git a/model/member.go b/model/member.go index 8f601b8..f4dcc8e 100644 --- a/model/member.go +++ b/model/member.go @@ -1,14 +1,14 @@ package model type Member struct { - ID int `csv:"工号"` //工号 - Name string `csv:"姓名"` - Sex bool `csv:"性别"` //不要把女生安排进男生宿舍,male=True - FreeDay int `csv:"有空"` //哪天有空 - FreeDay2 int `csv:"有空"` - Access int `csv:"权限"` //遵循报修系统的access enum ,用来标注管理层 - Arranged bool `csv:"-"` //供分配程序使用的字段 - Note int `csv:"-"` //正常=0,换班/补班=1,蹭班=2,供分配程序使用 + ID int `csv:"工号" db:"id"` //工号 + Name string `csv:"姓名" db:"name"` + Sex bool `csv:"性别" db:"sex"` //不要把女生安排进男生宿舍,male=True + FreeDay int `csv:"有空" db:"free_day"` //哪天有空 + FreeDay2 int `csv:"有空" db:"free_day2"` + Access int `csv:"权限" db:"access"` //遵循报修系统的access enum ,用来标注管理层 + Arranged bool `csv:"-" db:"-"` //供分配程序使用的字段 + Note int `csv:"-" db:"-"` //正常=0,换班/补班=1,蹭班=2,供分配程序使用 } // 权限: diff --git a/route/route.go b/route/route.go index e79c51a..2d6e3d6 100644 --- a/route/route.go +++ b/route/route.go @@ -13,4 +13,5 @@ func Route(app *echo.Echo) { api := app.Group("/api/") api.GET("getAssignment", handler.GetAssignment) + api.GET("test", handler.HandlerTest) } diff --git a/signals/issueID.go b/signals/issueID.go new file mode 100644 index 0000000..55e8709 --- /dev/null +++ b/signals/issueID.go @@ -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 +}