Files
goalfylearning-admin/internal/api/handlers/user_project_quota_handler.go

98 lines
2.3 KiB
Go

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)
}