support limit
This commit is contained in:
28
main.go
28
main.go
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user