diff --git a/internal/app/api/api.go b/internal/app/api/api.go index 5e152b6..e832d3a 100644 --- a/internal/app/api/api.go +++ b/internal/app/api/api.go @@ -1,7 +1,6 @@ package api import ( - "net/http" "reflect" "github.com/lzh-1625/go_process_manager/internal/app/constants" @@ -10,17 +9,6 @@ import ( "github.com/gin-gonic/gin" ) -func rOk(ctx *gin.Context, message string, data any) { - jsonData := map[string]any{ - "code": 0, - "msg": message, - } - if data != nil { - jsonData["data"] = data - } - ctx.JSON(http.StatusOK, jsonData) -} - func getRole(ctx *gin.Context) constants.Role { if v, ok := ctx.Get(constants.CTXFLG_ROLE); ok { return v.(constants.Role) @@ -39,3 +27,40 @@ func isAdmin(ctx *gin.Context) bool { func hasOprPermission(ctx *gin.Context, uuid int, op constants.OprPermission) bool { return isAdmin(ctx) || reflect.ValueOf(repository.PermissionRepository.GetPermission(getUserName(ctx), uuid)).FieldByName(string(op)).Bool() } + +type Response struct { + StatusCode int + Code int + Data any + Msg string +} + +func NewResponse() *Response { + return &Response{StatusCode: 200} +} + +func (r *Response) SetStatusCode(code int) *Response { + r.StatusCode = code + return r +} + +func (r *Response) SetDate(data any) *Response { + r.Data = data + return r +} + +func (r *Response) SetCode(code int) *Response { + r.Code = code + return r +} + +func (r *Response) SetMessage(msg any) *Response { + if str, ok := msg.(string); ok { + r.Msg = str + } else { + if err, ok := msg.(error); ok { + r.Msg = err.Error() + } + } + return r +} diff --git a/internal/app/api/config.go b/internal/app/api/config.go index c438eec..b18eb0c 100644 --- a/internal/app/api/config.go +++ b/internal/app/api/config.go @@ -2,6 +2,7 @@ package api import ( "github.com/lzh-1625/go_process_manager/internal/app/logic" + "github.com/lzh-1625/go_process_manager/internal/app/model" "github.com/gin-gonic/gin" ) @@ -10,10 +11,8 @@ type configApi struct{} var ConfigApi = new(configApi) -func (c *configApi) GetSystemConfiguration(ctx *gin.Context, _ any) error { - result := logic.ConfigLogic.GetSystemConfiguration() - rOk(ctx, "Operation successful!", result) - return nil +func (c *configApi) GetSystemConfiguration(ctx *gin.Context, _ any) []model.SystemConfigurationVo { + return logic.ConfigLogic.GetSystemConfiguration() } func (c *configApi) SetSystemConfiguration(ctx *gin.Context, _ any) (err error) { diff --git a/internal/app/api/file.go b/internal/app/api/file.go index 546ac8a..4a616bd 100644 --- a/internal/app/api/file.go +++ b/internal/app/api/file.go @@ -11,27 +11,25 @@ type file struct{} var FileApi = new(file) -func (f *file) FilePathHandler(ctx *gin.Context, req model.FilePathHandlerReq) (err error) { - rOk(ctx, "Operation successful!", logic.FileLogic.GetFileAndDirByPath(req.Path)) - return +func (f *file) FilePathHandler(ctx *gin.Context, req model.FilePathHandlerReq) []model.FileStruct { + return logic.FileLogic.GetFileAndDirByPath(req.Path) } func (f *file) FileWriteHandler(ctx *gin.Context, _ any) (err error) { path := ctx.PostForm("filePath") fi, err := ctx.FormFile("data") if err != nil { - return + return err } fiReader, _ := fi.Open() err = logic.FileLogic.UpdateFileData(path, fiReader, fi.Size) return } -func (f *file) FileReadHandler(ctx *gin.Context, req model.FileReadHandlerReq) (err error) { +func (f *file) FileReadHandler(ctx *gin.Context, req model.FileReadHandlerReq) any { bytes, err := logic.FileLogic.ReadFileFromPath(req.FilePath) if err != nil { - return + return err } - rOk(ctx, "Operation successful!", string(bytes)) - return + return string(bytes) } diff --git a/internal/app/api/log.go b/internal/app/api/log.go index 1d8e6f5..9c3f8c7 100644 --- a/internal/app/api/log.go +++ b/internal/app/api/log.go @@ -16,9 +16,9 @@ type logApi struct{} var LogApi = new(logApi) -func (a *logApi) GetLog(ctx *gin.Context, req model.GetLogReq) (err error) { +func (a *logApi) GetLog(ctx *gin.Context, req model.GetLogReq) any { if isAdmin(ctx) { - rOk(ctx, "Query successful!", logic.LogLogicImpl.Search(req, req.FilterName...)) + return logic.LogLogicImpl.Search(req, req.FilterName...) } else { processNameList := repository.PermissionRepository.GetProcessNameByPermission(getUserName(ctx), constants.OPERATION_LOG) filterName := slices.DeleteFunc(req.FilterName, func(s string) bool { @@ -30,12 +30,10 @@ func (a *logApi) GetLog(ctx *gin.Context, req model.GetLogReq) (err error) { if len(filterName) == 0 { return errors.New("no information found") } - rOk(ctx, "Query successful!", logic.LogLogicImpl.Search(req, filterName...)) + return logic.LogLogicImpl.Search(req, filterName...) } - return } -func (a *logApi) GetRunningLog(ctx *gin.Context, _ any) error { - rOk(ctx, "Query successful!", logic.Loghandler.GetRunning()) - return nil +func (a *logApi) GetRunningLog(ctx *gin.Context, _ any) int { + return logic.Loghandler.GetRunning() } diff --git a/internal/app/api/permission.go b/internal/app/api/permission.go index 49e1154..8ceb315 100644 --- a/internal/app/api/permission.go +++ b/internal/app/api/permission.go @@ -15,8 +15,6 @@ func (p *permissionApi) EditPermssion(ctx *gin.Context, req model.Permission) (e return repository.PermissionRepository.EditPermssion(req) } -func (p *permissionApi) GetPermissionList(ctx *gin.Context, req model.GetPermissionListReq) (err error) { - result := repository.PermissionRepository.GetPermssionList(req.Account) - rOk(ctx, "Query successful!", result) - return +func (p *permissionApi) GetPermissionList(ctx *gin.Context, req model.GetPermissionListReq) any { + return repository.PermissionRepository.GetPermssionList(req.Account) } diff --git a/internal/app/api/proc.go b/internal/app/api/proc.go index 1914c4e..0caa3af 100644 --- a/internal/app/api/proc.go +++ b/internal/app/api/proc.go @@ -17,7 +17,7 @@ type procApi struct{} var ProcApi = new(procApi) -func (p *procApi) CreateNewProcess(ctx *gin.Context, req model.Process) (err error) { +func (p *procApi) CreateNewProcess(ctx *gin.Context, req model.Process) any { index, err := repository.ProcessRepository.AddProcessConfig(req) if err != nil { return err @@ -28,10 +28,9 @@ func (p *procApi) CreateNewProcess(ctx *gin.Context, req model.Process) (err err return err } logic.ProcessCtlLogic.AddProcess(req.Uuid, proc) - rOk(ctx, "Operation successful!", gin.H{ + return gin.H{ "id": req.Uuid, - }) - return + } } func (p *procApi) DeleteNewProcess(ctx *gin.Context, req model.ProcessUuidReq) (err error) { @@ -84,13 +83,12 @@ func (p *procApi) KillAllProcess(ctx *gin.Context, _ any) (err error) { return } -func (p *procApi) GetProcessList(ctx *gin.Context, _ any) (err error) { +func (p *procApi) GetProcessList(ctx *gin.Context, _ any) any { if isAdmin(ctx) { - rOk(ctx, "Query successful!", logic.ProcessCtlLogic.GetProcessList()) + return logic.ProcessCtlLogic.GetProcessList() } else { - rOk(ctx, "Query successful!", logic.ProcessCtlLogic.GetProcessListByUser(getUserName(ctx))) + return logic.ProcessCtlLogic.GetProcessListByUser(getUserName(ctx)) } - return } func (p *procApi) UpdateProcessConfig(ctx *gin.Context, req model.Process) (err error) { @@ -99,13 +97,12 @@ func (p *procApi) UpdateProcessConfig(ctx *gin.Context, req model.Process) (err return } -func (p *procApi) GetProcessConfig(ctx *gin.Context, req model.ProcessUuidReq) (err error) { +func (p *procApi) GetProcessConfig(ctx *gin.Context, req model.ProcessUuidReq) any { data, err := repository.ProcessRepository.GetProcessConfigById(req.Uuid) if err != nil { return err } - rOk(ctx, "success", data) - return + return data } func (p *procApi) ProcessControl(ctx *gin.Context, req model.ProcessUuidReq) (err error) { @@ -118,9 +115,9 @@ func (p *procApi) ProcessControl(ctx *gin.Context, req model.ProcessUuidReq) (er return } -func (p *procApi) ProcessCreateShare(ctx *gin.Context, req model.ProcessShare) (err error) { +func (p *procApi) ProcessCreateShare(ctx *gin.Context, req model.ProcessShare) any { token := utils.UnwarpIgnore(uuid.NewRandom()).String() - if err = repository.WsShare.AddShareData(model.WsShare{ + if err := repository.WsShare.AddShareData(model.WsShare{ ExpireTime: time.Now().Add(time.Minute * time.Duration(req.Minutes)), Write: req.Write, Token: token, @@ -129,8 +126,7 @@ func (p *procApi) ProcessCreateShare(ctx *gin.Context, req model.ProcessShare) ( }); err != nil { return err } - rOk(ctx, "Operation successful!", gin.H{ + return gin.H{ "token": token, - }) - return + } } diff --git a/internal/app/api/push.go b/internal/app/api/push.go index 4acb58e..94910f3 100644 --- a/internal/app/api/push.go +++ b/internal/app/api/push.go @@ -11,27 +11,22 @@ type pushApi struct{} var PushApi = new(pushApi) -func (p *pushApi) GetPushList(ctx *gin.Context, __ any) (err error) { - rOk(ctx, "Query successful!", repository.PushRepository.GetPushList()) - return +func (p *pushApi) GetPushList(ctx *gin.Context, __ any) any { + return repository.PushRepository.GetPushList() } -func (p *pushApi) GetPushById(ctx *gin.Context, req model.PushIdReq) (err error) { - rOk(ctx, "Query successful!", repository.PushRepository.GetPushConfigById(req.Id)) - return +func (p *pushApi) GetPushById(ctx *gin.Context, req model.PushIdReq) any { + return repository.PushRepository.GetPushConfigById(req.Id) } func (p *pushApi) AddPushConfig(ctx *gin.Context, req model.Push) (err error) { - err = repository.PushRepository.AddPushConfig(req) - return + return repository.PushRepository.AddPushConfig(req) } func (p *pushApi) UpdatePushConfig(ctx *gin.Context, req model.Push) (err error) { - err = repository.PushRepository.UpdatePushConfig(req) - return + return repository.PushRepository.UpdatePushConfig(req) } func (p *pushApi) DeletePushConfig(ctx *gin.Context, req model.PushIdReq) (err error) { - err = repository.PushRepository.DeletePushConfig(req.Id) - return + return repository.PushRepository.DeletePushConfig(req.Id) } diff --git a/internal/app/api/task.go b/internal/app/api/task.go index 2a3af92..23dc52f 100644 --- a/internal/app/api/task.go +++ b/internal/app/api/task.go @@ -16,19 +16,16 @@ func (t *taskApi) CreateTask(ctx *gin.Context, req model.Task) (err error) { return logic.TaskLogic.CreateTask(req) } -func (t *taskApi) GetTaskById(ctx *gin.Context, req model.TaskIdReq) (err error) { +func (t *taskApi) GetTaskById(ctx *gin.Context, req model.TaskIdReq) any { result, err := repository.TaskRepository.GetTaskById(req.Id) if err != nil { return err } - rOk(ctx, "Operation successful!", result) - return + return result } -func (t *taskApi) GetTaskList(ctx *gin.Context, _ any) (err error) { - result := logic.TaskLogic.GetAllTaskJob() - rOk(ctx, "Operation successful!", result) - return +func (t *taskApi) GetTaskList(ctx *gin.Context, _ any) any { + return logic.TaskLogic.GetAllTaskJob() } func (t *taskApi) DeleteTaskById(ctx *gin.Context, req model.TaskIdReq) (err error) { diff --git a/internal/app/api/user.go b/internal/app/api/user.go index 077c08b..e49030b 100644 --- a/internal/app/api/user.go +++ b/internal/app/api/user.go @@ -18,20 +18,19 @@ var UserApi = new(userApi) const DEFAULT_ROOT_PASSWORD = "root" -func (u *userApi) LoginHandler(ctx *gin.Context, req model.LoginHandlerReq) (err error) { +func (u *userApi) LoginHandler(ctx *gin.Context, req model.LoginHandlerReq) any { if !u.checkLoginInfo(req.Account, req.Password) { return errors.New("incorrect username or password") } token, err := utils.GenToken(req.Account) if err != nil { - return + return err } - rOk(ctx, "Operation successful!", gin.H{ + return gin.H{ "token": token, "username": req.Account, "role": repository.UserRepository.GetUserByName(req.Account).Role, - }) - return + } } func (u *userApi) CreateUser(ctx *gin.Context, req model.User) (err error) { @@ -74,9 +73,8 @@ func (u *userApi) DeleteUser(ctx *gin.Context, req model.User) (err error) { return } -func (u *userApi) GetUserList(ctx *gin.Context, _ any) error { - rOk(ctx, "Query successful!", repository.UserRepository.GetUserList()) - return nil +func (u *userApi) GetUserList(ctx *gin.Context, _ any) any { + return repository.UserRepository.GetUserList() } func (u *userApi) checkLoginInfo(account, password string) bool { diff --git a/internal/app/api/ws.go b/internal/app/api/ws.go index 59c34ae..d24346d 100644 --- a/internal/app/api/ws.go +++ b/internal/app/api/ws.go @@ -197,13 +197,10 @@ func (w *wsApi) startWsConnect(wci *WsConnetInstance, cancel context.CancelFunc, } -func GetWsShareList(ctx *gin.Context) { - rOk(ctx, "Operation successful!", logic.WsSahreLogic.GetWsShareList()) +func GetWsShareList(ctx *gin.Context, _ any) any { + return logic.WsSahreLogic.GetWsShareList() } -func DeleteWsShareById(ctx *gin.Context) { - if err := logic.WsSahreLogic.DeleteById(ctx.GetInt("id")); err != nil { - return - } - rOk(ctx, "Operation successful!", nil) +func DeleteWsShareById(ctx *gin.Context, _ any) any { + return logic.WsSahreLogic.DeleteById(ctx.GetInt("id")) } diff --git a/internal/app/route/route.go b/internal/app/route/route.go index 561a1e4..ad958f0 100644 --- a/internal/app/route/route.go +++ b/internal/app/route/route.go @@ -150,7 +150,7 @@ const ( Query ) -func bind[T any](fn func(*gin.Context, T) error, bindOption int) func(*gin.Context) { +func bind[T any, R any](fn func(*gin.Context, T) R, bindOption int) func(*gin.Context) { return func(ctx *gin.Context) { var req T if bindOption&Body != 0 { @@ -171,15 +171,31 @@ func bind[T any](fn func(*gin.Context, T) error, bindOption int) func(*gin.Conte return } } - err := fn(ctx, req) - if err != nil { - rErr(ctx, err) + result := fn(ctx, req) + switch v := any(result).(type) { + case error: + if v != nil { + rErr(ctx, v) + return + } else { + ctx.JSON(200, gin.H{ + "code": 0, + "message": "success", + }) + return + } + case api.Response: + ctx.JSON(v.StatusCode, gin.H{ + "data": v.Data, + "msg": v.Msg, + "code": v.Code, + }) return - } - if !ctx.Writer.Written() { + default: ctx.JSON(200, gin.H{ "code": 0, "message": "success", + "data": v, }) } }