refactor(fee):附加费控制器基本完成向fiber的迁移。

This commit is contained in:
徐涛 2022-09-28 20:29:15 +08:00
parent 5c1b26c77f
commit c028056458

View File

@ -8,87 +8,78 @@ import (
"net/http" "net/http"
"strconv" "strconv"
"github.com/gin-gonic/gin" "github.com/gofiber/fiber/v2"
"github.com/jinzhu/copier" "github.com/jinzhu/copier"
"github.com/samber/lo" "github.com/samber/lo"
"github.com/shopspring/decimal" "github.com/shopspring/decimal"
) )
func InitializeMaintenanceFeeController(router *gin.Engine) { func InitializeMaintenanceFeeController(router *fiber.App) {
router.GET("/maintenance/fee", security.MustAuthenticated, listMaintenanceFees) router.Get("/maintenance/fee", security.MustAuthenticated, listMaintenanceFees)
router.POST("/maintenance/fee", security.EnterpriseAuthorize, createMaintenanceFeeRecord) router.Post("/maintenance/fee", security.EnterpriseAuthorize, createMaintenanceFeeRecord)
router.PUT("/maintenance/fee/:mid", security.EnterpriseAuthorize, modifyMaintenanceFeeRecord) router.Put("/maintenance/fee/:mid", security.EnterpriseAuthorize, modifyMaintenanceFeeRecord)
router.PUT("/maintenance/fee/:mid/enabled", security.EnterpriseAuthorize, changeMaintenanceFeeState) router.Put("/maintenance/fee/:mid/enabled", security.EnterpriseAuthorize, changeMaintenanceFeeState)
router.DELETE("/maintenance/fee/:mid", security.EnterpriseAuthorize, deleteMaintenanceFee) router.Delete("/maintenance/fee/:mid", security.EnterpriseAuthorize, deleteMaintenanceFee)
router.GET("/additional/charges", security.MustAuthenticated, statAdditionalCharges) router.Get("/additional/charges", security.MustAuthenticated, statAdditionalCharges)
} }
func ensureMaintenanceFeeBelongs(c *gin.Context, result *response.Result, requestMaintenanceFeeId string) bool { func ensureMaintenanceFeeBelongs(c *fiber.Ctx, result *response.Result, requestMaintenanceFeeId string) (bool, error) {
userSession, err := _retreiveSession(c) userSession, err := _retreiveSession(c)
if err != nil { if err != nil {
result.Unauthorized(err.Error()) return false, result.Unauthorized(err.Error())
return false
} }
sure, err := service.MaintenanceFeeService.EnsureFeeBelongs(userSession.Uid, requestMaintenanceFeeId) sure, err := service.MaintenanceFeeService.EnsureFeeBelongs(userSession.Uid, requestMaintenanceFeeId)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return false, result.Error(http.StatusInternalServerError, err.Error())
return false
} }
if !sure { if !sure {
result.Unauthorized("所操作维护费记录不属于当前用户。") return false, result.Unauthorized("所操作维护费记录不属于当前用户。")
return false
} }
return true return true, nil
} }
func listMaintenanceFees(c *gin.Context) { func listMaintenanceFees(c *fiber.Ctx) error {
result := response.NewResult(c) result := response.NewResult(c)
userSession, err := _retreiveSession(c) userSession, err := _retreiveSession(c)
if err != nil { if err != nil {
result.Unauthorized(err.Error()) return result.Unauthorized(err.Error())
return
} }
requestPark := c.DefaultQuery("park", "") requestPark := c.Query("park")
requestPeriod := c.DefaultQuery("period", "") requestPeriod := c.Query("period")
requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1")) requestPage, err := strconv.Atoi(c.Query("page", "1"))
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, "不能解析给定的参数[page]。") return result.Error(http.StatusInternalServerError, "不能解析给定的参数[page]。")
return
} }
if len(requestPark) > 0 { if len(requestPark) > 0 {
if userSession.Type == model.USER_TYPE_ENT { if userSession.Type == model.USER_TYPE_ENT {
if !ensureParkBelongs(c, result, requestPark) { if ensure, err := ensureParkBelongs(c, &result, requestPark); !ensure {
result.Unauthorized("只能访问属于自己的园区。") return err
return
} }
} }
fees, total, err := service.MaintenanceFeeService.ListMaintenanceFees([]string{requestPark}, requestPeriod, requestPage) fees, total, err := service.MaintenanceFeeService.ListMaintenanceFees([]string{requestPark}, requestPeriod, requestPage)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
result.Json( return result.Json(
http.StatusOK, http.StatusOK,
"已获取指定园区下的维护费记录", "已获取指定园区下的维护费记录",
response.NewPagedResponse(requestPage, total).ToMap(), response.NewPagedResponse(requestPage, total).ToMap(),
gin.H{"fees": fees}, fiber.Map{"fees": fees},
) )
} else { } else {
parkIds, err := service.ParkService.AllParkIds(userSession.Uid) parkIds, err := service.ParkService.AllParkIds(userSession.Uid)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
fees, total, err := service.MaintenanceFeeService.ListMaintenanceFees(parkIds, requestPeriod, requestPage) fees, total, err := service.MaintenanceFeeService.ListMaintenanceFees(parkIds, requestPeriod, requestPage)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
result.Json( return result.Json(
http.StatusOK, http.StatusOK,
"已获取指定用户下的所有维护费记录。", "已获取指定用户下的所有维护费记录。",
response.NewPagedResponse(requestPage, total).ToMap(), response.NewPagedResponse(requestPage, total).ToMap(),
gin.H{"fees": fees}, fiber.Map{"fees": fees},
) )
} }
} }
@ -101,21 +92,22 @@ type _FeeCreationFormData struct {
Memo *string `json:"memo" form:"memo"` Memo *string `json:"memo" form:"memo"`
} }
func createMaintenanceFeeRecord(c *gin.Context) { func createMaintenanceFeeRecord(c *fiber.Ctx) error {
result := response.NewResult(c) result := response.NewResult(c)
formData := new(_FeeCreationFormData) formData := new(_FeeCreationFormData)
c.BindJSON(formData) if err := c.BodyParser(formData); err != nil {
if !ensureParkBelongs(c, result, formData.ParkId) { return result.UnableToParse("无法解析提交的数据。")
return }
if ensure, err := ensureParkBelongs(c, &result, formData.ParkId); !ensure {
return err
} }
newMaintenanceFee := &model.MaintenanceFee{} newMaintenanceFee := &model.MaintenanceFee{}
copier.Copy(newMaintenanceFee, formData) copier.Copy(newMaintenanceFee, formData)
err := service.MaintenanceFeeService.CreateMaintenanceFeeRecord(*newMaintenanceFee) err := service.MaintenanceFeeService.CreateMaintenanceFeeRecord(*newMaintenanceFee)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
result.Created("新维护费记录已经创建。") return result.Created("新维护费记录已经创建。")
} }
type _FeeModificationFormData struct { type _FeeModificationFormData struct {
@ -123,91 +115,88 @@ type _FeeModificationFormData struct {
Memo *string `json:"memo" form:"memo"` Memo *string `json:"memo" form:"memo"`
} }
func modifyMaintenanceFeeRecord(c *gin.Context) { func modifyMaintenanceFeeRecord(c *fiber.Ctx) error {
result := response.NewResult(c) result := response.NewResult(c)
requestFee := c.Param("mid") requestFee := c.Params("mid")
formData := new(_FeeModificationFormData) formData := new(_FeeModificationFormData)
c.BindJSON(formData) if err := c.BodyParser(formData); err != nil {
if !ensureMaintenanceFeeBelongs(c, result, requestFee) { return result.UnableToParse("无法解析提交的数据。")
return }
if ensure, err := ensureMaintenanceFeeBelongs(c, &result, requestFee); !ensure {
return err
} }
newFeeState := new(model.MaintenanceFee) newFeeState := new(model.MaintenanceFee)
copier.Copy(newFeeState, formData) copier.Copy(newFeeState, formData)
newFeeState.Id = requestFee newFeeState.Id = requestFee
err := service.MaintenanceFeeService.ModifyMaintenanceFee(*newFeeState) err := service.MaintenanceFeeService.ModifyMaintenanceFee(*newFeeState)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
result.Updated("指定维护费条目已更新。") return result.Updated("指定维护费条目已更新。")
} }
type _FeeStateFormData struct { type _FeeStateFormData struct {
Enabled bool `json:"enabled" form:"enabled"` Enabled bool `json:"enabled" form:"enabled"`
} }
func changeMaintenanceFeeState(c *gin.Context) { func changeMaintenanceFeeState(c *fiber.Ctx) error {
result := response.NewResult(c) result := response.NewResult(c)
requestFee := c.Param("mid") requestFee := c.Params("mid")
formData := new(_FeeStateFormData) formData := new(_FeeStateFormData)
c.BindJSON(formData) if err := c.BodyParser(formData); err != nil {
if !ensureMaintenanceFeeBelongs(c, result, requestFee) { return result.UnableToParse("无法解析提交的数据。")
return }
if ensure, err := ensureMaintenanceFeeBelongs(c, &result, requestFee); !ensure {
return err
} }
err := service.MaintenanceFeeService.ChangeMaintenanceFeeState(requestFee, formData.Enabled) err := service.MaintenanceFeeService.ChangeMaintenanceFeeState(requestFee, formData.Enabled)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
result.Updated("指定维护费条目状态已更新。") return result.Updated("指定维护费条目状态已更新。")
} }
func deleteMaintenanceFee(c *gin.Context) { func deleteMaintenanceFee(c *fiber.Ctx) error {
result := response.NewResult(c) result := response.NewResult(c)
requestFee := c.Param("mid") requestFee := c.Params("mid")
if !ensureMaintenanceFeeBelongs(c, result, requestFee) { if ensure, err := ensureMaintenanceFeeBelongs(c, &result, requestFee); !ensure {
return return err
} }
err := service.MaintenanceFeeService.DeleteMaintenanceFee(requestFee) err := service.MaintenanceFeeService.DeleteMaintenanceFee(requestFee)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
result.Deleted("指定维护费条目已删除。") return result.Deleted("指定维护费条目已删除。")
} }
func statAdditionalCharges(c *gin.Context) { func statAdditionalCharges(c *fiber.Ctx) error {
result := response.NewResult(c) result := response.NewResult(c)
session, err := _retreiveSession(c) session, err := _retreiveSession(c)
if err != nil { if err != nil {
result.Unauthorized(err.Error()) return result.Unauthorized(err.Error())
return
} }
requestUser := lo. requestUser := lo.
If(session.Type == model.USER_TYPE_ENT, session.Uid). If(session.Type == model.USER_TYPE_ENT, session.Uid).
Else(c.DefaultQuery("user", "")) Else(c.Query("user"))
requestPark := c.DefaultQuery("park", "") requestPark := c.Query("park")
if len(requestPark) > 0 && session.Type == model.USER_TYPE_ENT { if len(requestPark) > 0 && session.Type == model.USER_TYPE_ENT {
if !ensureParkBelongs(c, result, requestPark) { if ensure, err := ensureParkBelongs(c, &result, requestPark); !ensure {
result.Unauthorized("不能获取不属于自己的园区。") return err
return
} }
} }
period := c.DefaultQuery("period", "") period := c.Query("period", "")
keyword := c.DefaultQuery("keyword", "") keyword := c.Query("keyword", "")
requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1")) requestPage, err := strconv.Atoi(c.Query("page", "1"))
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, "不能解析给定的参数[page]。") return result.Error(http.StatusInternalServerError, "不能解析给定的参数[page]。")
return
} }
fees, total, err := service.MaintenanceFeeService.QueryAdditionalCharges(requestUser, requestPark, period, keyword, requestPage) fees, total, err := service.MaintenanceFeeService.QueryAdditionalCharges(requestUser, requestPark, period, keyword, requestPage)
if err != nil { if err != nil {
result.Error(http.StatusInternalServerError, err.Error()) return result.Error(http.StatusInternalServerError, err.Error())
return
} }
result.Success( return result.Success(
"已经成功获取到物业附加费的统计记录。", "已经成功获取到物业附加费的统计记录。",
response.NewPagedResponse(requestPage, total).ToMap(), response.NewPagedResponse(requestPage, total).ToMap(),
gin.H{"charges": fees}, fiber.Map{"charges": fees},
) )
} }