Update: update resp
This commit is contained in:
parent
838f194a51
commit
3455429b38
@ -6,9 +6,17 @@ import (
|
|||||||
"gosvc/httpserver"
|
"gosvc/httpserver"
|
||||||
"gosvc/logger"
|
"gosvc/logger"
|
||||||
"gosvc/validator"
|
"gosvc/validator"
|
||||||
|
"robotfs/entity"
|
||||||
"robotfs/utils"
|
"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 {
|
type Entry struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
IsDir bool `json:"is_dir"`
|
IsDir bool `json:"is_dir"`
|
||||||
@ -18,13 +26,6 @@ type Entry struct {
|
|||||||
S3Key string `json:"s3key"`
|
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 {
|
type MkdirParams struct {
|
||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
@ -46,10 +47,17 @@ func (s *Service) HandleMkdir(
|
|||||||
err := s.FileSystemManager.MakeDirectory(req.Context(), utils.FullPath(newPath))
|
err := s.FileSystemManager.MakeDirectory(req.Context(), utils.FullPath(newPath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("mkdir %s: %v", path, err)
|
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(
|
func (s *Service) HandleListDirectory(
|
||||||
@ -71,7 +79,14 @@ func (s *Service) HandleListDirectory(
|
|||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("list dir %s %s %d: %v", path, startFileName, limit, err)
|
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{
|
result := ListResult{
|
||||||
@ -96,7 +111,7 @@ func (s *Service) HandleListDirectory(
|
|||||||
result.Entries = entries
|
result.Entries = entries
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp.OK(result).JSON()
|
return resp.OK(entity.NewSuccess(result)).JSON()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Service) HandleDeleteDirectory(
|
func (s *Service) HandleDeleteDirectory(
|
||||||
@ -109,15 +124,29 @@ func (s *Service) HandleDeleteDirectory(
|
|||||||
newPath := utils.NormalizePath(path)
|
newPath := utils.NormalizePath(path)
|
||||||
|
|
||||||
if !isDir {
|
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 {
|
if err := s.FileSystemManager.DeleteDirectory(req.Context(), utils.FullPath(newPath), isDir, false); err != nil {
|
||||||
logger.Error("del dir %s: %v", path, err)
|
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(
|
func (s *Service) HandleRenameDirectory(
|
||||||
@ -133,10 +162,17 @@ func (s *Service) HandleRenameDirectory(
|
|||||||
newPath := utils.FullPath(dstPath)
|
newPath := utils.FullPath(dstPath)
|
||||||
if err := s.FileSystemManager.RenameDirectory(req.Context(), oldPath, newPath, isDir); err != nil {
|
if err := s.FileSystemManager.RenameDirectory(req.Context(), oldPath, newPath, isDir); err != nil {
|
||||||
logger.Error("move dir %s => %s: %v", params.SrcPath, params.DstPath, err)
|
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(
|
func (s *Service) HandleCopyDirectory(
|
||||||
@ -152,8 +188,15 @@ func (s *Service) HandleCopyDirectory(
|
|||||||
newPath := utils.FullPath(dstPath)
|
newPath := utils.FullPath(dstPath)
|
||||||
if err := s.FileSystemManager.CopyDirectory(req.Context(), oldPath, newPath, isDir); err != nil {
|
if err := s.FileSystemManager.CopyDirectory(req.Context(), oldPath, newPath, isDir); err != nil {
|
||||||
logger.Error("copy dir %s => %s: %v", params.SrcPath, params.DstPath, err)
|
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/httpserver"
|
||||||
"gosvc/logger"
|
"gosvc/logger"
|
||||||
"gosvc/validator"
|
"gosvc/validator"
|
||||||
|
"robotfs/entity"
|
||||||
"robotfs/utils"
|
"robotfs/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -21,6 +22,14 @@ func (d *DeleteParams) Validate() error {
|
|||||||
).Validate()
|
).Validate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CopyParams struct {
|
||||||
|
GeneralParams
|
||||||
|
}
|
||||||
|
|
||||||
|
type RenameParams struct {
|
||||||
|
GeneralParams
|
||||||
|
}
|
||||||
|
|
||||||
type GeneralParams struct {
|
type GeneralParams struct {
|
||||||
SrcPath string
|
SrcPath string
|
||||||
DstPath string
|
DstPath string
|
||||||
@ -38,14 +47,6 @@ func (g *GeneralParams) Validate() error {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
type CopyParams struct {
|
|
||||||
GeneralParams
|
|
||||||
}
|
|
||||||
|
|
||||||
type RenameParams struct {
|
|
||||||
GeneralParams
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Service) HandleUploadFile(
|
func (s *Service) HandleUploadFile(
|
||||||
req *httpserver.Request,
|
req *httpserver.Request,
|
||||||
resp *httpserver.Response,
|
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 {
|
if err := s.Engine.FileSystemManager.CreateFile(req.Context(), utils.FullPath(newPath), file, contentType, fileSize); err != nil {
|
||||||
logger.Error("create %s: %v", path, err)
|
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(
|
func (s *Service) HandleInfoFile(
|
||||||
@ -80,10 +88,17 @@ func (s *Service) HandleInfoFile(
|
|||||||
entry, err := s.FileSystemManager.FindEntry(req.Context(), utils.FullPath(newPath))
|
entry, err := s.FileSystemManager.FindEntry(req.Context(), utils.FullPath(newPath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("info %s: %v", path, err)
|
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(
|
func (s *Service) HandleDownloadFile(
|
||||||
@ -97,7 +112,14 @@ func (s *Service) HandleDownloadFile(
|
|||||||
downloader, entry, err := s.FileSystemManager.DownloadFile(req.Context(), utils.FullPath(newPath))
|
downloader, entry, err := s.FileSystemManager.DownloadFile(req.Context(), utils.FullPath(newPath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("download %s: %v", path, err)
|
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()
|
defer downloader.Close()
|
||||||
|
|
||||||
@ -120,10 +142,17 @@ func (s *Service) HandleDeleteFile(
|
|||||||
err := s.FileSystemManager.DeleteFile(req.Context(), utils.FullPath(newPath), isDir)
|
err := s.FileSystemManager.DeleteFile(req.Context(), utils.FullPath(newPath), isDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("delete file %s: %v", path, err)
|
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(
|
func (s *Service) HandleRenameFile(
|
||||||
@ -138,10 +167,17 @@ func (s *Service) HandleRenameFile(
|
|||||||
err := s.FileSystemManager.RenameFile(req.Context(), srcPath, dstPath, isDir)
|
err := s.FileSystemManager.RenameFile(req.Context(), srcPath, dstPath, isDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("move file %s => %s: %v", srcPath, dstPath, err)
|
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(
|
func (s *Service) HandleCopyFile(
|
||||||
@ -156,8 +192,15 @@ func (s *Service) HandleCopyFile(
|
|||||||
err := s.FileSystemManager.CopyFile(req.Context(), srcPath, dstPath, isDir)
|
err := s.FileSystemManager.CopyFile(req.Context(), srcPath, dstPath, isDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("copy file %s => %s: %v", srcPath, dstPath, err)
|
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 (
|
var (
|
||||||
ErrUnsupportedListDirectoryPrefixed = errors.New("unsupported directory prefix listing")
|
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")
|
ErrKvNotFound = errors.New("kv: not found")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user