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" "github.com/wangjia/jiu/backend/internal/util" ) type WarehouseHandler struct { db *gorm.DB } func NewWarehouseHandler(db *gorm.DB) *WarehouseHandler { return &WarehouseHandler{db: db} } func (h *WarehouseHandler) List(c *gin.Context) { shopID := middleware.GetShopID(c) warehouses := make([]model.Warehouse, 0) h.db.Where("shop_id = ? AND deleted_at IS NULL", shopID).Find(&warehouses) util.RespondSuccess(c, warehouses) } func (h *WarehouseHandler) Create(c *gin.Context) { shopID := middleware.GetShopID(c) var w model.Warehouse if err := c.ShouldBindJSON(&w); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } w.ShopID = shopID h.db.Create(&w) util.RespondCreated(c, w) } func (h *WarehouseHandler) Update(c *gin.Context) { shopID := middleware.GetShopID(c) var w model.Warehouse if err := h.db.Where("id = ? AND shop_id = ? AND deleted_at IS NULL", c.Param("id"), shopID). First(&w).Error; err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "not found"}) return } var req struct { Name string `json:"name"` Location string `json:"location"` IsDefault bool `json:"is_default"` } if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if err := h.db.Model(&w).Where("shop_id = ?", shopID).Updates(map[string]interface{}{ "name": req.Name, "location": req.Location, "is_default": req.IsDefault, }).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } h.db.Where("id = ? AND shop_id = ?", w.ID, shopID).First(&w) util.RespondSuccess(c, w) } func (h *WarehouseHandler) Delete(c *gin.Context) { shopID := middleware.GetShopID(c) now := timeNow() h.db.Model(&model.Warehouse{}). Where("id = ? AND shop_id = ? AND deleted_at IS NULL", c.Param("id"), shopID). Update("deleted_at", now) c.JSON(http.StatusOK, gin.H{"message": "deleted"}) }