package duty_schedule import ( "errors" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "github.com/go-admin-team/go-admin-core/sdk/api" jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth" "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user" ) type Handler struct{ api.Api } func (h Handler) List(c *gin.Context) { var q PageQuery h.MakeContext(c).MakeOrm().Bind(&q, binding.Form) if h.Errors != nil { h.Error(400, ErrInvalid, ErrInvalid.Error()) return } items, count, err := NewService(h.Orm).List(c.Request.Context(), q) if err != nil { h.Error(500, errors.New("读取排班失败"), "读取排班失败") return } p, s := pageValues(q.PageIndex, q.PageSize) h.PageOK(items, int(count), p, s, "查询成功") } func (h Handler) CreateGroup(c *gin.Context) { if !admin(c) { h.MakeContext(c).Error(403, errors.New("仅管理员可维护排班"), "仅管理员可维护排班") return } var input GroupInput h.bind(c, &input) if h.Errors != nil { return } item, err := NewService(h.Orm).CreateGroup(c.Request.Context(), input, user.GetUserId(c)) h.result(item, err) } func (h Handler) UpdateGroup(c *gin.Context) { if !admin(c) { h.MakeContext(c).Error(403, errors.New("仅管理员可维护排班"), "仅管理员可维护排班") return } var input GroupInput h.bind(c, &input) if h.Errors != nil { return } item, err := NewService(h.Orm).UpdateGroup(c.Request.Context(), c.Param("id"), input, user.GetUserId(c)) h.result(item, err) } func (h Handler) AddMember(c *gin.Context) { if !admin(c) { h.MakeContext(c).Error(403, errors.New("仅管理员可维护排班"), "仅管理员可维护排班") return } var input MemberInput h.bind(c, &input) if h.Errors != nil { return } item, err := NewService(h.Orm).AddMember(c.Request.Context(), c.Param("id"), input, user.GetUserId(c)) h.result(item, err) } func (h Handler) CreateSchedule(c *gin.Context) { if !admin(c) { h.MakeContext(c).Error(403, errors.New("仅管理员可维护排班"), "仅管理员可维护排班") return } var input ScheduleInput h.bind(c, &input) if h.Errors != nil { return } item, err := NewService(h.Orm).CreateSchedule(c.Request.Context(), c.Param("id"), input, user.GetUserId(c)) h.result(item, err) } func (h Handler) Publish(c *gin.Context) { if !admin(c) { h.MakeContext(c).Error(403, errors.New("仅管理员可发布排班"), "仅管理员可发布排班") return } item, err := NewService(h.Orm).Publish(c.Request.Context(), c.Param("id"), user.GetUserId(c)) h.result(item, err) } func (h Handler) CreateOverride(c *gin.Context) { if !admin(c) { h.MakeContext(c).Error(403, errors.New("仅管理员可维护替班"), "仅管理员可维护替班") return } var input OverrideInput h.bind(c, &input) if h.Errors != nil { return } item, err := NewService(h.Orm).CreateOverride(c.Request.Context(), c.Param("id"), input, user.GetUserId(c)) h.result(item, err) } func (h *Handler) bind(c *gin.Context, value any) { h.MakeContext(c).MakeOrm().Bind(value, binding.JSON) if h.Errors != nil { h.Error(400, ErrInvalid, ErrInvalid.Error()) } } func (h Handler) result(item any, err error) { switch { case err == nil: h.OK(item, "保存成功") case errors.Is(err, ErrInvalid) || errors.Is(err, ErrCoverage): h.Error(400, err, err.Error()) case errors.Is(err, ErrNotFound): h.Error(404, err, err.Error()) case errors.Is(err, ErrConflict): h.Error(409, err, err.Error()) default: h.Logger.Errorf("write Bell duty schedule failed: %v", err) h.Error(409, errors.New("排班保存失败"), "排班保存失败") } } func admin(c *gin.Context) bool { claims := jwt.ExtractClaims(c) role, _ := claims[jwt.RoleKey].(string) return role == "admin" }