package bill import ( "context" "github.com/gofiber/fiber/v2" ) // TODO: 日期传输是使用时间戳,存储时分开年月日 type BillHandler struct { billService BillService } func NewBillHandler(billRoute fiber.Router, bs BillService) { handler := &BillHandler{ billService: bs, } billRoute.Get("/id/:billID", handler.getBillById) billRoute.Get("/:year?/:month?/:day?", handler.checkGetBillsParamsMiddleware, handler.getBills) billRoute.Post("", handler.createBill) billRoute.Put("/:billID", handler.checkIfBillExistsMiddleware, handler.updateBill) billRoute.Delete("/:billID", handler.checkIfBillExistsMiddleware, handler.deleteBill) } func (h *BillHandler) getBillById(c *fiber.Ctx) error { customContext, cancel := context.WithCancel(context.Background()) defer cancel() targetBillId, err := c.ParamsInt("billID") if err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "status": "fail", "message": "Invalid bill ID", }) } bill, err := h.billService.GetBillByID(customContext, targetBillId) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(&fiber.Map{ "status": "fail", "message": err.Error(), }) } return c.Status(fiber.StatusOK).JSON(&fiber.Map{ "status": "success", "data": bill, }) } func (h *BillHandler) getBills(c *fiber.Ctx) error { customContext, cancel := context.WithCancel(context.Background()) defer cancel() bDate := c.Locals("bDate").(BDate) bills, err := h.billService.GetBills(customContext, bDate) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(&fiber.Map{ "status": "fail", "message": err.Error(), }) } return c.Status(fiber.StatusOK).JSON(&fiber.Map{ "status": "success", "data": bills, }) } func (h *BillHandler) createBill(c *fiber.Ctx) error { customContext, cancel := context.WithCancel(context.Background()) defer cancel() bill := &Bill{} if err := c.BodyParser(bill); err != nil { return c.Status(fiber.StatusBadRequest).JSON(&fiber.Map{ "status": "fail", "message": err.Error(), }) } err := h.billService.CreateBill(customContext, bill) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(&fiber.Map{ "status": "fail", "message": err.Error(), }) } return c.Status(fiber.StatusOK).JSON(&fiber.Map{ "status": "success", "message": "Bill has been created successfully!", }) } func (h *BillHandler) updateBill(c *fiber.Ctx) error { customContext, cancel := context.WithCancel(context.Background()) defer cancel() targetBillId := c.Locals("billID").(int) bill := &Bill{} if err := c.BodyParser(bill); err != nil { return c.Status(fiber.StatusBadRequest).JSON(&fiber.Map{ "status": "fail", "message": err.Error(), }) } bill.ID = uint(targetBillId) err := h.billService.UpdateBill(customContext, bill) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(&fiber.Map{ "status": "fail", "message": err.Error(), }) } return c.Status(fiber.StatusOK).JSON(&fiber.Map{ "status": "success", "message": "Bill has been updated successfully!", }) } func (h *BillHandler) deleteBill(c *fiber.Ctx) error { customContext, cancel := context.WithCancel(context.Background()) defer cancel() targetBillId := c.Locals("billID").(int) err := h.billService.DeleteBill(customContext, targetBillId) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(&fiber.Map{ "status": "fail", "message": err.Error(), }) } return c.Status(fiber.StatusOK).JSON(&fiber.Map{ "status": "success", "message": "Bill has been deleted successfully!", }) }