package system import ( "errors" "net/http" "management/internal/erpserver/model/system/request" v1 "management/internal/erpserver/service/v1" "management/internal/pkg/gin/gu" "management/internal/pkg/sqldb" "github.com/drhin/logger" "github.com/gin-gonic/gin" ) type UserApp struct { log *logger.Logger userService v1.UserService roleService v1.RoleService departmentService v1.DepartmentService } func NewUserApp( log *logger.Logger, userService v1.UserService, roleService v1.RoleService, departmentService v1.DepartmentService, ) *UserApp { return &UserApp{ log: log, userService: userService, roleService: roleService, departmentService: departmentService, } } func (a *UserApp) Create(c *gin.Context) { var req request.CreateAndUpdateUser if err := c.ShouldBindJSON(&req); err != nil { gu.ValidatorErrors(c, err) return } if err := a.userService.Create(c, &req); err != nil { if errors.Is(err, sqldb.ErrDBDuplicatedEntry) { gu.FailedWithCode(c, http.StatusConflict, "用户已存在") return } gu.Failed(c, err.Error()) return } gu.Ok(c, "添加成功") } func (a *UserApp) Update(c *gin.Context) { var id request.GetUserID if err := c.ShouldBindUri(&id); err != nil { gu.ValidatorErrors(c, err) return } var req request.CreateAndUpdateUser if err := c.ShouldBindJSON(&req); err != nil { gu.ValidatorErrors(c, err) return } req.ID = &id.ID if err := a.userService.Update(c, &req); err != nil { gu.Failed(c, err.Error()) return } gu.Ok(c, "更新成功") } func (a *UserApp) Get(c *gin.Context) { var id request.GetUserID if err := c.ShouldBindUri(&id); err != nil { gu.ValidatorErrors(c, err) return } user, err := a.userService.Get(c, id.ID) if err != nil { if errors.Is(err, sqldb.ErrDBNotFound) { gu.FailedWithCode(c, http.StatusNotFound, "用户不存在") return } gu.Failed(c, err.Error()) return } gu.Ok(c, user) } func (a *UserApp) List(c *gin.Context) { var req request.ListUser if err := c.ShouldBindQuery(&req); err != nil { gu.ValidatorErrors(c, err) return } res, count, err := a.userService.List(c, req) if err != nil { gu.Failed(c, err.Error()) return } gu.Ok(c, gu.NewPageData(count, req.PageID, req.PageSize, res)) }