From 311a039edc8f91666c8d05acd94aabab20833ffe Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Wed, 12 Jul 2023 14:26:24 +0300 Subject: feat: edit map image Former-commit-id: 288e6772dda69a9543a01db85069c95476addd4e --- backend/controllers/modController.go | 55 ++++++++++++++++++++++++++++++++++++ backend/models/requests.go | 4 +++ backend/routes/routes.go | 1 + 3 files changed, 60 insertions(+) (limited to 'backend') diff --git a/backend/controllers/modController.go b/backend/controllers/modController.go index ff79e3e..98fb165 100644 --- a/backend/controllers/modController.go +++ b/backend/controllers/modController.go @@ -264,3 +264,58 @@ func DeleteMapSummary(c *gin.Context) { Data: request, }) } + +// PUT Map Image +// +// @Description Edit map image with specified map id. +// @Tags maps +// @Produce json +// @Param Authorization header string true "JWT Token" +// @Param id path int true "Map ID" +// @Param request body models.EditMapImageRequest true "Body" +// @Success 200 {object} models.Response{data=models.EditMapImageRequest} +// @Failure 400 {object} models.Response +// @Router /maps/{id}/image [put] +func EditMapImage(c *gin.Context) { + // Check if user exists + user, exists := c.Get("user") + if !exists { + c.JSON(http.StatusUnauthorized, models.ErrorResponse("User not logged in.")) + return + } + var moderator bool + for _, title := range user.(models.User).Titles { + if title == "Moderator" { + moderator = true + } + } + if !moderator { + c.JSON(http.StatusUnauthorized, models.ErrorResponse("Insufficient permissions.")) + return + } + // Bind parameter and body + id := c.Param("id") + mapID, err := strconv.Atoi(id) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + var request models.EditMapImageRequest + if err := c.BindJSON(&request); err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + // Update database with new data + sql := `UPDATE maps SET image = $2 WHERE id = $1` + _, err = database.DB.Exec(sql, mapID, request.Image) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) + return + } + // Return response + c.JSON(http.StatusOK, models.Response{ + Success: true, + Message: "Successfully updated map image.", + Data: request, + }) +} diff --git a/backend/models/requests.go b/backend/models/requests.go index f275203..fac05b6 100644 --- a/backend/models/requests.go +++ b/backend/models/requests.go @@ -27,6 +27,10 @@ type DeleteMapSummaryRequest struct { RouteID int `json:"route_id" binding:"required"` } +type EditMapImageRequest struct { + Image string `json:"image" binding:"required"` +} + type RecordRequest struct { HostDemo *multipart.FileHeader `json:"host_demo" form:"host_demo" binding:"required" swaggerignore:"true"` PartnerDemo *multipart.FileHeader `json:"partner_demo" form:"partner_demo" swaggerignore:"true"` diff --git a/backend/routes/routes.go b/backend/routes/routes.go index a39c8c4..1377d32 100644 --- a/backend/routes/routes.go +++ b/backend/routes/routes.go @@ -29,6 +29,7 @@ func InitRoutes(router *gin.Engine) { v1.POST("/maps/:id/summary", middleware.CheckAuth, controllers.CreateMapSummary) v1.PUT("/maps/:id/summary", middleware.CheckAuth, controllers.EditMapSummary) v1.DELETE("/maps/:id/summary", middleware.CheckAuth, controllers.DeleteMapSummary) + v1.PUT("/maps/:id/image", middleware.CheckAuth, controllers.EditMapImage) v1.GET("/maps/:id/leaderboards", controllers.FetchMapLeaderboards) v1.POST("/maps/:id/record", middleware.CheckAuth, controllers.CreateRecordWithDemo) v1.GET("/rankings", controllers.Rankings) -- cgit v1.2.3