aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/controllers/mapController.go26
-rw-r--r--backend/models/models.go20
2 files changed, 31 insertions, 15 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 {