package handler import ( "github.com/gin-gonic/gin" "github.com/kennethcheng/fuellog-api/internal/dto" "github.com/kennethcheng/fuellog-api/internal/model" "github.com/kennethcheng/fuellog-api/internal/service" ) // VehicleHandler 车辆路由。 type VehicleHandler struct{ svc service.VehicleService } func NewVehicleHandler(svc service.VehicleService) *VehicleHandler { return &VehicleHandler{svc: svc} } // POST /api/vehicles func (h *VehicleHandler) Create(c *gin.Context) { var in dto.VehicleCreate if err := bindJSON(c, &in); err != nil { writeError(c, err) return } v, err := h.svc.Create(c.Request.Context(), &in) if err != nil { writeError(c, err) return } sendJSON(c, v) } // GET /api/vehicles func (h *VehicleHandler) List(c *gin.Context) { vs, err := h.svc.List(c.Request.Context()) if err != nil { writeError(c, err) return } if vs == nil { vs = []model.Vehicle{} // 避免前端收到 null,统一空数组 } sendJSON(c, vs) } // GET /api/vehicles/:id func (h *VehicleHandler) Get(c *gin.Context) { id, err := parseUint64(c, "id") if err != nil { writeError(c, err) return } v, err := h.svc.Get(c.Request.Context(), id) if err != nil { writeError(c, err) return } sendJSON(c, v) } // PUT /api/vehicles/:id func (h *VehicleHandler) Update(c *gin.Context) { id, err := parseUint64(c, "id") if err != nil { writeError(c, err) return } var in dto.VehicleUpdate if err := bindJSON(c, &in); err != nil { writeError(c, err) return } v, err := h.svc.Update(c.Request.Context(), id, &in) if err != nil { writeError(c, err) return } sendJSON(c, v) } // DELETE /api/vehicles/:id func (h *VehicleHandler) Delete(c *gin.Context) { id, err := parseUint64(c, "id") if err != nil { writeError(c, err) return } if err := h.svc.Delete(c.Request.Context(), id); err != nil { writeError(c, err) return } c.Status(204) } // POST /api/vehicles/:id/default func (h *VehicleHandler) SetDefault(c *gin.Context) { id, err := parseUint64(c, "id") if err != nil { writeError(c, err) return } v, err := h.svc.SetDefault(c.Request.Context(), id) if err != nil { writeError(c, err) return } sendJSON(c, v) }