diff --git a/internal/photos/api/upload.go b/internal/photos/api/upload.go index f074c92..fa8704d 100644 --- a/internal/photos/api/upload.go +++ b/internal/photos/api/upload.go @@ -35,25 +35,32 @@ func (s *Service) UploadCreate(c *gin.Context) { }) } -type UploadPartRequest struct { - UploadId string `form:"upload_id" binding:"required,uuid"` +type UploadUri struct { + Id string `uri:"upload_id" binding:"required,uuid"` +} + +type UploadPartQuery struct { Part uint `form:"part" binding:"required"` PartSha256 string `form:"sha256" binding:"required,sha256"` } func (s *Service) UploadPart(c *gin.Context) { - var uploadPart UploadPartRequest - if c.BindQuery(&uploadPart) != nil { + var ( + upload UploadUri + uploadPart UploadPartQuery + ) + + if c.BindUri(&upload) != nil || c.BindQuery(&uploadPart) != nil { return } - if !s.Storage.Exists(StorageTmp, uploadPart.UploadId) { + if !s.Storage.Exists(StorageTmp, upload.Id) { c.AbortWithError(http.StatusNotFound, ErrUploadNotExists) return } f, err := os.Create( - s.Storage.Join(StorageTmp, uploadPart.UploadId, fmt.Sprint(uploadPart.Part)), + s.Storage.Join(StorageTmp, upload.Id, fmt.Sprint(uploadPart.Part)), ) if err != nil { c.AbortWithError(http.StatusInternalServerError, err) @@ -72,7 +79,7 @@ func (s *Service) UploadPart(c *gin.Context) { } c.JSON(http.StatusCreated, gin.H{ - "upload_id": uploadPart.UploadId, + "upload_id": upload.Id, "part": uploadPart.Part, "size": w, "sha256": hex.EncodeToString(sha.Sum(nil)), @@ -81,9 +88,12 @@ func (s *Service) UploadPart(c *gin.Context) { } func (s *Service) UploadCancel(c *gin.Context) { - upload_id := c.Param("upload_id") + var upload UploadUri + if c.BindUri(&upload) != nil { + return + } - if err := s.Storage.Delete(StorageTmp, upload_id); err != nil { + if err := s.Storage.Delete(StorageTmp, upload.Id); err != nil { c.AbortWithError(http.StatusNotFound, ErrUploadNotExists) return } @@ -114,7 +124,7 @@ func (s *Service) UploadComplete(c *gin.Context) { func (s *Service) UploadInit() { upload := s.Gin.Group("/upload") upload.GET("/create", s.UploadCreate) - upload.POST("/part", s.UploadPart) + upload.POST("/part/:upload_id", s.UploadPart) upload.GET("/cancel/:upload_id", s.UploadCancel) upload.POST("/complete/:upload_id", s.UploadComplete) }