diff --git a/biz/internal/repo/file.go b/biz/internal/repo/file.go index 055d1cf..3e3c71d 100644 --- a/biz/internal/repo/file.go +++ b/biz/internal/repo/file.go @@ -12,6 +12,15 @@ func (Repo *Repository) FindFileByFileKey(fileKey string) (*domain.FileEntity, e } return &file, nil } + +func (Repo *Repository) FindFileByID(fileID uint) (*domain.FileEntity, error) { + var file domain.FileEntity + err := Repo.DB.Where("id = ?", fileID).Limit(1).Find(&file).Error + if err != nil { + return nil, err + } + return &file, nil +} func (Repo *Repository) RemoveFile(fileID uint) error { err := Repo.DB.Delete(&domain.FileEntity{}, fileID).Error if err != nil { diff --git a/biz/internal/repo/interface.go b/biz/internal/repo/interface.go index 24ae17e..a8d4418 100644 --- a/biz/internal/repo/interface.go +++ b/biz/internal/repo/interface.go @@ -9,6 +9,7 @@ type IRepository interface { FindUser(username string) (*domain.UserEntity, error) SaveUser(user *domain.UserEntity) error + FindFileByID(fileID uint) (*domain.FileEntity, error) FindFileByFileKey(fileKey string) (*domain.FileEntity, error) FindFileBySaveName(saveName string) (*domain.FileEntity, error) SaveFile(user *domain.FileEntity) error diff --git a/biz/internal/service/file/file.go b/biz/internal/service/file/file.go index 67422d4..86d483d 100644 --- a/biz/internal/service/file/file.go +++ b/biz/internal/service/file/file.go @@ -174,36 +174,56 @@ func (s *FileService) DownloadFile(ctx context.Context, c *app.RequestContext) { } func (s *FileService) DeleteFile(ctx context.Context, c *app.RequestContext) { - code, msg, data := s.getFileInfo(c.DefaultQuery("file-key", "")) + fileID := c.Param("id") + fileIDInt, err := strconv.ParseUint(fileID, 10, 64) + if err != nil { + c.JSON(consts.StatusOK, utils.H{ + "code": 2001, + "msg": "参数错误", + }) + return + } - if code == 0 { - if data.UserID != s.getUserId(ctx) { - c.JSON(consts.StatusOK, utils.H{ - "code": 4003, - "msg": "无权执行操作", - }) - return - } + file, err := s.Repo.FindFileByID(uint(fileIDInt)) + if err != nil { + c.JSON(consts.StatusOK, utils.H{ + "code": 5001, + "msg": err.Error(), + }) + } - err := s.Repo.RemoveFile(data.ID) - if err != nil { - c.JSON(consts.StatusOK, utils.H{ - "code": 5001, - "msg": "删除失败:" + err.Error(), - }) - return - } + username := ctx.Value("username") + user, err := s.Repo.FindUser(username.(string)) + if err != nil { c.JSON(consts.StatusOK, utils.H{ - "code": 0, - "msg": "删除成功", + "code": 5001, + "msg": err.Error(), }) return - } else { + } + + if uint(file.UserID) != user.ID && user.Role != "admin" { c.JSON(consts.StatusOK, utils.H{ - "code": code, - "msg": msg, + "code": 4003, + "msg": "无权执行操作", }) + return } + + err = s.Repo.RemoveFile(file.ID) + if err != nil { + c.JSON(consts.StatusOK, utils.H{ + "code": 5001, + "msg": "删除失败:" + err.Error(), + }) + return + } + c.JSON(consts.StatusOK, utils.H{ + "code": 0, + "msg": "删除成功", + }) + return + } func (s *FileService) getUserId(ctx context.Context) (uid int) { diff --git a/build.bat b/build.bat index 6860ad9..c82fbda 100644 --- a/build.bat +++ b/build.bat @@ -1,4 +1,4 @@ set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 -go build -o main \ No newline at end of file +go build -o personal-page-be \ No newline at end of file