Update: update resp
This commit is contained in:
parent
838f194a51
commit
3455429b38
@ -6,9 +6,17 @@ import (
|
||||
"gosvc/httpserver"
|
||||
"gosvc/logger"
|
||||
"gosvc/validator"
|
||||
"robotfs/entity"
|
||||
"robotfs/utils"
|
||||
)
|
||||
|
||||
type ListResult struct {
|
||||
Entries []Entry `json:"entries"`
|
||||
MoreAvailable bool `json:"more_available"`
|
||||
IsEmptyFolder bool `json:"is_empty_folder"`
|
||||
LastFileName string `json:"last_file_name"`
|
||||
}
|
||||
|
||||
type Entry struct {
|
||||
Name string `json:"name"`
|
||||
IsDir bool `json:"is_dir"`
|
||||
@ -18,13 +26,6 @@ type Entry struct {
|
||||
S3Key string `json:"s3key"`
|
||||
}
|
||||
|
||||
type ListResult struct {
|
||||
Entries []Entry `json:"entries"`
|
||||
MoreAvailable bool `json:"more_available"`
|
||||
IsEmptyFolder bool `json:"is_empty_folder"`
|
||||
LastFileName string `json:"last_file_name"`
|
||||
}
|
||||
|
||||
type MkdirParams struct {
|
||||
Path string
|
||||
}
|
||||
@ -46,10 +47,17 @@ func (s *Service) HandleMkdir(
|
||||
err := s.FileSystemManager.MakeDirectory(req.Context(), utils.FullPath(newPath))
|
||||
if err != nil {
|
||||
logger.Error("mkdir %s: %v", path, err)
|
||||
return resp.InternalServerError("mkdir failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrMkDir,
|
||||
map[string]interface{}{
|
||||
"detail": "mkdir failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleListDirectory(
|
||||
@ -71,7 +79,14 @@ func (s *Service) HandleListDirectory(
|
||||
)
|
||||
if err != nil {
|
||||
logger.Error("list dir %s %s %d: %v", path, startFileName, limit, err)
|
||||
return resp.InternalServerError("list directory failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrListDir,
|
||||
map[string]interface{}{
|
||||
"detail": "list directory failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
result := ListResult{
|
||||
@ -96,7 +111,7 @@ func (s *Service) HandleListDirectory(
|
||||
result.Entries = entries
|
||||
}
|
||||
|
||||
return resp.OK(result).JSON()
|
||||
return resp.OK(entity.NewSuccess(result)).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleDeleteDirectory(
|
||||
@ -109,15 +124,29 @@ func (s *Service) HandleDeleteDirectory(
|
||||
newPath := utils.NormalizePath(path)
|
||||
|
||||
if !isDir {
|
||||
resp.BadRequest("is dir param must be true")
|
||||
out := entity.NewError[any](
|
||||
entity.CodeBadRequest,
|
||||
entity.ErrDeleteDir,
|
||||
map[string]interface{}{
|
||||
"detail": "is dir param must be true",
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
if err := s.FileSystemManager.DeleteDirectory(req.Context(), utils.FullPath(newPath), isDir, false); err != nil {
|
||||
logger.Error("del dir %s: %v", path, err)
|
||||
return resp.InternalServerError("delete directory failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrDeleteDir,
|
||||
map[string]interface{}{
|
||||
"detail": "delete directory failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleRenameDirectory(
|
||||
@ -133,10 +162,17 @@ func (s *Service) HandleRenameDirectory(
|
||||
newPath := utils.FullPath(dstPath)
|
||||
if err := s.FileSystemManager.RenameDirectory(req.Context(), oldPath, newPath, isDir); err != nil {
|
||||
logger.Error("move dir %s => %s: %v", params.SrcPath, params.DstPath, err)
|
||||
return resp.InternalServerError("move directory failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrRenameDir,
|
||||
map[string]interface{}{
|
||||
"detail": "move directory failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleCopyDirectory(
|
||||
@ -152,8 +188,15 @@ func (s *Service) HandleCopyDirectory(
|
||||
newPath := utils.FullPath(dstPath)
|
||||
if err := s.FileSystemManager.CopyDirectory(req.Context(), oldPath, newPath, isDir); err != nil {
|
||||
logger.Error("copy dir %s => %s: %v", params.SrcPath, params.DstPath, err)
|
||||
return resp.InternalServerError("copy directory failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrCopyDir,
|
||||
map[string]interface{}{
|
||||
"detail": "copy directory failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
81
api_file.go
81
api_file.go
@ -7,6 +7,7 @@ import (
|
||||
"gosvc/httpserver"
|
||||
"gosvc/logger"
|
||||
"gosvc/validator"
|
||||
"robotfs/entity"
|
||||
"robotfs/utils"
|
||||
)
|
||||
|
||||
@ -21,6 +22,14 @@ func (d *DeleteParams) Validate() error {
|
||||
).Validate()
|
||||
}
|
||||
|
||||
type CopyParams struct {
|
||||
GeneralParams
|
||||
}
|
||||
|
||||
type RenameParams struct {
|
||||
GeneralParams
|
||||
}
|
||||
|
||||
type GeneralParams struct {
|
||||
SrcPath string
|
||||
DstPath string
|
||||
@ -38,14 +47,6 @@ func (g *GeneralParams) Validate() error {
|
||||
)
|
||||
}
|
||||
|
||||
type CopyParams struct {
|
||||
GeneralParams
|
||||
}
|
||||
|
||||
type RenameParams struct {
|
||||
GeneralParams
|
||||
}
|
||||
|
||||
func (s *Service) HandleUploadFile(
|
||||
req *httpserver.Request,
|
||||
resp *httpserver.Response,
|
||||
@ -64,10 +65,17 @@ func (s *Service) HandleUploadFile(
|
||||
|
||||
if err := s.Engine.FileSystemManager.CreateFile(req.Context(), utils.FullPath(newPath), file, contentType, fileSize); err != nil {
|
||||
logger.Error("create %s: %v", path, err)
|
||||
return resp.InternalServerError("create file failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrUploadFile,
|
||||
map[string]interface{}{
|
||||
"detail": "upload file failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleInfoFile(
|
||||
@ -80,10 +88,17 @@ func (s *Service) HandleInfoFile(
|
||||
entry, err := s.FileSystemManager.FindEntry(req.Context(), utils.FullPath(newPath))
|
||||
if err != nil {
|
||||
logger.Error("info %s: %v", path, err)
|
||||
return resp.InternalServerError("info file failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrInfoFile,
|
||||
map[string]interface{}{
|
||||
"detail": "info file failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.OK(entry).JSON()
|
||||
return resp.OK(entity.NewSuccess(entry)).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleDownloadFile(
|
||||
@ -97,7 +112,14 @@ func (s *Service) HandleDownloadFile(
|
||||
downloader, entry, err := s.FileSystemManager.DownloadFile(req.Context(), utils.FullPath(newPath))
|
||||
if err != nil {
|
||||
logger.Error("download %s: %v", path, err)
|
||||
return resp.InternalServerError("download file failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrDownloadFile,
|
||||
map[string]interface{}{
|
||||
"detail": "download file failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
defer downloader.Close()
|
||||
|
||||
@ -120,10 +142,17 @@ func (s *Service) HandleDeleteFile(
|
||||
err := s.FileSystemManager.DeleteFile(req.Context(), utils.FullPath(newPath), isDir)
|
||||
if err != nil {
|
||||
logger.Error("delete file %s: %v", path, err)
|
||||
return resp.InternalServerError("delete file failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrDeleteFile,
|
||||
map[string]interface{}{
|
||||
"detail": "delete file failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleRenameFile(
|
||||
@ -138,10 +167,17 @@ func (s *Service) HandleRenameFile(
|
||||
err := s.FileSystemManager.RenameFile(req.Context(), srcPath, dstPath, isDir)
|
||||
if err != nil {
|
||||
logger.Error("move file %s => %s: %v", srcPath, dstPath, err)
|
||||
return resp.InternalServerError("move file failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrRenameFile,
|
||||
map[string]interface{}{
|
||||
"detail": "move file failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
func (s *Service) HandleCopyFile(
|
||||
@ -156,8 +192,15 @@ func (s *Service) HandleCopyFile(
|
||||
err := s.FileSystemManager.CopyFile(req.Context(), srcPath, dstPath, isDir)
|
||||
if err != nil {
|
||||
logger.Error("copy file %s => %s: %v", srcPath, dstPath, err)
|
||||
return resp.InternalServerError("copy file failed, " + err.Error())
|
||||
out := entity.NewError[any](
|
||||
entity.CodeInternalServer,
|
||||
entity.ErrCopyFile,
|
||||
map[string]interface{}{
|
||||
"detail": "copy file failed, " + err.Error(),
|
||||
},
|
||||
)
|
||||
return resp.OK(out).JSON()
|
||||
}
|
||||
|
||||
return resp.NoContent()
|
||||
return resp.OK(entity.NewSuccess("")).JSON()
|
||||
}
|
||||
|
||||
55
entity/response.go
Normal file
55
entity/response.go
Normal file
@ -0,0 +1,55 @@
|
||||
package entity
|
||||
|
||||
type Message string
|
||||
|
||||
const (
|
||||
ErrDownloadFile Message = "download file failed"
|
||||
ErrUploadFile Message = "upload file failed"
|
||||
ErrDeleteFile Message = "delete file failed"
|
||||
ErrRenameFile Message = "rename file failed"
|
||||
ErrCopyFile Message = "copy file failed"
|
||||
ErrInfoFile Message = "info file failed"
|
||||
)
|
||||
|
||||
const (
|
||||
ErrMkDir Message = "make directory failed"
|
||||
ErrListDir Message = "list directory failed"
|
||||
ErrDeleteDir Message = "delete directory failed"
|
||||
ErrRenameDir Message = "rename directory failed"
|
||||
ErrCopyDir Message = "copy directory failed"
|
||||
)
|
||||
|
||||
const (
|
||||
Success Message = "success"
|
||||
)
|
||||
|
||||
type Status int
|
||||
|
||||
const (
|
||||
CodeSuccess Status = 0 // success code
|
||||
CodeBadRequest Status = 60004 // bad request code
|
||||
CodeInternalServer Status = 60005 // internal server code
|
||||
)
|
||||
|
||||
type Response[T any] struct {
|
||||
Status Status `json:"status"` // Status code
|
||||
Message Message `json:"message"` // Response message for i18n
|
||||
Data T `json:"data,omitempty"` // Response data
|
||||
Extra map[string]interface{} `json:"extra,omitempty"` // Extra information for error details
|
||||
}
|
||||
|
||||
func NewSuccess[T any](data T) *Response[T] {
|
||||
return &Response[T]{
|
||||
Status: CodeSuccess,
|
||||
Message: Success,
|
||||
Data: data,
|
||||
}
|
||||
}
|
||||
|
||||
func NewError[T any](status Status, message Message, extra map[string]interface{}) *Response[T] {
|
||||
return &Response[T]{
|
||||
Status: status,
|
||||
Message: message,
|
||||
Extra: extra,
|
||||
}
|
||||
}
|
||||
@ -10,7 +10,7 @@ import (
|
||||
|
||||
var (
|
||||
ErrUnsupportedListDirectoryPrefixed = errors.New("unsupported directory prefix listing")
|
||||
ErrKvNotImplemented = errors.New("kv not implemented yet")
|
||||
ErrKvNotImplemented = errors.New("kv: not implemented yet")
|
||||
ErrKvNotFound = errors.New("kv: not found")
|
||||
)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user