aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-05-02 23:36:21 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-05-02 23:36:21 +0300
commit4b87005639dabaf84f50084df7a02812676a733c (patch)
treec9f5a918c7f32bda86441dffd6e714013fa7c35a
parentfeat: game, chapter, map endpoints for records page (diff)
downloadlphub-4b87005639dabaf84f50084df7a02812676a733c.tar.gz
lphub-4b87005639dabaf84f50084df7a02812676a733c.tar.bz2
lphub-4b87005639dabaf84f50084df7a02812676a733c.zip
feat: add path request to the response with names
-rw-r--r--backend/controllers/mapController.go26
-rw-r--r--backend/models/models.go20
-rw-r--r--docs/docs.go25
-rw-r--r--docs/swagger.json25
-rw-r--r--docs/swagger.yaml17
5 files changed, 71 insertions, 42 deletions
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) {
250// @Tags chapters 250// @Tags chapters
251// @Produce json 251// @Produce json
252// @Param id path int true "Game ID" 252// @Param id path int true "Game ID"
253// @Success 200 {object} models.Response{data=[]models.Chapter} 253// @Success 200 {object} models.Response{data=models.ChaptersResponse}
254// @Failure 400 {object} models.Response 254// @Failure 400 {object} models.Response
255// @Router /chapters/{id} [get] 255// @Router /chapters/{id} [get]
256func FetchChapters(c *gin.Context) { 256func FetchChapters(c *gin.Context) {
@@ -260,25 +260,29 @@ func FetchChapters(c *gin.Context) {
260 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) 260 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
261 return 261 return
262 } 262 }
263 rows, err := database.DB.Query(`SELECT id, name FROM chapters WHERE game_id = $1`, gameID) 263 var response models.ChaptersResponse
264 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)
264 if err != nil { 265 if err != nil {
265 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) 266 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
266 return 267 return
267 } 268 }
268 var chapters []models.Chapter 269 var chapters []models.Chapter
270 var gameName string
269 for rows.Next() { 271 for rows.Next() {
270 var chapter models.Chapter 272 var chapter models.Chapter
271 if err := rows.Scan(&chapter.ID, &chapter.Name); err != nil { 273 if err := rows.Scan(&chapter.ID, &chapter.Name, &gameName); err != nil {
272 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) 274 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
273 return 275 return
274 } 276 }
275 chapter.GameID = intID
276 chapters = append(chapters, chapter) 277 chapters = append(chapters, chapter)
277 } 278 }
279 response.Game.ID = intID
280 response.Game.Name = gameName
281 response.Chapters = chapters
278 c.JSON(http.StatusOK, models.Response{ 282 c.JSON(http.StatusOK, models.Response{
279 Success: true, 283 Success: true,
280 Message: "Successfully retrieved chapters.", 284 Message: "Successfully retrieved chapters.",
281 Data: chapters, 285 Data: response,
282 }) 286 })
283} 287}
284 288
@@ -298,24 +302,28 @@ func FetchChapterMaps(c *gin.Context) {
298 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) 302 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
299 return 303 return
300 } 304 }
301 rows, err := database.DB.Query(`SELECT id, name FROM maps WHERE chapter_id = $1`, chapterID) 305 var response models.ChapterMapsResponse
306 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)
302 if err != nil { 307 if err != nil {
303 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) 308 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
304 return 309 return
305 } 310 }
306 var maps []models.MapShort 311 var maps []models.MapShort
312 var chapterName string
307 for rows.Next() { 313 for rows.Next() {
308 var mapShort models.MapShort 314 var mapShort models.MapShort
309 if err := rows.Scan(&mapShort.ID, &mapShort.Name); err != nil { 315 if err := rows.Scan(&mapShort.ID, &mapShort.Name, &chapterName); err != nil {
310 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error())) 316 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
311 return 317 return
312 } 318 }
313 mapShort.ChapterID = intID
314 maps = append(maps, mapShort) 319 maps = append(maps, mapShort)
315 } 320 }
321 response.Chapter.ID = intID
322 response.Chapter.Name = chapterName
323 response.Maps = maps
316 c.JSON(http.StatusOK, models.Response{ 324 c.JSON(http.StatusOK, models.Response{
317 Success: true, 325 Success: true,
318 Message: "Successfully retrieved maps.", 326 Message: "Successfully retrieved maps.",
319 Data: maps, 327 Data: response,
320 }) 328 })
321} 329}
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 {
158 Name string `json:"name"` 158 Name string `json:"name"`
159} 159}
160 160
161type ChaptersResponse struct {
162 Game Game `json:"game"`
163 Chapters []Chapter `json:"chapters"`
164}
165
161type Chapter struct { 166type Chapter struct {
162 ID int `json:"id"` 167 ID int `json:"id"`
163 GameID int `json:"game_id"` 168 Name string `json:"name"`
164 Name string `json:"name"`
165} 169}
166 170
167type MapShort struct { 171type MapShort struct {
168 ID int `json:"id"` 172 ID int `json:"id"`
169 ChapterID int `json:"chapter_id"` 173 Name string `json:"name"`
170 Name string `json:"name"` 174}
175
176type ChapterMapsResponse struct {
177 Chapter Chapter `json:"chapter"`
178 Maps []MapShort `json:"maps"`
171} 179}
172 180
173func ErrorResponse(message string) Response { 181func 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 = `{
50 "type": "object", 50 "type": "object",
51 "properties": { 51 "properties": {
52 "data": { 52 "data": {
53 "type": "array", 53 "$ref": "#/definitions/models.ChaptersResponse"
54 "items": {
55 "$ref": "#/definitions/models.Chapter"
56 }
57 } 54 }
58 } 55 }
59 } 56 }
@@ -746,9 +743,6 @@ const docTemplate = `{
746 "models.Chapter": { 743 "models.Chapter": {
747 "type": "object", 744 "type": "object",
748 "properties": { 745 "properties": {
749 "game_id": {
750 "type": "integer"
751 },
752 "id": { 746 "id": {
753 "type": "integer" 747 "type": "integer"
754 }, 748 },
@@ -757,6 +751,20 @@ const docTemplate = `{
757 } 751 }
758 } 752 }
759 }, 753 },
754 "models.ChaptersResponse": {
755 "type": "object",
756 "properties": {
757 "chapters": {
758 "type": "array",
759 "items": {
760 "$ref": "#/definitions/models.Chapter"
761 }
762 },
763 "game": {
764 "$ref": "#/definitions/models.Game"
765 }
766 }
767 },
760 "models.Game": { 768 "models.Game": {
761 "type": "object", 769 "type": "object",
762 "properties": { 770 "properties": {
@@ -834,9 +842,6 @@ const docTemplate = `{
834 "models.MapShort": { 842 "models.MapShort": {
835 "type": "object", 843 "type": "object",
836 "properties": { 844 "properties": {
837 "chapter_id": {
838 "type": "integer"
839 },
840 "id": { 845 "id": {
841 "type": "integer" 846 "type": "integer"
842 }, 847 },
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 @@
43 "type": "object", 43 "type": "object",
44 "properties": { 44 "properties": {
45 "data": { 45 "data": {
46 "type": "array", 46 "$ref": "#/definitions/models.ChaptersResponse"
47 "items": {
48 "$ref": "#/definitions/models.Chapter"
49 }
50 } 47 }
51 } 48 }
52 } 49 }
@@ -739,9 +736,6 @@
739 "models.Chapter": { 736 "models.Chapter": {
740 "type": "object", 737 "type": "object",
741 "properties": { 738 "properties": {
742 "game_id": {
743 "type": "integer"
744 },
745 "id": { 739 "id": {
746 "type": "integer" 740 "type": "integer"
747 }, 741 },
@@ -750,6 +744,20 @@
750 } 744 }
751 } 745 }
752 }, 746 },
747 "models.ChaptersResponse": {
748 "type": "object",
749 "properties": {
750 "chapters": {
751 "type": "array",
752 "items": {
753 "$ref": "#/definitions/models.Chapter"
754 }
755 },
756 "game": {
757 "$ref": "#/definitions/models.Game"
758 }
759 }
760 },
753 "models.Game": { 761 "models.Game": {
754 "type": "object", 762 "type": "object",
755 "properties": { 763 "properties": {
@@ -827,9 +835,6 @@
827 "models.MapShort": { 835 "models.MapShort": {
828 "type": "object", 836 "type": "object",
829 "properties": { 837 "properties": {
830 "chapter_id": {
831 "type": "integer"
832 },
833 "id": { 838 "id": {
834 "type": "integer" 839 "type": "integer"
835 }, 840 },
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
2definitions: 2definitions:
3 models.Chapter: 3 models.Chapter:
4 properties: 4 properties:
5 game_id:
6 type: integer
7 id: 5 id:
8 type: integer 6 type: integer
9 name: 7 name:
10 type: string 8 type: string
11 type: object 9 type: object
10 models.ChaptersResponse:
11 properties:
12 chapters:
13 items:
14 $ref: '#/definitions/models.Chapter'
15 type: array
16 game:
17 $ref: '#/definitions/models.Game'
18 type: object
12 models.Game: 19 models.Game:
13 properties: 20 properties:
14 id: 21 id:
@@ -59,8 +66,6 @@ definitions:
59 type: object 66 type: object
60 models.MapShort: 67 models.MapShort:
61 properties: 68 properties:
62 chapter_id:
63 type: integer
64 id: 69 id:
65 type: integer 70 type: integer
66 name: 71 name:
@@ -205,9 +210,7 @@ paths:
205 - $ref: '#/definitions/models.Response' 210 - $ref: '#/definitions/models.Response'
206 - properties: 211 - properties:
207 data: 212 data:
208 items: 213 $ref: '#/definitions/models.ChaptersResponse'
209 $ref: '#/definitions/models.Chapter'
210 type: array
211 type: object 214 type: object
212 "400": 215 "400":
213 description: Bad Request 216 description: Bad Request