package handlers import ( "fmt" "time" "github.com/gin-gonic/gin" "gorm.io/gorm" "soda-api/backend/internal/models" "soda-api/backend/internal/utils" ) type OrderHandler struct { db *gorm.DB } func NewOrderHandler(db *gorm.DB) *OrderHandler { return &OrderHandler{db: db} } func (h *OrderHandler) List(c *gin.Context) { var orders []models.Order if err := h.db.Preload("Product").Order("id desc").Find(&orders).Error; err != nil { utils.JSONError(c, 500, "獲取訂單資料錯誤") return } utils.JSONSuccess(c, orders) } func (h *OrderHandler) Create(c *gin.Context) { var payload models.Order if err := c.ShouldBindJSON(&payload); err != nil { utils.JSONError(c, 400, "訂單資料不完整") return } payload.OrderNumber = fmt.Sprintf("OD-%d", time.Now().UnixNano()) if payload.Status == "" { payload.Status = "待支付" } if err := h.db.Create(&payload).Error; err != nil { utils.JSONError(c, 500, "創建訂單失敗") return } utils.JSONSuccess(c, payload) } func (h *OrderHandler) Update(c *gin.Context) { var order models.Order if err := h.db.First(&order, c.Param("id")).Error; err != nil { utils.JSONError(c, 404, "订单不存在") return } if err := c.ShouldBindJSON(&order); err != nil { utils.JSONError(c, 400, "订单数据无效") return } if err := h.db.Save(&order).Error; err != nil { utils.JSONError(c, 500, "更新订单失败") return } utils.JSONSuccess(c, order) } func (h *OrderHandler) Delete(c *gin.Context) { if err := h.db.Delete(&models.Order{}, c.Param("id")).Error; err != nil { utils.JSONError(c, 500, "删除订单失败") return } utils.JSONSuccess(c, gin.H{"message": "删除成功"}) }