From 7f56ba240f71c1f6800d1d51ba278b8d5a968ab3 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Fri, 22 Dec 2023 12:22:14 +0300 Subject: fix: discussions logic cleanup, docs title changes (#142) --- backend/handlers/discussions.go | 35 ++++++++++++++++++----------------- backend/handlers/map.go | 4 ++-- backend/handlers/mod.go | 8 ++++---- backend/handlers/record.go | 4 ++-- 4 files changed, 26 insertions(+), 25 deletions(-) (limited to 'backend/handlers') diff --git a/backend/handlers/discussions.go b/backend/handlers/discussions.go index 04c91d0..89297f2 100644 --- a/backend/handlers/discussions.go +++ b/backend/handlers/discussions.go @@ -24,6 +24,7 @@ type MapDiscussion struct { Title string `json:"title"` Content string `json:"content"` // Upvotes int `json:"upvotes"` + CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` Comments []MapDiscussionComment `json:"comments"` } @@ -51,7 +52,7 @@ type EditMapDiscussionRequest struct { // GET Map Discussions // // @Description Get map discussions with specified map id. -// @Tags maps +// @Tags maps / discussions // @Produce json // @Param mapid path int true "Map ID" // @Success 200 {object} models.Response{data=MapDiscussionsResponse} @@ -64,8 +65,8 @@ func FetchMapDiscussions(c *gin.Context) { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - sql := `SELECT md.id, u.steam_id, u.user_name, u.avatar_link, md.title, md.content, md.updated_at FROM map_discussions md - INNER JOIN users u ON md.user_id = u.steam_id WHERE md.map_id = $1 + sql := `SELECT md.id, u.steam_id, u.user_name, u.avatar_link, md.title, md.content, md.created_at, md.updated_at FROM map_discussions md + INNER JOIN users u ON md.user_id = u.steam_id WHERE md.map_id = $1 AND is_deleted = false ORDER BY md.updated_at DESC` rows, err := database.DB.Query(sql, mapID) if err != nil { @@ -75,7 +76,7 @@ func FetchMapDiscussions(c *gin.Context) { // Get discussion data for rows.Next() { discussion := MapDiscussion{} - err := rows.Scan(&discussion.ID, &discussion.Creator.SteamID, &discussion.Creator.UserName, &discussion.Creator.AvatarLink, &discussion.Title, &discussion.Content, &discussion.UpdatedAt) + err := rows.Scan(&discussion.ID, &discussion.Creator.SteamID, &discussion.Creator.UserName, &discussion.Creator.AvatarLink, &discussion.Title, &discussion.Content, &discussion.CreatedAt, &discussion.UpdatedAt) if err != nil { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return @@ -92,7 +93,7 @@ func FetchMapDiscussions(c *gin.Context) { // GET Map Discussion // // @Description Get map discussion with specified map and discussion id. -// @Tags maps +// @Tags maps / discussions // @Produce json // @Param mapid path int true "Map ID" // @Param discussionid path int true "Discussion ID" @@ -111,9 +112,9 @@ func FetchMapDiscussion(c *gin.Context) { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - sql := `SELECT md.id, u.steam_id, u.user_name, u.avatar_link, md.title, md.content, md.updated_at FROM map_discussions md - INNER JOIN users u ON md.user_id = u.steam_id WHERE md.map_id = $1 AND md.id = $2` - err = database.DB.QueryRow(sql, mapID, discussionID).Scan(&response.Discussion.ID, &response.Discussion.Creator.SteamID, &response.Discussion.Creator.UserName, &response.Discussion.Creator.AvatarLink, &response.Discussion.Title, &response.Discussion.Content, &response.Discussion.UpdatedAt) + sql := `SELECT md.id, u.steam_id, u.user_name, u.avatar_link, md.title, md.content, md.created_at, md.updated_at FROM map_discussions md + INNER JOIN users u ON md.user_id = u.steam_id WHERE md.map_id = $1 AND md.id = $2 AND is_deleted = false` + err = database.DB.QueryRow(sql, mapID, discussionID).Scan(&response.Discussion.ID, &response.Discussion.Creator.SteamID, &response.Discussion.Creator.UserName, &response.Discussion.Creator.AvatarLink, &response.Discussion.Title, &response.Discussion.Content, &response.Discussion.CreatedAt, &response.Discussion.UpdatedAt) if err != nil { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return @@ -145,7 +146,7 @@ func FetchMapDiscussion(c *gin.Context) { // POST Map Discussion // // @Description Create map discussion with specified map id. -// @Tags maps +// @Tags maps / discussions // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" @@ -185,11 +186,11 @@ func CreateMapDiscussion(c *gin.Context) { // POST Map Discussion Comment // // @Description Create map discussion comment with specified map id. -// @Tags maps +// @Tags maps / discussions // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" -// @Param discussionid path int true "Discussion ID" +// @Param discussionid path int true "Discussion ID" // @Param request body CreateMapDiscussionCommentRequest true "Body" // @Success 200 {object} models.Response{data=CreateMapDiscussionCommentRequest} // @Router /maps/{mapid}/discussions/{discussionid} [post] @@ -231,7 +232,7 @@ func CreateMapDiscussionComment(c *gin.Context) { // PUT Map Discussion // // @Description Edit map discussion with specified map id. -// @Tags maps +// @Tags maps / discussions // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" @@ -260,7 +261,7 @@ func EditMapDiscussion(c *gin.Context) { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - sql := `UPDATE map_discussions SET title = $4, content = $5, updated_at = $6 WHERE id = $1 AND map_id = $2 AND user_id = $3` + sql := `UPDATE map_discussions SET title = $4, content = $5, updated_at = $6 WHERE id = $1 AND map_id = $2 AND user_id = $3 AND is_deleted = false` result, err := database.DB.Exec(sql, discussionID, mapID, user.(models.User).SteamID, request.Title, request.Content, time.Now().UTC()) if err != nil { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) @@ -282,10 +283,10 @@ func EditMapDiscussion(c *gin.Context) { }) } -// DELETE Map Summary +// DELETE Map Discussion // -// @Description Delete map summary with specified map id. -// @Tags maps +// @Description Delete map discussion with specified map id. +// @Tags maps / discussions // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" @@ -308,7 +309,7 @@ func DeleteMapDiscussion(c *gin.Context) { c.JSON(http.StatusOK, models.ErrorResponse("User not logged in.")) return } - sql := `DELETE FROM map_discussions WHERE id = $1 AND map_id = $2 AND user_id = $3` + sql := `UPDATE map_discussions SET is_disabled = true WHERE id = $1 AND map_id = $2 AND user_id = $3` result, err := database.DB.Exec(sql, discussionID, mapID, user.(models.User).SteamID) if err != nil { c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) diff --git a/backend/handlers/map.go b/backend/handlers/map.go index f985a23..dfadade 100644 --- a/backend/handlers/map.go +++ b/backend/handlers/map.go @@ -61,7 +61,7 @@ type RecordMultiplayer struct { // GET Map Summary // // @Description Get map summary with specified id. -// @Tags maps +// @Tags maps / summary // @Produce json // @Param mapid path int true "Map ID" // @Success 200 {object} models.Response{data=MapSummaryResponse} @@ -140,7 +140,7 @@ func FetchMapSummary(c *gin.Context) { // GET Map Leaderboards // // @Description Get map leaderboards with specified id. -// @Tags maps +// @Tags maps / leaderboards // @Produce json // @Param mapid path int true "Map ID" // @Param page query int false "Page Number (default: 1)" diff --git a/backend/handlers/mod.go b/backend/handlers/mod.go index 845152f..3709e1d 100644 --- a/backend/handlers/mod.go +++ b/backend/handlers/mod.go @@ -40,7 +40,7 @@ type EditMapImageRequest struct { // POST Map Summary // // @Description Create map summary with specified map id. -// @Tags maps +// @Tags maps / summary // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" @@ -124,7 +124,7 @@ func CreateMapSummary(c *gin.Context) { // PUT Map Summary // // @Description Edit map summary with specified map id. -// @Tags maps +// @Tags maps / summary // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" @@ -209,7 +209,7 @@ func EditMapSummary(c *gin.Context) { // DELETE Map Summary // // @Description Delete map summary with specified map id. -// @Tags maps +// @Tags maps / summary // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" @@ -298,7 +298,7 @@ func DeleteMapSummary(c *gin.Context) { // PUT Map Image // // @Description Edit map image with specified map id. -// @Tags maps +// @Tags maps / summary // @Produce json // @Param Authorization header string true "JWT Token" // @Param mapid path int true "Map ID" diff --git a/backend/handlers/record.go b/backend/handlers/record.go index 5dff085..79e9d3b 100644 --- a/backend/handlers/record.go +++ b/backend/handlers/record.go @@ -35,7 +35,7 @@ type RecordResponse struct { // POST Record // // @Description Post record with demo of a specific map. -// @Tags maps +// @Tags maps / leaderboards // @Accept mpfd // @Produce json // @Param mapid path int true "Map ID" @@ -202,7 +202,7 @@ func CreateRecordWithDemo(c *gin.Context) { // DELETE Record // // @Description Delete record with specified map and record id. -// @Tags maps +// @Tags maps / leaderboards // @Produce json // @Param mapid path int true "Map ID" // @Param recordid path int true "Record ID" -- cgit v1.2.3