aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-06-29 19:23:48 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-06-29 19:23:48 +0300
commit94d51cc7783519f94176e813f195a07f50d4de69 (patch)
tree66e60b2ed050d0909c49dfbe1f746a3b796422ee /backend
parentfeat: return back to single map summary edit (diff)
downloadlphub-94d51cc7783519f94176e813f195a07f50d4de69.tar.gz
lphub-94d51cc7783519f94176e813f195a07f50d4de69.tar.bz2
lphub-94d51cc7783519f94176e813f195a07f50d4de69.zip
feat: create map summary
Former-commit-id: 5ab31d8543512b9d32e3d25beee347e9668f8323
Diffstat (limited to 'backend')
-rw-r--r--backend/controllers/modController.go87
-rw-r--r--backend/routes/routes.go1
2 files changed, 87 insertions, 1 deletions
diff --git a/backend/controllers/modController.go b/backend/controllers/modController.go
index 5fe0f68..75be112 100644
--- a/backend/controllers/modController.go
+++ b/backend/controllers/modController.go
@@ -9,6 +9,91 @@ import (
9 "github.com/pektezol/leastportals/backend/models" 9 "github.com/pektezol/leastportals/backend/models"
10) 10)
11 11
12// POST Map Summary
13//
14// @Summary Create map summary with specified map id.
15// @Tags maps
16// @Produce json
17// @Param id path int true "Map ID"
18// @Param request body models.CreateMapSummaryRequest true "Body"
19// @Success 200 {object} models.Response{data=models.CreateMapSummaryRequest}
20// @Failure 400 {object} models.Response
21// @Router /maps/{id}/summary [post]
22func CreateMapSummary(c *gin.Context) {
23 // Check if user exists
24 user, exists := c.Get("user")
25 if !exists {
26 c.JSON(http.StatusUnauthorized, models.ErrorResponse("User not logged in."))
27 return
28 }
29 var moderator bool
30 for _, title := range user.(models.User).Titles {
31 if title == "Moderator" {
32 moderator = true
33 }
34 }
35 if !moderator {
36 c.JSON(http.StatusUnauthorized, models.ErrorResponse("Insufficient permissions."))
37 return
38 }
39 // Bind parameter and body
40 id := c.Param("id")
41 mapID, err := strconv.Atoi(id)
42 if err != nil {
43 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
44 return
45 }
46 var request models.CreateMapSummaryRequest
47 if err := c.BindJSON(&request); err != nil {
48 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
49 return
50 }
51 // Start database transaction
52 tx, err := database.DB.Begin()
53 if err != nil {
54 c.JSON(http.StatusInternalServerError, models.ErrorResponse(err.Error()))
55 return
56 }
57 defer tx.Rollback()
58 // Fetch route category and score count
59 var checkMapID int
60 sql := `SELECT m.id FROM maps m WHERE m.id = $1`
61 err = database.DB.QueryRow(sql, mapID).Scan(&checkMapID)
62 if err != nil {
63 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
64 return
65 }
66 if mapID != checkMapID {
67 c.JSON(http.StatusBadRequest, models.ErrorResponse("Map ID does not exist."))
68 return
69 }
70 // Update database with new data
71 sql = `INSERT INTO map_routes (map_id,category_id,score_count,description,showcase)
72 VALUES ($1,$2,$3,$4,$5)`
73 _, err = tx.Exec(sql, mapID, request.CategoryID, request.ScoreCount, request.Description, request.Showcase)
74 if err != nil {
75 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
76 return
77 }
78 sql = `INSERT INTO map_history (map_id,category_id,user_name,score_count,record_date)
79 VALUES ($1,$2,$3,$4,$5)`
80 _, err = tx.Exec(sql, mapID, request.CategoryID, request.UserName, request.ScoreCount, request.RecordDate)
81 if err != nil {
82 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
83 return
84 }
85 if err = tx.Commit(); err != nil {
86 c.JSON(http.StatusInternalServerError, models.ErrorResponse(err.Error()))
87 return
88 }
89 // Return response
90 c.JSON(http.StatusOK, models.Response{
91 Success: true,
92 Message: "Successfully updated map summary.",
93 Data: request,
94 })
95}
96
12// PUT Map Summary 97// PUT Map Summary
13// 98//
14// @Summary Edit map summary with specified map id. 99// @Summary Edit map summary with specified map id.
@@ -33,7 +118,7 @@ func EditMapSummary(c *gin.Context) {
33 } 118 }
34 } 119 }
35 if !moderator { 120 if !moderator {
36 c.JSON(http.StatusUnauthorized, "Insufficient permissions.") 121 c.JSON(http.StatusUnauthorized, models.ErrorResponse("Insufficient permissions."))
37 return 122 return
38 } 123 }
39 // Bind parameter and body 124 // Bind parameter and body
diff --git a/backend/routes/routes.go b/backend/routes/routes.go
index 93dc1dd..2eb91a4 100644
--- a/backend/routes/routes.go
+++ b/backend/routes/routes.go
@@ -26,6 +26,7 @@ func InitRoutes(router *gin.Engine) {
26 v1.GET("/users/:id", middleware.CheckAuth, controllers.FetchUser) 26 v1.GET("/users/:id", middleware.CheckAuth, controllers.FetchUser)
27 v1.GET("/demos", controllers.DownloadDemoWithID) 27 v1.GET("/demos", controllers.DownloadDemoWithID)
28 v1.GET("/maps/:id/summary", middleware.CheckAuth, controllers.FetchMapSummary) 28 v1.GET("/maps/:id/summary", middleware.CheckAuth, controllers.FetchMapSummary)
29 v1.POST("/maps/:id/summary", middleware.CheckAuth, controllers.CreateMapSummary)
29 v1.PUT("/maps/:id/summary", middleware.CheckAuth, controllers.EditMapSummary) 30 v1.PUT("/maps/:id/summary", middleware.CheckAuth, controllers.EditMapSummary)
30 v1.GET("/maps/:id/leaderboards", middleware.CheckAuth, controllers.FetchMapLeaderboards) 31 v1.GET("/maps/:id/leaderboards", middleware.CheckAuth, controllers.FetchMapLeaderboards)
31 v1.POST("/maps/:id/record", middleware.CheckAuth, controllers.CreateRecordWithDemo) 32 v1.POST("/maps/:id/record", middleware.CheckAuth, controllers.CreateRecordWithDemo)