From 2728972d3428d82b73c49be8b600e0334c42775b Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Fri, 18 Oct 2024 22:51:20 +0300 Subject: backend: optimize create record --- backend/handlers/record.go | 30 ++++++++++++------------------ backend/parser/parser.go | 12 ++++++------ 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/backend/handlers/record.go b/backend/handlers/record.go index 2338097..ed9250d 100644 --- a/backend/handlers/record.go +++ b/backend/handlers/record.go @@ -115,36 +115,28 @@ func CreateRecordWithDemo(c *gin.Context) { for i, header := range demoFiles { uuid := uuid.New().String() // Upload & insert into demos - err = c.SaveUploadedFile(header, "backend/parser/"+uuid+".dem") + err = c.SaveUploadedFile(header, "parser/"+uuid+".dem") if err != nil { CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionCreateRecordSaveDemoFail, err.Error()) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } - defer os.Remove("backend/parser/" + uuid + ".dem") - f, err := os.Open("backend/parser/" + uuid + ".dem") + defer os.Remove("parser/" + uuid + ".dem") + f, err := os.Open("parser/" + uuid + ".dem") if err != nil { CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionCreateRecordOpenDemoFail, err.Error()) c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) return } defer f.Close() - file, err := createFile(srv, uuid+".dem", "application/octet-stream", f, os.Getenv("GOOGLE_FOLDER_ID")) - if err != nil { - CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionCreateRecordCreateDemoFail, err.Error()) - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) - return - } - parserResult, err := parser.ProcessDemo("backend/parser/" + uuid + ".dem") + parserResult, err := parser.ProcessDemo("parser/" + uuid + ".dem") if err != nil { - deleteFile(srv, file.Id) CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionCreateRecordProcessDemoFail, err.Error()) - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + c.JSON(http.StatusOK, models.ErrorResponse("Error while processing demo: "+err.Error())) return } if mapID != parserResult.MapID { - deleteFile(srv, file.Id) - c.JSON(http.StatusOK, models.ErrorResponse("demo map does not match uploaded map id")) + c.JSON(http.StatusOK, models.ErrorResponse("Demo map does not match selected map id.")) return } hostDemoScoreCount = parserResult.PortalCount @@ -152,7 +144,6 @@ func CreateRecordWithDemo(c *gin.Context) { hostSteamID = parserResult.HostSteamID partnerSteamID = parserResult.PartnerSteamID if hostDemoScoreCount == 0 && hostDemoScoreTime == 0 { - deleteFile(srv, file.Id) CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionCreateRecordProcessDemoFail, err.Error()) c.JSON(http.StatusOK, models.ErrorResponse("Processing demo went wrong. Please contact a web admin and provide the demo in question.")) return @@ -160,22 +151,25 @@ func CreateRecordWithDemo(c *gin.Context) { if !isCoop { convertedSteamID := strconv.FormatInt(convertSteamID64(hostSteamID), 10) if convertedSteamID != user.(models.User).SteamID { - deleteFile(srv, file.Id) c.JSON(http.StatusOK, models.ErrorResponse(fmt.Sprintf("Host SteamID from demo and request does not match! Check your submission and try again.\nDemo Host SteamID: %s\nRequest Host SteamID: %s", convertedSteamID, user.(models.User).SteamID))) return } } else { if parserResult.IsHost && i != 0 { - deleteFile(srv, file.Id) c.JSON(http.StatusOK, models.ErrorResponse("Given partner demo is a host demo.")) return } if !parserResult.IsHost && i == 0 { - deleteFile(srv, file.Id) c.JSON(http.StatusOK, models.ErrorResponse("Given host demo is a partner demo.")) return } } + file, err := createFile(srv, uuid+".dem", "application/octet-stream", f, os.Getenv("GOOGLE_FOLDER_ID")) + if err != nil { + CreateLog(user.(models.User).SteamID, LogTypeRecord, LogDescriptionCreateRecordCreateDemoFail, err.Error()) + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } if i == 0 { hostDemoFileID = file.Id hostDemoUUID = uuid diff --git a/backend/parser/parser.go b/backend/parser/parser.go index bf25caa..aa19592 100644 --- a/backend/parser/parser.go +++ b/backend/parser/parser.go @@ -38,16 +38,16 @@ func ProcessDemo(filePath string) (Result, error) { mapName := reader.TryReadStringLength(260) reader.SkipBytes(276) if demoFileStamp != "HL2DEMO" { - return Result{}, errors.New("invalid demo file stamp") + return Result{}, errors.New("Invalid demo file stamp.") } if demoProtocol != 4 { - return Result{}, errors.New("this parser only supports demos from new engine") + return Result{}, errors.New("Invalid demo protocol.") } if networkProtocol != 2001 { - return Result{}, errors.New("this parser only supports demos from portal 2") + return Result{}, errors.New("Invalid network protocol.") } if mapDict[mapName] == 0 { - return Result{}, errors.New("demo recorded on an invalid map") + return Result{}, errors.New("Invalid map.") } result.MapID = mapDict[mapName] for { @@ -419,7 +419,7 @@ var mapDict = map[string]int{ "sp_a4_finale4": 60, "mp_coop_start": 61, - "mp_coop_lobby_2": 62, + "mp_coop_lobby_3": 62, "mp_coop_doors": 63, "mp_coop_race_2": 64, @@ -465,7 +465,7 @@ var mapDict = map[string]int{ "mp_coop_paint_speed_catch": 100, "mp_coop_paint_longjump_intro": 101, - "mp_coop_seperation_1": 102, + "mp_coop_separation_1": 102, "mp_coop_tripleaxis": 103, "mp_coop_catapult_catch": 104, "mp_coop_2paints_1bridge": 105, -- cgit v1.2.3