From 00711cab5bb8f3cdd1b86d062ef067587e3fc18a Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Fri, 22 Nov 2024 13:11:50 +0300 Subject: feat/backend: local demos path for testing (#243) Co-authored-by: NeKz --- backend/.env.example | 27 +++++++------- backend/handlers/record.go | 92 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 86 insertions(+), 33 deletions(-) diff --git a/backend/.env.example b/backend/.env.example index 90ca8b4..b0a7101 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,13 +1,14 @@ -PORT= -SECRET_KEY= -API_KEY= -ENV= -DB_HOST= -DB_PORT= -DB_USER= -DB_PASS= -DB_NAME= -B2_BUCKET_NAME= -B2_KEY_ID= -B2_API_KEY= -B2_DOWNLOAD_URL= +PORT=4000 +SECRET_KEY=123456789ABCDEF +API_KEY=123456789ABCDEF +ENV=DEV +DB_HOST=localhost +DB_PORT=5432 +DB_USER=postgres +DB_PASS=postgres +DB_NAME=postgres +B2_BUCKET_NAME=lphub +B2_KEY_ID=123456789ABCDEF +B2_API_KEY=123456789ABCDEF +B2_DOWNLOAD_URL=https://lphub.s3.eu-central-001.backblazeb2.com/ +LOCAL_DEMOS_PATH=/path/to/demos/ diff --git a/backend/handlers/record.go b/backend/handlers/record.go index 91e74b9..25a6c6d 100644 --- a/backend/handlers/record.go +++ b/backend/handlers/record.go @@ -22,7 +22,6 @@ import ( type RecordRequest struct { HostDemo *multipart.FileHeader `json:"host_demo" form:"host_demo" binding:"required" swaggerignore:"true"` PartnerDemo *multipart.FileHeader `json:"partner_demo" form:"partner_demo" swaggerignore:"true"` - PartnerID string `json:"partner_id" form:"partner_id"` } type RecordResponse struct { @@ -197,6 +196,45 @@ func CreateRecordWithDemo(c *gin.Context) { return } } + if os.Getenv("ENV") == "DEV" { + if localPath := os.Getenv("LOCAL_DEMOS_PATH"); localPath != "" { + for i, header := range demoFileHeaders { + f, err := header.Open() + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer f.Close() + var objectName string + if i == 0 { + objectName = hostDemoUUID + ".dem" + } else if i == 1 { + objectName = partnerDemoUUID + ".dem" + } + demo, err := os.Create(localPath + objectName) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer demo.Close() + _, err = io.Copy(demo, f) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + } + if err = tx.Commit(); err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + c.JSON(http.StatusOK, models.Response{ + Success: true, + Message: "Successfully created record.", + Data: RecordResponse{ScoreCount: hostDemoScoreCount, ScoreTime: hostDemoScoreTime}, + }) + return + } + } // Everything is good, upload the demo files. client, err := b2.NewClient(context.Background(), os.Getenv("B2_KEY_ID"), os.Getenv("B2_API_KEY")) if err != nil { @@ -347,32 +385,46 @@ func DownloadDemoWithID(c *gin.Context) { return } - fileName := uuid + ".dem" - url := os.Getenv("B2_DOWNLOAD_URL") + fileName - output, err := os.Create(fileName) - if err != nil { - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) - return - } - defer os.Remove(fileName) - defer output.Close() - response, err := http.Get(url) - if err != nil { - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) - return + localPath := "" + if os.Getenv("ENV") == "DEV" { + localPath = os.Getenv("LOCAL_DEMOS_PATH") } - defer response.Body.Close() - _, err = io.Copy(output, response.Body) - if err != nil { - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) - return + + fileName := uuid + ".dem" + if localPath == "" { + url := os.Getenv("B2_DOWNLOAD_URL") + fileName + output, err := os.Create(fileName) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer os.Remove(fileName) + defer output.Close() + response, err := http.Get(url) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer response.Body.Close() + _, err = io.Copy(output, response.Body) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } } + // Downloaded file c.Header("Content-Description", "File Transfer") c.Header("Content-Transfer-Encoding", "binary") c.Header("Content-Disposition", "attachment; filename="+fileName) c.Header("Content-Type", "application/octet-stream") - c.File(fileName) + + if localPath == "" { + c.File(fileName) + } else { + c.File(localPath + fileName) + } + // c.FileAttachment() } -- cgit v1.2.3