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

118 lines
2.9 KiB
Go

package handlers
import (
"github.com/gin-gonic/gin"
"goalfymax-admin/internal/models"
"goalfymax-admin/internal/services"
"goalfymax-admin/pkg/utils"
)
// QuotaHandler 配额处理器
type QuotaHandler struct {
quotaService services.QuotaService
response *utils.Response
}
// NewQuotaHandler 创建配额处理器
func NewQuotaHandler(quotaService services.QuotaService) *QuotaHandler {
return &QuotaHandler{
quotaService: quotaService,
response: utils.NewResponse(),
}
}
// GetQuotaHistory 获取配额历史数据
func (h *QuotaHandler) GetQuotaHistory(c *gin.Context) {
var req models.QuotaHistoryRequest
if err := c.ShouldBindJSON(&req); err != nil {
h.response.ValidateError(c, err)
return
}
// 调用服务层
response, err := h.quotaService.GetQuotaHistory(&req)
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
// 返回响应
if response.Success {
h.response.Success(c, response.Data)
} else {
h.response.BadRequest(c, response.Message)
}
}
// HealthCheck 健康检查
func (h *QuotaHandler) HealthCheck(c *gin.Context) {
err := h.quotaService.HealthCheck()
if err != nil {
h.response.InternalServerError(c, "配额服务健康检查失败")
return
}
h.response.Success(c, gin.H{"status": "ok", "service": "quota"})
}
// GetQuotaRules 获取配额规则列表(透传网关)
func (h *QuotaHandler) GetQuotaRules(c *gin.Context) {
resp, err := h.quotaService.GetQuotaRules()
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
if resp.Success {
// 透传 data
c.JSON(200, gin.H{
"code": 200,
"message": "操作成功",
"data": resp.Data,
})
return
}
h.response.BadRequest(c, resp.Message)
}
// CreateQuotaRule 创建配额规则(代理网关)
func (h *QuotaHandler) CreateQuotaRule(c *gin.Context) {
var body map[string]any
if err := c.ShouldBindJSON(&body); err != nil {
h.response.ValidateError(c, err)
return
}
resp, err := h.quotaService.CreateQuotaRule(body)
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
c.JSON(200, gin.H{"code": 200, "message": "操作成功", "data": resp.Data})
}
// UpdateQuotaRule 更新配额规则(代理网关)
func (h *QuotaHandler) UpdateQuotaRule(c *gin.Context) {
id := c.Param("id")
var body map[string]any
if err := c.ShouldBindJSON(&body); err != nil {
h.response.ValidateError(c, err)
return
}
resp, err := h.quotaService.UpdateQuotaRule(id, body)
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
c.JSON(200, gin.H{"code": 200, "message": "操作成功", "data": resp.Data})
}
// DeleteQuotaRule 删除配额规则(代理网关)
func (h *QuotaHandler) DeleteQuotaRule(c *gin.Context) {
id := c.Param("id")
resp, err := h.quotaService.DeleteQuotaRule(id)
if err != nil {
h.response.InternalServerError(c, err.Error())
return
}
c.JSON(200, gin.H{"code": 200, "message": "操作成功", "data": resp.Data})
}