package handlers import ( "github.com/gin-gonic/gin" "goalfymax-admin/internal/models" "goalfymax-admin/internal/services" "goalfymax-admin/internal/storage" "goalfymax-admin/pkg/utils" "strconv" ) type UserProjectQuotaHandler struct { svc services.UserProjectQuotaService resp *utils.Response } func NewUserProjectQuotaHandler(s services.UserProjectQuotaService) *UserProjectQuotaHandler { return &UserProjectQuotaHandler{svc: s, resp: utils.NewResponse()} } func (h *UserProjectQuotaHandler) Create(c *gin.Context) { var req models.UserProjectQuota if err := c.ShouldBindJSON(&req); err != nil { h.resp.ValidateError(c, err) return } out, err := h.svc.Create(&req) if err != nil { h.resp.BadRequest(c, err.Error()) return } h.resp.Success(c, out) } func (h *UserProjectQuotaHandler) Update(c *gin.Context) { id64, _ := strconv.ParseUint(c.Param("id"), 10, 64) var req models.UserProjectQuota if err := c.ShouldBindJSON(&req); err != nil { h.resp.ValidateError(c, err) return } out, err := h.svc.Update(uint(id64), &req) if err != nil { h.resp.BadRequest(c, err.Error()) return } h.resp.Success(c, out) } func (h *UserProjectQuotaHandler) Delete(c *gin.Context) { id64, _ := strconv.ParseUint(c.Param("id"), 10, 64) if err := h.svc.Delete(uint(id64)); err != nil { h.resp.BadRequest(c, err.Error()) return } h.resp.Success(c, gin.H{"message": "deleted"}) } func (h *UserProjectQuotaHandler) GetByID(c *gin.Context) { id64, _ := strconv.ParseUint(c.Param("id"), 10, 64) out, err := h.svc.GetByID(uint(id64)) if err != nil { h.resp.NotFound(c, "not found") return } h.resp.Success(c, out) } func (h *UserProjectQuotaHandler) List(c *gin.Context) { var filter storage.UserProjectQuotaFilter filter.UserID = c.Query("user_id") if v := c.Query("enabled"); v != "" { if v == "true" { b := true filter.Enabled = &b } else if v == "false" { b := false filter.Enabled = &b } } if p := c.Query("page"); p != "" { if v, err := strconv.Atoi(p); err == nil { filter.Page = v } } if s := c.Query("size"); s != "" { if v, err := strconv.Atoi(s); err == nil { filter.Size = v } } items, total, err := h.svc.List(filter) if err != nil { h.resp.InternalServerError(c, err.Error()) return } h.resp.Page(c, items, total, filter.Page, filter.Size) }