package handler import ( "net/http" "job-cheng-xing/model" "job-cheng-xing/service" "github.com/gin-gonic/gin" ) type OrderHandler struct { svc *service.OrderService } func NewOrderHandler(svc *service.OrderService) *OrderHandler { return &OrderHandler{svc: svc} } func (h *OrderHandler) CreateOrder(c *gin.Context) { var req model.CreateOrderRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "validation", "message": "请求参数无效:" + err.Error(), }) return } order, err := h.svc.CreateOrder(req) if err != nil { handleError(c, err) return } c.JSON(http.StatusCreated, order) } func (h *OrderHandler) AcceptOrder(c *gin.Context) { id := c.Param("id") var req model.AcceptOrderRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, gin.H{ "error": "validation", "message": "请求参数无效:" + err.Error(), }) return } order, err := h.svc.AcceptOrder(id, req.ProviderID) if err != nil { handleError(c, err) return } c.JSON(http.StatusOK, gin.H{ "message": "接单成功", "order": order, }) } func (h *OrderHandler) CancelOrder(c *gin.Context) { id := c.Param("id") order, err := h.svc.CancelOrder(id) if err != nil { handleError(c, err) return } c.JSON(http.StatusOK, gin.H{ "message": "取消成功", "order": order, }) } func handleError(c *gin.Context, err error) { if appErr, ok := err.(*model.AppError); ok { c.JSON(appErr.HTTPStatus, gin.H{ "error": appErr.Code, "message": appErr.Message, }) return } c.JSON(http.StatusInternalServerError, gin.H{ "error": "internal", "message": "服务器内部错误", }) }