aboutsummaryrefslogtreecommitdiff
path: root/backend/controllers/mapController.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/controllers/mapController.go')
-rw-r--r--backend/controllers/mapController.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/backend/controllers/mapController.go b/backend/controllers/mapController.go
new file mode 100644
index 0000000..c26d1ad
--- /dev/null
+++ b/backend/controllers/mapController.go
@@ -0,0 +1,79 @@
1package controllers
2
3import (
4 "net/http"
5 "strconv"
6
7 "github.com/gin-gonic/gin"
8 "github.com/pektezol/leastportals/backend/database"
9 "github.com/pektezol/leastportals/backend/models"
10)
11
12func FetchMap(c *gin.Context) {
13 id := c.Param("id")
14 // Get map data
15 var mapData models.Map
16 var isDisabled bool
17 intID, err := strconv.Atoi(id)
18 if err != nil {
19 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
20 return
21 }
22 mapData.ID = intID
23 sql := `SELECT map_name, wr_score, wr_time, is_coop, is_disabled FROM maps WHERE id = $1;`
24 err = database.DB.QueryRow(sql, id).Scan(&mapData.Name, &mapData.ScoreWR, &mapData.TimeWR, &mapData.IsCoop, &isDisabled)
25 if err != nil {
26 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
27 return
28 }
29 if isDisabled {
30 c.JSON(http.StatusBadRequest, models.ErrorResponse("Map is not available for competitive boards."))
31 return
32 }
33 // Get records from the map
34 if mapData.IsCoop {
35 var records []models.RecordMP
36 sql = `SELECT id, host_id, partner_id, score_count, score_time, host_demo_id, partner_demo_id, record_date
37 FROM records_mp WHERE map_id = $1;`
38 rows, err := database.DB.Query(sql, id)
39 if err != nil {
40 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
41 return
42 }
43 for rows.Next() {
44 var record models.RecordMP
45 err := rows.Scan(&record.RecordID, &record.HostID, &record.PartnerID, &record.ScoreCount, &record.ScoreTime, &record.HostDemoID, &record.PartnerDemoID, &record.RecordDate)
46 if err != nil {
47 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
48 return
49 }
50 records = append(records, record)
51 }
52 mapData.Records = records
53 } else {
54 var records []models.RecordSP
55 sql = `SELECT id, user_id, score_count, score_time, demo_id, record_date
56 FROM records_sp WHERE map_id = $1;`
57 rows, err := database.DB.Query(sql, id)
58 if err != nil {
59 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
60 return
61 }
62 for rows.Next() {
63 var record models.RecordSP
64 err := rows.Scan(&record.RecordID, &record.UserID, &record.ScoreCount, &record.ScoreTime, &record.DemoID, &record.RecordDate)
65 if err != nil {
66 c.JSON(http.StatusBadRequest, models.ErrorResponse(err.Error()))
67 return
68 }
69 records = append(records, record)
70 }
71 mapData.Records = records
72 }
73 // Return response
74 c.JSON(http.StatusOK, models.Response{
75 Success: true,
76 Message: "Successfully retrieved map data.",
77 Data: mapData,
78 })
79}