From 0a2c6021e36be31aaffe8ace232179e2211b3140 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Tue, 2 May 2023 23:25:48 +0300 Subject: feat: game, chapter, map endpoints for records page --- backend/models/models.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'backend/models') diff --git a/backend/models/models.go b/backend/models/models.go index cdcd111..8f77a93 100644 --- a/backend/models/models.go +++ b/backend/models/models.go @@ -153,6 +153,23 @@ type PlayerSummaries struct { GameServerIp string `json:"gameserverip"` } +type Game struct { + ID int `json:"id"` + Name string `json:"name"` +} + +type Chapter struct { + ID int `json:"id"` + GameID int `json:"game_id"` + Name string `json:"name"` +} + +type MapShort struct { + ID int `json:"id"` + ChapterID int `json:"chapter_id"` + Name string `json:"name"` +} + func ErrorResponse(message string) Response { return Response{ Success: false, -- cgit v1.2.3 From 4b87005639dabaf84f50084df7a02812676a733c Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Tue, 2 May 2023 23:36:21 +0300 Subject: feat: add path request to the response with names --- backend/controllers/mapController.go | 26 +++++++++++++++++--------- backend/models/models.go | 20 ++++++++++++++------ docs/docs.go | 25 +++++++++++++++---------- docs/swagger.json | 25 +++++++++++++++---------- docs/swagger.yaml | 17 ++++++++++------- 5 files changed, 71 insertions(+), 42 deletions(-) (limited to 'backend/models') diff --git a/backend/controllers/mapController.go b/backend/controllers/mapController.go index 2bf1fdc..506daa2 100644 --- a/backend/controllers/mapController.go +++ b/backend/controllers/mapController.go @@ -250,7 +250,7 @@ func FetchGames(c *gin.Context) { // @Tags chapters // @Produce json // @Param id path int true "Game ID" -// @Success 200 {object} models.Response{data=[]models.Chapter} +// @Success 200 {object} models.Response{data=models.ChaptersResponse} // @Failure 400 {object} models.Response // @Router /chapters/{id} [get] func FetchChapters(c *gin.Context) { @@ -260,25 +260,29 @@ func FetchChapters(c *gin.Context) { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } - rows, err := database.DB.Query(`SELECT id, name FROM chapters WHERE game_id = $1`, gameID) + var response models.ChaptersResponse + rows, err := database.DB.Query(`SELECT c.id, c.name, g.name FROM chapters c INNER JOIN games g ON c.game_id = g.id WHERE game_id = $1`, gameID) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } var chapters []models.Chapter + var gameName string for rows.Next() { var chapter models.Chapter - if err := rows.Scan(&chapter.ID, &chapter.Name); err != nil { + if err := rows.Scan(&chapter.ID, &chapter.Name, &gameName); err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } - chapter.GameID = intID chapters = append(chapters, chapter) } + response.Game.ID = intID + response.Game.Name = gameName + response.Chapters = chapters c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Successfully retrieved chapters.", - Data: chapters, + Data: response, }) } @@ -298,24 +302,28 @@ func FetchChapterMaps(c *gin.Context) { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } - rows, err := database.DB.Query(`SELECT id, name FROM maps WHERE chapter_id = $1`, chapterID) + var response models.ChapterMapsResponse + rows, err := database.DB.Query(`SELECT m.id, m.name, c.name FROM maps m INNER JOIN chapters c ON m.chapter_id = c.id WHERE chapter_id = $1`, chapterID) if err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } var maps []models.MapShort + var chapterName string for rows.Next() { var mapShort models.MapShort - if err := rows.Scan(&mapShort.ID, &mapShort.Name); err != nil { + if err := rows.Scan(&mapShort.ID, &mapShort.Name, &chapterName); err != nil { c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) return } - mapShort.ChapterID = intID maps = append(maps, mapShort) } + response.Chapter.ID = intID + response.Chapter.Name = chapterName + response.Maps = maps c.JSON(http.StatusOK, models.Response{ Success: true, Message: "Successfully retrieved maps.", - Data: maps, + Data: response, }) } diff --git a/backend/models/models.go b/backend/models/models.go index 8f77a93..6f5173a 100644 --- a/backend/models/models.go +++ b/backend/models/models.go @@ -158,16 +158,24 @@ type Game struct { Name string `json:"name"` } +type ChaptersResponse struct { + Game Game `json:"game"` + Chapters []Chapter `json:"chapters"` +} + type Chapter struct { - ID int `json:"id"` - GameID int `json:"game_id"` - Name string `json:"name"` + ID int `json:"id"` + Name string `json:"name"` } type MapShort struct { - ID int `json:"id"` - ChapterID int `json:"chapter_id"` - Name string `json:"name"` + ID int `json:"id"` + Name string `json:"name"` +} + +type ChapterMapsResponse struct { + Chapter Chapter `json:"chapter"` + Maps []MapShort `json:"maps"` } func ErrorResponse(message string) Response { diff --git a/docs/docs.go b/docs/docs.go index 788ca3d..164db20 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -50,10 +50,7 @@ const docTemplate = `{ "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/definitions/models.Chapter" - } + "$ref": "#/definitions/models.ChaptersResponse" } } } @@ -746,9 +743,6 @@ const docTemplate = `{ "models.Chapter": { "type": "object", "properties": { - "game_id": { - "type": "integer" - }, "id": { "type": "integer" }, @@ -757,6 +751,20 @@ const docTemplate = `{ } } }, + "models.ChaptersResponse": { + "type": "object", + "properties": { + "chapters": { + "type": "array", + "items": { + "$ref": "#/definitions/models.Chapter" + } + }, + "game": { + "$ref": "#/definitions/models.Game" + } + } + }, "models.Game": { "type": "object", "properties": { @@ -834,9 +842,6 @@ const docTemplate = `{ "models.MapShort": { "type": "object", "properties": { - "chapter_id": { - "type": "integer" - }, "id": { "type": "integer" }, diff --git a/docs/swagger.json b/docs/swagger.json index ba0e8a3..653d52f 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -43,10 +43,7 @@ "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/definitions/models.Chapter" - } + "$ref": "#/definitions/models.ChaptersResponse" } } } @@ -739,9 +736,6 @@ "models.Chapter": { "type": "object", "properties": { - "game_id": { - "type": "integer" - }, "id": { "type": "integer" }, @@ -750,6 +744,20 @@ } } }, + "models.ChaptersResponse": { + "type": "object", + "properties": { + "chapters": { + "type": "array", + "items": { + "$ref": "#/definitions/models.Chapter" + } + }, + "game": { + "$ref": "#/definitions/models.Game" + } + } + }, "models.Game": { "type": "object", "properties": { @@ -827,9 +835,6 @@ "models.MapShort": { "type": "object", "properties": { - "chapter_id": { - "type": "integer" - }, "id": { "type": "integer" }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 8b66ec8..88f2d7f 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -2,13 +2,20 @@ basePath: /v1 definitions: models.Chapter: properties: - game_id: - type: integer id: type: integer name: type: string type: object + models.ChaptersResponse: + properties: + chapters: + items: + $ref: '#/definitions/models.Chapter' + type: array + game: + $ref: '#/definitions/models.Game' + type: object models.Game: properties: id: @@ -59,8 +66,6 @@ definitions: type: object models.MapShort: properties: - chapter_id: - type: integer id: type: integer name: @@ -205,9 +210,7 @@ paths: - $ref: '#/definitions/models.Response' - properties: data: - items: - $ref: '#/definitions/models.Chapter' - type: array + $ref: '#/definitions/models.ChaptersResponse' type: object "400": description: Bad Request -- cgit v1.2.3