new error system (+ some quick fixes)
This commit is contained in:
parent
09d8ffa82c
commit
c99c202bc8
2 changed files with 92 additions and 36 deletions
|
@ -3,7 +3,6 @@ package routes
|
|||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
@ -27,40 +26,42 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
|||
|
||||
uid := user.ID
|
||||
if uid == "" {
|
||||
c.JSON(401, gin.H{"error": "unauthorized"})
|
||||
types.ErrorInvalidParams.Throw(c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
file, err := c.FormFile("file")
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"error": "file is required"})
|
||||
types.ErrorInvalidParams.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if file.Size <= 0 {
|
||||
c.JSON(400, gin.H{"error": "file size must be greater than zero"})
|
||||
types.ErrorInvalidParams.Throw(c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
fileReader, err := file.Open()
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"error": "couldn't open file"})
|
||||
log.Println(err)
|
||||
types.ErrorReaderOpen.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
buf, err := io.ReadAll(fileReader)
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"error": "couldn't open file"})
|
||||
log.Println(err)
|
||||
types.ErrorReaderOpen.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if !filetype.IsImage(buf) {
|
||||
types.ErrorInvalidFile.Throw(c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
fileType, err := filetype.Match(buf)
|
||||
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"error": "couldn't open file"})
|
||||
log.Println(err)
|
||||
types.ErrorReaderOpen.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -73,15 +74,14 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
|||
}
|
||||
|
||||
if err := cfg.Database.Create(&fileMeta).Error; err != nil {
|
||||
c.JSON(500, gin.H{"error": "failed to save file metadata"})
|
||||
types.ErrorDatabase.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = cfg.MinioClient.PutObject(cfg.Context, cfg.Bucket, fileMeta.ID.String(), intoReader(buf), fileMeta.Size, minio.PutObjectOptions{ContentType: fileMeta.Mime})
|
||||
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"error": "failed to upload file"})
|
||||
log.Println(err)
|
||||
types.ErrorS3.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -92,21 +92,9 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
|||
claims := c.MustGet("claims").(jwt.MapClaims)
|
||||
user := claims["user"].(auth.User)
|
||||
|
||||
uid := c.Param("uid")
|
||||
uid = strings.TrimSpace(uid)
|
||||
if uid == "" {
|
||||
c.JSON(400, gin.H{"error": "uid is required"})
|
||||
return
|
||||
}
|
||||
|
||||
if uid != user.ID {
|
||||
c.JSON(403, gin.H{"error": "you can only delete your own files"})
|
||||
return
|
||||
}
|
||||
|
||||
fileID, err := uuid.FromString(strings.TrimSpace(c.Param("id")))
|
||||
if err != nil {
|
||||
c.JSON(404, gin.H{"error": "file not found"})
|
||||
types.ErrorInvalidFile.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -115,17 +103,22 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
|||
cfg.Database.First(&file, fileID)
|
||||
|
||||
if file == nil {
|
||||
c.JSON(404, gin.H{"error": "file not found"})
|
||||
types.ErrorFileNotFound.Throw(c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
if file.Owner != user.ID {
|
||||
types.ErrorUnauthorized.Throw(c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
if err := cfg.MinioClient.RemoveObject(cfg.Context, cfg.Bucket, fileID.String(), minio.RemoveObjectOptions{}); err != nil {
|
||||
c.JSON(500, gin.H{"error": "failed to delete file"})
|
||||
types.ErrorS3.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := cfg.Database.Delete(&file).Error; err != nil {
|
||||
c.JSON(500, gin.H{"error": "failed to delete file metadata"})
|
||||
types.ErrorDatabase.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -140,23 +133,20 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
|||
|
||||
id, err := uuid.FromString(fileID)
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"error": "invalid file id"})
|
||||
log.Println(err)
|
||||
types.ErrorInvalidFile.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
cfg.Database.First(&file, id)
|
||||
|
||||
if file == nil {
|
||||
c.JSON(500, gin.H{"error": "file does not exist"})
|
||||
log.Println(err)
|
||||
types.ErrorFileNotFound.Throw(c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
object, err := cfg.MinioClient.GetObject(cfg.Context, cfg.Bucket, fileID, minio.GetObjectOptions{})
|
||||
if err != nil {
|
||||
c.JSON(500, gin.H{"error": "failed to retrieve file"})
|
||||
log.Println(err)
|
||||
types.ErrorS3.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -169,7 +159,7 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) {
|
|||
|
||||
var files []types.File
|
||||
if err := cfg.Database.Where("owner = ?", user.ID).Find(&files).Error; err != nil {
|
||||
c.JSON(500, gin.H{"error": "failed to retrieve files"})
|
||||
types.ErrorDatabase.Throw(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue