package controller import ( "electricity_bill_calc/logger" "electricity_bill_calc/repository" "electricity_bill_calc/response" "electricity_bill_calc/security" "electricity_bill_calc/tools" "electricity_bill_calc/types" "electricity_bill_calc/vo" "fmt" "github.com/gofiber/fiber/v2" "github.com/jinzhu/copier" "go.uber.org/zap" ) var topUpLog = logger.Named("Controller", "TopUp") func InitializeTopUpHandlers(router *fiber.App) { router.Get("/topup/:pid", security.EnterpriseAuthorize, listTopUps) router.Post("/topup/:pid", security.EnterpriseAuthorize, createTopUp) router.Get("/topup/:pid/:code", security.EnterpriseAuthorize, getTopUp) router.Delete("/topup/:pid/:code", security.EnterpriseAuthorize, deleteTopUp) } // 查询符合条件的商户充值记录 func listTopUps(c *fiber.Ctx) error { result := response.NewResult(c) park := tools.EmptyToNil(c.Params("pid")) if park == nil { topUpLog.Error("查询符合条件的商户充值记录,未指定要访问的园区") return result.BadRequest("未指定要访问的园区") } if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { return err } keyword := tools.EmptyToNil(c.Query("keyword")) startDate, err := types.ParseDatep(c.Query("start_date")) if err != nil { topUpLog.Error("查询符合条件的商户充值记录,查询起始日期格式错误", zap.Error(err)) return result.BadRequest("查询起始日期格式错误") } endDate, err := types.ParseDatep(c.Query("end_date")) if err != nil { topUpLog.Error("查询符合条件的商户充值记录,查询结束日期格式错误", zap.Error(err)) return result.BadRequest("查询结束日期格式错误") } page := c.QueryInt("page", 1) topUps, total, err := repository.TopUpRepository.ListTopUps(*park, startDate, endDate, keyword, uint(page)) if err != nil { topUpLog.Error("查询符合条件的商户充值记录,查询失败", zap.Error(err)) return result.Error(fiber.StatusInternalServerError, "商户充值记录查询不成功") } topUpLog.Debug("检查获取到的数据", zap.Any("topUps", topUps), zap.Int64("total", total)) topUpDetails := make([]*vo.TopUpDetailQueryResponse, 0) copier.Copy(&topUpDetails, &topUps) topUpLog.Debug("检查转换后的数据", zap.Any("topUpDetails", topUpDetails)) return result.Success( "已经获取到符合条件的商户充值记录", response.NewPagedResponse(page, total).ToMap(), fiber.Map{"topUps": topUpDetails}, ) } // 获取指定充值记录的详细内容 func getTopUp(c *fiber.Ctx) error { result := response.NewResult(c) park := tools.EmptyToNil(c.Params("pid")) if park == nil { topUpLog.Error("获取指定充值记录的详细内容,未指定要访问的园区") return result.BadRequest("未指定要访问的园区") } if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { return err } topUpCode := tools.EmptyToNil(c.Params("code")) if topUpCode == nil { topUpLog.Error("获取指定充值记录的详细内容,未指定要查询的充值记录") return result.BadRequest("未指定要查询的充值记录") } topUp, err := repository.TopUpRepository.GetTopUp(*park, *topUpCode) if err != nil { topUpLog.Error("获取指定充值记录的详细内容,查询失败", zap.Error(err)) return result.NotFound("未找到指定的商户充值记录") } var topUpDetail vo.TopUpDetailQueryResponse copier.Copy(&topUpDetail, &topUp) return result.Success( "已经获取到指定充值记录的详细内容", fiber.Map{"topup": topUpDetail}, ) } // 创建一条新的商户充值记录 func createTopUp(c *fiber.Ctx) error { result := response.NewResult(c) park := tools.EmptyToNil(c.Params("pid")) if park == nil { topUpLog.Error("创建一条新的商户充值记录,未指定要访问的园区") return result.BadRequest("未指定要访问的园区") } if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { return err } var form vo.TopUpCreationForm if err := c.BodyParser(&form); err != nil { topUpLog.Error("创建一条新的商户充值记录,请求体解析失败", zap.Error(err)) return result.BadRequest("请求体解析失败") } if err := repository.TopUpRepository.CreateTopUp(*park, &form); err != nil { topUpLog.Error("创建一条新的商户充值记录,创建失败", zap.Error(err)) return result.NotAccept("商户充值记录创建不成功") } return result.Created( "已经创建一条新的商户充值记录", ) } // 删除一条指定的商户充值记录 func deleteTopUp(c *fiber.Ctx) error { result := response.NewResult(c) park := tools.EmptyToNil(c.Params("pid")) if park == nil { topUpLog.Error("删除一条指定的商户充值记录,未指定要访问的园区") return result.BadRequest("未指定要访问的园区") } if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { return err } topUpCode := tools.EmptyToNil(c.Params("code")) if topUpCode == nil { topUpLog.Error("删除一条指定的商户充值记录,未指定要删除的充值记录") return result.BadRequest("未指定要删除的充值记录") } if err := repository.TopUpRepository.DeleteTopUp(*park, *topUpCode); err != nil { topUpLog.Error("删除一条指定的商户充值记录,删除失败", zap.Error(err)) return result.NotAccept("商户充值记录删除不成功") } fmt.Println("已经删除一条指定的商户充值记录") return result.Success( "已经删除一条指定的商户充值记录", ) }