From 122bc228bf987d61198824dd8da69a0848ef4343 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Wed, 28 Sep 2022 17:26:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(park):=E5=9B=AD=E5=8C=BA=E9=83=A8?= =?UTF-8?q?=E5=88=86=E7=9A=84=E6=8E=A7=E5=88=B6=E5=99=A8=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=91fiber=E6=A1=86=E6=9E=B6=E7=9A=84?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/park.go | 138 +++++++++++++++++++++------------------------ 1 file changed, 64 insertions(+), 74 deletions(-) diff --git a/controller/park.go b/controller/park.go index 99db254..b7973a0 100644 --- a/controller/park.go +++ b/controller/park.go @@ -8,66 +8,60 @@ import ( "electricity_bill_calc/tools" "net/http" - "github.com/gin-gonic/gin" + "github.com/gofiber/fiber/v2" "github.com/google/uuid" "github.com/jinzhu/copier" "github.com/shopspring/decimal" ) -func InitializeParkController(router *gin.Engine) { - router.GET("/parks", security.EnterpriseAuthorize, listAllParksUnderSessionUser) - router.GET("/parks/:uid", security.MustAuthenticated, listAllParksUnderSpecificUser) - router.POST("/park", security.EnterpriseAuthorize, createNewPark) - router.PUT("/park/:pid", security.EnterpriseAuthorize, modifyPark) - router.GET("/park/:pid", security.EnterpriseAuthorize, fetchParkDetail) - router.PUT("/park/:pid/enabled", security.EnterpriseAuthorize, changeParkEnableState) - router.DELETE("/park/:pid", security.EnterpriseAuthorize, deleteSpecificPark) +func InitializeParkController(router *fiber.App) { + router.Get("/parks", security.EnterpriseAuthorize, listAllParksUnderSessionUser) + router.Get("/parks/:uid", security.MustAuthenticated, listAllParksUnderSpecificUser) + router.Post("/park", security.EnterpriseAuthorize, createNewPark) + router.Put("/park/:pid", security.EnterpriseAuthorize, modifyPark) + router.Get("/park/:pid", security.EnterpriseAuthorize, fetchParkDetail) + router.Put("/park/:pid/enabled", security.EnterpriseAuthorize, changeParkEnableState) + router.Delete("/park/:pid", security.EnterpriseAuthorize, deleteSpecificPark) } -func ensureParkBelongs(c *gin.Context, result *response.Result, requestParkId string) bool { +func ensureParkBelongs(c *fiber.Ctx, result *response.Result, requestParkId string) (bool, error) { userSession, err := _retreiveSession(c) if err != nil { - result.Unauthorized(err.Error()) - return false + return false, result.Unauthorized(err.Error()) } sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return false + return false, result.Error(http.StatusInternalServerError, err.Error()) } if !sure { - result.Unauthorized("不能访问不属于自己的园区。") - return false + return false, result.Unauthorized("不能访问不属于自己的园区。") } - return true + return true, nil } -func listAllParksUnderSessionUser(c *gin.Context) { +func listAllParksUnderSessionUser(c *fiber.Ctx) error { result := response.NewResult(c) userSession, err := _retreiveSession(c) if err != nil { - result.Unauthorized(err.Error()) - return + return result.Unauthorized(err.Error()) } - keyword := c.DefaultQuery("keyword", "") + keyword := c.Query("keyword") parks, err := service.ParkService.ListAllParkBelongsTo(userSession.Uid, keyword) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Json(http.StatusOK, "已获取到指定用户下的园区。", gin.H{"parks": parks}) + return result.Json(http.StatusOK, "已获取到指定用户下的园区。", fiber.Map{"parks": parks}) } -func listAllParksUnderSpecificUser(c *gin.Context) { +func listAllParksUnderSpecificUser(c *fiber.Ctx) error { result := response.NewResult(c) - requestUserId := c.Param("uid") - keyword := c.DefaultQuery("keyword", "") + requestUserId := c.Params("uid") + keyword := c.Query("keyword") parks, err := service.ParkService.ListAllParkBelongsTo(requestUserId, keyword) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Json(http.StatusOK, "已获取到指定用户下的园区。", gin.H{"parks": parks}) + return result.Json(http.StatusOK, "已获取到指定用户下的园区。", fiber.Map{"parks": parks}) } type _ParkInfoFormData struct { @@ -83,15 +77,16 @@ type _ParkInfoFormData struct { SubmeterType int8 `json:"submeter" form:"submeter"` } -func createNewPark(c *gin.Context) { +func createNewPark(c *fiber.Ctx) error { result := response.NewResult(c) userSession, err := _retreiveSession(c) if err != nil { - result.Unauthorized(err.Error()) - return + return result.Unauthorized(err.Error()) } formData := new(_ParkInfoFormData) - c.BindJSON(formData) + if err := c.BodyParser(formData); err != nil { + return result.UnableToParse("无法解析提交的数据。") + } newPark := new(model.Park) copier.Copy(newPark, formData) newPark.Id = uuid.New().String() @@ -101,95 +96,90 @@ func createNewPark(c *gin.Context) { newPark.Enabled = true err = service.ParkService.SaveNewPark(*newPark) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Created("新园区完成创建。") + return result.Created("新园区完成创建。") } -func modifyPark(c *gin.Context) { +func modifyPark(c *fiber.Ctx) error { result := response.NewResult(c) userSession, err := _retreiveSession(c) if err != nil { - result.Unauthorized(err.Error()) - return + return result.Unauthorized(err.Error()) } - requestParkId := c.Param("pid") + requestParkId := c.Params("pid") formData := new(_ParkInfoFormData) - c.BindJSON(formData) + if err := c.BodyParser(formData); err != nil { + return result.UnableToParse("无法解析提交的数据。") + } park, err := service.ParkService.FetchParkDetail(requestParkId) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } if userSession.Uid != park.UserId { - result.Unauthorized("不能修改不属于自己的园区。") - return + return result.Unauthorized("不能修改不属于自己的园区。") } copier.Copy(park, formData) nameAbbr := tools.PinyinAbbr(formData.Name) park.Abbr = &nameAbbr err = service.ParkService.UpdateParkInfo(park) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Updated("指定园区资料已更新。") + return result.Updated("指定园区资料已更新。") } -func fetchParkDetail(c *gin.Context) { +func fetchParkDetail(c *fiber.Ctx) error { result := response.NewResult(c) - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } park, err := service.ParkService.FetchParkDetail(requestParkId) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Json(http.StatusOK, "已经获取到指定园区的信息。", gin.H{"park": park}) + return result.Json(http.StatusOK, "已经获取到指定园区的信息。", fiber.Map{"park": park}) } type _ParkStateFormData struct { Enabled bool `json:"enabled" form:"enabled"` } -func changeParkEnableState(c *gin.Context) { +func changeParkEnableState(c *fiber.Ctx) error { result := response.NewResult(c) userSession, err := _retreiveSession(c) if err != nil { - result.Unauthorized(err.Error()) - return + return result.Unauthorized(err.Error()) } - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } formData := new(_ParkStateFormData) - c.BindJSON(formData) + if err := c.BodyParser(formData); err != nil { + return result.UnableToParse("无法解析提交的数据。") + } err = service.ParkService.ChangeParkState(userSession.Uid, requestParkId, formData.Enabled) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) - return + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Updated("指定园区的可用性状态已成功更新。") + return result.Updated("指定园区的可用性状态已成功更新。") } -func deleteSpecificPark(c *gin.Context) { +func deleteSpecificPark(c *fiber.Ctx) error { result := response.NewResult(c) userSession, err := _retreiveSession(c) if err != nil { - result.Unauthorized(err.Error()) - return + return result.Unauthorized(err.Error()) } - requestParkId := c.Param("pid") - if !ensureParkBelongs(c, result, requestParkId) { - return + requestParkId := c.Params("pid") + if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { + return err } err = service.ParkService.DeletePark(userSession.Uid, requestParkId) if err != nil { - result.Error(http.StatusInternalServerError, err.Error()) + return result.Error(http.StatusInternalServerError, err.Error()) } - result.Deleted("指定园区已成功删除。") + return result.Deleted("指定园区已成功删除。") }