support limit

This commit is contained in:
2022-11-23 18:08:04 +08:00
parent bfe739e442
commit f4cb36dbee
5 changed files with 108 additions and 28 deletions

28
main.go
View File

@@ -72,7 +72,7 @@ func main() {
}
for rows.Next() {
s := &db.Timetable{}
rows.Scan(&s.ID, &s.Name, &s.Status)
rows.Scan(&s.ID, &s.Name, &s.Status, &s.Limit)
timetables = append(timetables, s)
}
c.JSON(http.StatusOK, gin.H{
@@ -82,7 +82,8 @@ func main() {
api.POST("/timetables", auth, func(c *gin.Context) {
type Request struct {
Name string `json:"newTimeTableName"`
Name string `json:"newTimeTableName"`
Limit int64 `json:"newLimit"`
}
req := &Request{}
err := c.ShouldBindBodyWith(req, binding.JSON)
@@ -90,7 +91,7 @@ func main() {
c.AbortWithError(400, err)
return
}
row := db.CreateNewTimetable.QueryRow(req.Name)
row := db.CreateNewTimetable.QueryRow(req.Name, req.Limit)
var id int64
err = row.Scan(&id)
if err != nil {
@@ -130,9 +131,10 @@ func main() {
timeslots := make([]*db.TimeSlot, 0)
var timetableName string
var timetableStatus bool
var timetableLimit int64
for rows.Next() {
s := &db.TimeSlot{}
err = rows.Scan(&s.ID, &s.Name, &s.Time, &s.Take, &s.Capacity, &timetableName, &timetableStatus, &s.Success)
err = rows.Scan(&s.ID, &s.Name, &s.Time, &s.Take, &s.Capacity, &timetableName, &timetableStatus, &s.Success, &timetableLimit)
if err != nil {
c.AbortWithError(400, err)
return
@@ -143,6 +145,7 @@ func main() {
"timeslots": timeslots,
"timetableName": timetableName,
"timetableStatus": timetableStatus,
"timetableLimit": timetableLimit,
})
})
@@ -256,7 +259,7 @@ func main() {
c.AbortWithError(400, err)
return
}
_, err = db.UpdateTimetableStatus.Exec(req.Status, timetableID)
_, err = db.UpdateTimetableStatus.Exec(req.Status, req.Limit, timetableID)
if err != nil {
c.AbortWithError(400, err)
return
@@ -291,6 +294,21 @@ func main() {
tx.Rollback()
return
}
can := true
row, err := db.CheckLimit.Query(req.Username, timetableID)
for row.Next() {
err = row.Scan(&can)
}
if err != nil {
c.AbortWithError(400, err)
tx.Rollback()
return
}
if !can {
c.AbortWithError(401, errors.New("超出报名数量限制"))
tx.Rollback()
return
}
updateCountStmt := tx.Stmt(db.UpdateTakeCount)
if req.Username[0] == '!' {
untakeStmt := tx.Stmt(db.UserUntakeTimeslot)