增加pgx驱动,完善前端的代码,暂定supabase后端数据库

This commit is contained in:
2025-05-21 08:50:34 +08:00
parent 9f2fb09157
commit 66980958f5
13 changed files with 126 additions and 85 deletions

View File

@@ -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');

View File

@@ -116,8 +116,8 @@ button:hover {
</head>
<body>
<div class="container">
<h1>选择日期</h1>
<i>如果不选择日期的话,则自动获取今天的值班表</i><br></br>
<h1>选择日期</h1>
<i>不选择日期则自动获取今天的值班表</i><br></br>
<input type="date" id="calendar">
<button id="getAssignment">获取值班表</button>
<div id="response"></div>

View File

@@ -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{})
}

View File

@@ -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

26
database/pgsql.go Normal file
View 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
}

View File

@@ -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
View File

@@ -0,0 +1 @@
package handler

31
handler/test.go Normal file
View 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")
}
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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,供分配程序使用
}
// 权限:

View File

@@ -13,4 +13,5 @@ func Route(app *echo.Echo) {
api := app.Group("/api/")
api.GET("getAssignment", handler.GetAssignment)
api.GET("test", handler.HandlerTest)
}

28
signals/issueID.go Normal file
View 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
}