aboutsummaryrefslogtreecommitdiff
path: root/backend/handlers/record.go
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-24 12:13:15 +0300
committerGitHub <noreply@github.com>2023-09-24 12:13:15 +0300
commit6f28f28ecd899fd7f90df42528ef178a94f6677d (patch)
treefbb00e75a5074e63028d31e1c90475d2d7d2d7cc /backend/handlers/record.go
parentfix: delete demo if parsing goes wrong (#90) (diff)
downloadlphub-6f28f28ecd899fd7f90df42528ef178a94f6677d.tar.gz
lphub-6f28f28ecd899fd7f90df42528ef178a94f6677d.tar.bz2
lphub-6f28f28ecd899fd7f90df42528ef178a94f6677d.zip
feat: removing (by flag) records (#56)
Former-commit-id: cc1bed84ee7ff9133192e1278c8315afee73d23a
Diffstat (limited to 'backend/handlers/record.go')
-rw-r--r--backend/handlers/record.go79
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
213func 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.