package handler import ( "net/http" "github.com/gin-gonic/gin" "gorm.io/gorm" "github.com/wangjia/jiu/backend/internal/middleware" "github.com/wangjia/jiu/backend/internal/model" ) type NumberRuleHandler struct { db *gorm.DB } func NewNumberRuleHandler(db *gorm.DB) *NumberRuleHandler { return &NumberRuleHandler{db: db} } // List GET /api/v1/number-rules func (h *NumberRuleHandler) List(c *gin.Context) { shopID := middleware.GetShopID(c) var rules []model.NumberRule h.db.Where("shop_id = ?", shopID).Order("id").Find(&rules) c.JSON(http.StatusOK, gin.H{"data": rules}) } // Update PUT /api/v1/number-rules/:id func (h *NumberRuleHandler) Update(c *gin.Context) { shopID := middleware.GetShopID(c) id := c.Param("id") var rule model.NumberRule if err := h.db.Where("id = ? AND shop_id = ?", id, shopID).First(&rule).Error; err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) return } var req struct { Prefix string `json:"prefix"` CurrentNo *int `json:"current_no"` DateFormat string `json:"date_format"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } updates := map[string]any{} if req.Prefix != "" { updates["prefix"] = req.Prefix } if req.CurrentNo != nil { updates["current_no"] = *req.CurrentNo } if req.DateFormat != "" { updates["date_format"] = req.DateFormat } if err := h.db.Model(&rule).Updates(updates).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"data": rule}) }