diff options
Diffstat (limited to 'backend/handlers/record.go')
| -rw-r--r-- | backend/handlers/record.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/backend/handlers/record.go b/backend/handlers/record.go index 4787422..70095bf 100644 --- a/backend/handlers/record.go +++ b/backend/handlers/record.go | |||
| @@ -8,6 +8,7 @@ import ( | |||
| 8 | "mime/multipart" | 8 | "mime/multipart" |
| 9 | "net/http" | 9 | "net/http" |
| 10 | "os" | 10 | "os" |
| 11 | "strconv" | ||
| 11 | 12 | ||
| 12 | "github.com/gin-gonic/gin" | 13 | "github.com/gin-gonic/gin" |
| 13 | "github.com/google/uuid" | 14 | "github.com/google/uuid" |
| @@ -209,6 +210,84 @@ func CreateRecordWithDemo(c *gin.Context) { | |||
| 209 | }) | 210 | }) |
| 210 | } | 211 | } |
| 211 | 212 | ||
| 213 | func DeleteRecord(c *gin.Context) { | ||
| 214 | mapID, err := strconv.Atoi(c.Param("mapid")) | ||
| 215 | if err != nil { | ||
| 216 | c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) | ||
| 217 | return | ||
| 218 | } | ||
| 219 | recordID, err := strconv.Atoi(c.Param("recordid")) | ||
| 220 | if err != nil { | ||
| 221 | c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) | ||
| 222 | return | ||
| 223 | } | ||
| 224 | user, exists := c.Get("user") | ||
| 225 | if !exists { | ||
| 226 | c.JSON(http.StatusOK, models.ErrorResponse("User not logged in.")) | ||
| 227 | return | ||
| 228 | } | ||
| 229 | // Validate map | ||
| 230 | var validateMapID int | ||
| 231 | var isCoop bool | ||
| 232 | sql := `SELECT m.id, g.is_coop FROM maps m INNER JOIN games g ON m.game_id = g.id | ||
| 233 | INNER JOIN chapters c ON m.chapter_id = c.id WHERE m.id = $1` | ||
| 234 | err = database.DB.QueryRow(sql, mapID).Scan(&validateMapID, &isCoop) | ||
| 235 | if err != nil { | ||
| 236 | c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) | ||
| 237 | return | ||
| 238 | } | ||
| 239 | if mapID != validateMapID { | ||
| 240 | c.JSON(http.StatusOK, models.ErrorResponse("Selected map does not exist.")) | ||
| 241 | return | ||
| 242 | } | ||
| 243 | if isCoop { | ||
| 244 | // Validate if cooperative record does exist | ||
| 245 | var validateRecordID int | ||
| 246 | sql = `SELECT mp.id FROM records_mp mp WHERE mp.id = $1 AND mp.map_id = $2 AND (mp.host_id = $3 OR mp.partner_id = $3) AND is_deleted = false` | ||
| 247 | err = database.DB.QueryRow(sql, recordID, mapID, user.(models.User).SteamID).Scan(&validateRecordID) | ||
| 248 | if err != nil { | ||
| 249 | c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) | ||
| 250 | return | ||
| 251 | } | ||
| 252 | if recordID != validateRecordID { | ||
| 253 | c.JSON(http.StatusOK, models.ErrorResponse("Selected record does not exist.")) | ||
| 254 | return | ||
| 255 | } | ||
| 256 | // Remove record | ||
| 257 | sql = `UPDATE records_mp SET is_deleted = true WHERE id = $1` | ||
| 258 | _, err = database.DB.Exec(sql, recordID) | ||
| 259 | if err != nil { | ||
| 260 | c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) | ||
| 261 | return | ||
| 262 | } | ||
| 263 | } else { | ||
| 264 | // Validate if singleplayer record does exist | ||
| 265 | var validateRecordID int | ||
| 266 | sql = `SELECT sp.id FROM records_sp sp WHERE sp.id = $1 AND sp.map_id = $2 AND sp.user_id = $3 AND is_deleted = false` | ||
| 267 | err = database.DB.QueryRow(sql, recordID, mapID, user.(models.User).SteamID).Scan(&validateRecordID) | ||
| 268 | if err != nil { | ||
| 269 | c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) | ||
| 270 | return | ||
| 271 | } | ||
| 272 | if recordID != validateRecordID { | ||
| 273 | c.JSON(http.StatusOK, models.ErrorResponse("Selected record does not exist.")) | ||
| 274 | return | ||
| 275 | } | ||
| 276 | // Remove record | ||
| 277 | sql = `UPDATE records_sp SET is_deleted = true WHERE id = $1` | ||
| 278 | _, err = database.DB.Exec(sql, recordID) | ||
| 279 | if err != nil { | ||
| 280 | c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) | ||
| 281 | return | ||
| 282 | } | ||
| 283 | } | ||
| 284 | c.JSON(http.StatusOK, models.Response{ | ||
| 285 | Success: true, | ||
| 286 | Message: "Successfully deleted record.", | ||
| 287 | Data: nil, | ||
| 288 | }) | ||
| 289 | } | ||
| 290 | |||
| 212 | // GET Demo | 291 | // GET Demo |
| 213 | // | 292 | // |
| 214 | // @Description Get demo with specified demo uuid. | 293 | // @Description Get demo with specified demo uuid. |