order.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package handler
  2. import (
  3. "net/http"
  4. "job-cheng-xing/model"
  5. "job-cheng-xing/service"
  6. "github.com/gin-gonic/gin"
  7. )
  8. type OrderHandler struct {
  9. svc *service.OrderService
  10. }
  11. func NewOrderHandler(svc *service.OrderService) *OrderHandler {
  12. return &OrderHandler{svc: svc}
  13. }
  14. func (h *OrderHandler) CreateOrder(c *gin.Context) {
  15. var req model.CreateOrderRequest
  16. if err := c.ShouldBindJSON(&req); err != nil {
  17. c.JSON(http.StatusBadRequest, gin.H{
  18. "error": "validation",
  19. "message": "请求参数无效:" + err.Error(),
  20. })
  21. return
  22. }
  23. order, err := h.svc.CreateOrder(req)
  24. if err != nil {
  25. handleError(c, err)
  26. return
  27. }
  28. c.JSON(http.StatusCreated, order)
  29. }
  30. func (h *OrderHandler) AcceptOrder(c *gin.Context) {
  31. id := c.Param("id")
  32. var req model.AcceptOrderRequest
  33. if err := c.ShouldBindJSON(&req); err != nil {
  34. c.JSON(http.StatusBadRequest, gin.H{
  35. "error": "validation",
  36. "message": "请求参数无效:" + err.Error(),
  37. })
  38. return
  39. }
  40. order, err := h.svc.AcceptOrder(id, req.ProviderID)
  41. if err != nil {
  42. handleError(c, err)
  43. return
  44. }
  45. c.JSON(http.StatusOK, gin.H{
  46. "message": "接单成功",
  47. "order": order,
  48. })
  49. }
  50. func (h *OrderHandler) CancelOrder(c *gin.Context) {
  51. id := c.Param("id")
  52. order, err := h.svc.CancelOrder(id)
  53. if err != nil {
  54. handleError(c, err)
  55. return
  56. }
  57. c.JSON(http.StatusOK, gin.H{
  58. "message": "取消成功",
  59. "order": order,
  60. })
  61. }
  62. func handleError(c *gin.Context, err error) {
  63. if appErr, ok := err.(*model.AppError); ok {
  64. c.JSON(appErr.HTTPStatus, gin.H{
  65. "error": appErr.Code,
  66. "message": appErr.Message,
  67. })
  68. return
  69. }
  70. c.JSON(http.StatusInternalServerError, gin.H{
  71. "error": "internal",
  72. "message": "服务器内部错误",
  73. })
  74. }