72 lines
1.7 KiB
Go
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": "删除成功"})
|
|
}
|