tiered_routing_handler.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package admin
  2. import (
  3. "errors"
  4. "github.com/Wei-Shaw/sub2api/internal/pkg/response"
  5. "github.com/Wei-Shaw/sub2api/internal/service"
  6. "github.com/gin-gonic/gin"
  7. )
  8. // TieredRoutingHandler 管理分级路由规则:VIP 用户优先 premium 池账号。
  9. type TieredRoutingHandler struct {
  10. service *service.TieredRoutingService
  11. }
  12. func NewTieredRoutingHandler(svc *service.TieredRoutingService) *TieredRoutingHandler {
  13. return &TieredRoutingHandler{service: svc}
  14. }
  15. func (h *TieredRoutingHandler) requireService(c *gin.Context) bool {
  16. if h == nil || h.service == nil {
  17. response.ErrorFrom(c, errors.New("tiered routing service unavailable"))
  18. return false
  19. }
  20. return true
  21. }
  22. // GetSettings 读取分级路由规则。
  23. // GET /api/v1/admin/tiered-routing/settings
  24. func (h *TieredRoutingHandler) GetSettings(c *gin.Context) {
  25. if !h.requireService(c) {
  26. return
  27. }
  28. response.Success(c, h.service.GetSettings(c.Request.Context()))
  29. }
  30. // UpdateSettings 更新分级路由规则。
  31. // PUT /api/v1/admin/tiered-routing/settings
  32. func (h *TieredRoutingHandler) UpdateSettings(c *gin.Context) {
  33. if !h.requireService(c) {
  34. return
  35. }
  36. var req service.TieredRoutingSettings
  37. if err := c.ShouldBindJSON(&req); err != nil {
  38. response.BadRequest(c, "Invalid request: "+err.Error())
  39. return
  40. }
  41. out, err := h.service.UpdateSettings(c.Request.Context(), req)
  42. if err != nil {
  43. response.ErrorFrom(c, err)
  44. return
  45. }
  46. response.Success(c, out)
  47. }