diff options
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/controllers/mapController.go | 26 | ||||
| -rw-r--r-- | backend/models/models.go | 20 |
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] |
| 256 | func FetchChapters(c *gin.Context) { | 256 | func 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 | ||
| 161 | type ChaptersResponse struct { | ||
| 162 | Game Game `json:"game"` | ||
| 163 | Chapters []Chapter `json:"chapters"` | ||
| 164 | } | ||
| 165 | |||
| 161 | type Chapter struct { | 166 | type 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 | ||
| 167 | type MapShort struct { | 171 | type 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 | |||
| 176 | type ChapterMapsResponse struct { | ||
| 177 | Chapter Chapter `json:"chapter"` | ||
| 178 | Maps []MapShort `json:"maps"` | ||
| 171 | } | 179 | } |
| 172 | 180 | ||
| 173 | func ErrorResponse(message string) Response { | 181 | func ErrorResponse(message string) Response { |