test/backend/internal/handlers/order_handler.go
2025-11-21 16:03:52 +08:00

72 lines
1.7 KiB
Go

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": "删除成功"})
}