From 99ae9091805b6663a9367582623ec75aac88377e Mon Sep 17 00:00:00 2001 From: jiayuqi7813 <63686458+jiayuqi7813@users.noreply.github.com> Date: Fri, 1 Jul 2022 02:08:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E6=9B=B4?= =?UTF-8?q?=E6=96=B0api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/admin/challenge.go | 81 ++++++++++++++++++++++++++++++++--------- api/notice.go | 43 +++++++++++++++++++++- routers/router.go | 15 +++++++- snctf.db | Bin 65536 -> 65536 bytes tools/token.go | 4 +- 5 files changed, 118 insertions(+), 25 deletions(-) diff --git a/api/admin/challenge.go b/api/admin/challenge.go index 8e73dc6..2bcc1a0 100644 --- a/api/admin/challenge.go +++ b/api/admin/challenge.go @@ -6,25 +6,25 @@ import ( "main.go/api" db "main.go/database" . "main.go/type" + "strconv" "strings" ) // CrDb 专门用作给数据替换。 type CrDb struct { - Name string `json:"name" binding:"required"` - Score int `json:"score" binding:"required"` - Flag string `json:"flag"` // 暂时一个题只能一个flag - Description string `json:"description"` + Name string `json:"name" binding:"required"` + Score int `json:"score" binding:"required"` + Flag string `json:"flag"` // 暂时一个题只能一个flag + Description string `json:"description"` Attachment string `json:"attachment"` - Category string `json:"category" binding:"required"` - Tags string `json:"tags"` + Category string `json:"category" binding:"required"` + Tags string `json:"tags"` Hints string `json:"hints"` - Visible int `json:"visible"` + Visible int `json:"visible"` } - //NewChallenge 新建一个题目 -func NewChallenge(c *gin.Context){ +func NewChallenge(c *gin.Context) { var request ChallengeRequest if err := c.ShouldBindJSON(&request); err != nil { fmt.Println(err) @@ -58,15 +58,15 @@ func addChallenge(c *Challenge) error { attachmentString := strings.Join(c.Attachment, ",") hintString := strings.Join(c.Hints, ",") crdb := &CrDb{ - Name: c.Name, - Score: c.Score, - Flag: c.Flag, + Name: c.Name, + Score: c.Score, + Flag: c.Flag, Description: c.Description, - Attachment: attachmentString, - Category: c.Category, - Tags: c.Tags, - Hints: hintString, - Visible: c.Visible, + Attachment: attachmentString, + Category: c.Category, + Tags: c.Tags, + Hints: hintString, + Visible: c.Visible, } //插入数据 err := DB.Table("challenge").Create(crdb).Error @@ -76,4 +76,49 @@ func addChallenge(c *Challenge) error { return err } return nil -} \ No newline at end of file +} + +// DelChallenge 删除题目 +func DelChallenge(c *gin.Context) { + api.Link() + DB := db.DBsnctf + id := c.Param("id") + err := DB.Table("challenge").Where("id = ?", id).Delete(&Challenge{}).Error + if err != nil { + c.JSON(400, gin.H{"code": 400, "msg": "Delete challenge failure!"}) + return + } + c.JSON(200, gin.H{"code": 200, "msg": "Delete challenge success!"}) +} + +// EditChallenge 修改题目 +func EditChallenge(c *gin.Context) { + api.Link() + DB := db.DBsnctf + id := c.Param("id") + cid, _ := strconv.Atoi(id) + var request ChallengeRequest + if err := c.ShouldBindJSON(&request); err != nil { + c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"}) + return + } + challenge := &Challenge{ + ID: cid, + Name: request.Name, + Score: request.Score, + Flag: request.Flag, + Description: request.Description, + Attachment: request.Attachment, + Category: request.Category, + Tags: request.Tags, + Hints: request.Hints, + Visible: request.Visible, + } + err := DB.Table("challenge").Where("id = ?", cid).Updates(challenge).Error + if err != nil { + c.JSON(400, gin.H{"code": 400, "msg": "Update challenge failure!"}) + return + } + c.JSON(200, gin.H{"code": 200, "msg": "Update challenge success!"}) + +} diff --git a/api/notice.go b/api/notice.go index 24db265..ce73494 100644 --- a/api/notice.go +++ b/api/notice.go @@ -1,9 +1,11 @@ package api import ( + "fmt" "github.com/gin-gonic/gin" - . "main.go/type" db "main.go/database" + "main.go/tools" + . "main.go/type" ) // GetAllNotices 获取所有的公告 @@ -17,7 +19,6 @@ func GetAllNotices(c *gin.Context) { c.JSON(200, gin.H{"code": 200, "data": notices}) } - func getAllNotices(notices *[]Notice) error { Link() DB := db.DBsnctf @@ -37,3 +38,41 @@ func getAllNotices(notices *[]Notice) error { } return rows.Err() } + +// AddNewNotices 新增公告 +func AddNewNotices(c *gin.Context) { + Link() + DB := db.DBsnctf + var request NoticeRequest + if err := c.ShouldBindJSON(&request); err != nil { + fmt.Println(err) + c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"}) + return + } + addtime := tools.Timestamp() + notice := &Notice{ + Title: request.Title, + Content: request.Content, + CreatedAt: addtime, + } + err := DB.Table("notice").Create(¬ice).Error + if err != nil { + c.JSON(400, gin.H{"code": 400, "msg": "error for database"}) + return + } + c.JSON(200, gin.H{"code": 200, "msg": "success!"}) + +} + +// DelNotice 删除公告 +func DelNotice(c *gin.Context) { + Link() + DB := db.DBsnctf + noticeid := c.Param("id") + err := DB.Table("notice").Where("id = ?", noticeid).Delete(&Notice{}).Error + if err != nil { + c.JSON(400, gin.H{"code": 400, "msg": "error for database"}) + return + } + c.JSON(200, gin.H{"code": 200, "msg": "success!"}) +} diff --git a/routers/router.go b/routers/router.go index b83b620..3e97f8a 100644 --- a/routers/router.go +++ b/routers/router.go @@ -56,7 +56,6 @@ func Initrouter() { personal.GET("/score/self", api.GetSelfScoreAndRank) // 获取所有用户信息 personal.GET("/users", api.GetAllUserInfo) - // 校内排行api,暂时留空 } // 管理员api,需要用户登陆且Role=1才能访问 @@ -65,7 +64,19 @@ func Initrouter() { { // 创建新题目 manager.POST("/challenge", admin.NewChallenge) + // 删除题目 暂未测试 + manager.DELETE("/challenge/:id", admin.DelChallenge) + // 更新题目信息 暂未测试 + manager.PUT("/challenge/:id", admin.EditChallenge) + //创建新公告 + manager.POST("/notice", api.AddNewNotices) + //删除公告 暂未测试 + manager.DELETE("/notice/:id", api.DelNotice) + } - router.Run(":9000") + err := router.Run(":9000") + if err != nil { + return + } } diff --git a/snctf.db b/snctf.db index 1f3a9aee7fb0d2da3894ae6fcbf121d9bbf35fff..dff1f9379b9d25362d260748da78bd1199a0c7b8 100644 GIT binary patch delta 157 zcmZo@U}