forked from free-lancers/electricity_bill_calc_service
		
	refactor(park):园区部分的控制器基本完成向fiber框架的迁移。
This commit is contained in:
		| @@ -8,66 +8,60 @@ import ( | |||||||
| 	"electricity_bill_calc/tools" | 	"electricity_bill_calc/tools" | ||||||
| 	"net/http" | 	"net/http" | ||||||
|  |  | ||||||
| 	"github.com/gin-gonic/gin" | 	"github.com/gofiber/fiber/v2" | ||||||
| 	"github.com/google/uuid" | 	"github.com/google/uuid" | ||||||
| 	"github.com/jinzhu/copier" | 	"github.com/jinzhu/copier" | ||||||
| 	"github.com/shopspring/decimal" | 	"github.com/shopspring/decimal" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func InitializeParkController(router *gin.Engine) { | func InitializeParkController(router *fiber.App) { | ||||||
| 	router.GET("/parks", security.EnterpriseAuthorize, listAllParksUnderSessionUser) | 	router.Get("/parks", security.EnterpriseAuthorize, listAllParksUnderSessionUser) | ||||||
| 	router.GET("/parks/:uid", security.MustAuthenticated, listAllParksUnderSpecificUser) | 	router.Get("/parks/:uid", security.MustAuthenticated, listAllParksUnderSpecificUser) | ||||||
| 	router.POST("/park", security.EnterpriseAuthorize, createNewPark) | 	router.Post("/park", security.EnterpriseAuthorize, createNewPark) | ||||||
| 	router.PUT("/park/:pid", security.EnterpriseAuthorize, modifyPark) | 	router.Put("/park/:pid", security.EnterpriseAuthorize, modifyPark) | ||||||
| 	router.GET("/park/:pid", security.EnterpriseAuthorize, fetchParkDetail) | 	router.Get("/park/:pid", security.EnterpriseAuthorize, fetchParkDetail) | ||||||
| 	router.PUT("/park/:pid/enabled", security.EnterpriseAuthorize, changeParkEnableState) | 	router.Put("/park/:pid/enabled", security.EnterpriseAuthorize, changeParkEnableState) | ||||||
| 	router.DELETE("/park/:pid", security.EnterpriseAuthorize, deleteSpecificPark) | 	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) | 	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.ParkService.EnsurePark(userSession.Uid, requestParkId) | 	sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId) | ||||||
| 	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 listAllParksUnderSessionUser(c *gin.Context) { | func listAllParksUnderSessionUser(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 |  | ||||||
| 	} | 	} | ||||||
| 	keyword := c.DefaultQuery("keyword", "") | 	keyword := c.Query("keyword") | ||||||
| 	parks, err := service.ParkService.ListAllParkBelongsTo(userSession.Uid, keyword) | 	parks, err := service.ParkService.ListAllParkBelongsTo(userSession.Uid, keyword) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	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) | 	result := response.NewResult(c) | ||||||
| 	requestUserId := c.Param("uid") | 	requestUserId := c.Params("uid") | ||||||
| 	keyword := c.DefaultQuery("keyword", "") | 	keyword := c.Query("keyword") | ||||||
| 	parks, err := service.ParkService.ListAllParkBelongsTo(requestUserId, keyword) | 	parks, err := service.ParkService.ListAllParkBelongsTo(requestUserId, keyword) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	result.Json(http.StatusOK, "已获取到指定用户下的园区。", gin.H{"parks": parks}) | 	return result.Json(http.StatusOK, "已获取到指定用户下的园区。", fiber.Map{"parks": parks}) | ||||||
| } | } | ||||||
|  |  | ||||||
| type _ParkInfoFormData struct { | type _ParkInfoFormData struct { | ||||||
| @@ -83,15 +77,16 @@ type _ParkInfoFormData struct { | |||||||
| 	SubmeterType     int8                `json:"submeter" form:"submeter"` | 	SubmeterType     int8                `json:"submeter" form:"submeter"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func createNewPark(c *gin.Context) { | func createNewPark(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 |  | ||||||
| 	} | 	} | ||||||
| 	formData := new(_ParkInfoFormData) | 	formData := new(_ParkInfoFormData) | ||||||
| 	c.BindJSON(formData) | 	if err := c.BodyParser(formData); err != nil { | ||||||
|  | 		return result.UnableToParse("无法解析提交的数据。") | ||||||
|  | 	} | ||||||
| 	newPark := new(model.Park) | 	newPark := new(model.Park) | ||||||
| 	copier.Copy(newPark, formData) | 	copier.Copy(newPark, formData) | ||||||
| 	newPark.Id = uuid.New().String() | 	newPark.Id = uuid.New().String() | ||||||
| @@ -101,95 +96,90 @@ func createNewPark(c *gin.Context) { | |||||||
| 	newPark.Enabled = true | 	newPark.Enabled = true | ||||||
| 	err = service.ParkService.SaveNewPark(*newPark) | 	err = service.ParkService.SaveNewPark(*newPark) | ||||||
| 	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("新园区完成创建。") | ||||||
| } | } | ||||||
|  |  | ||||||
| func modifyPark(c *gin.Context) { | func modifyPark(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 |  | ||||||
| 	} | 	} | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	formData := new(_ParkInfoFormData) | 	formData := new(_ParkInfoFormData) | ||||||
| 	c.BindJSON(formData) | 	if err := c.BodyParser(formData); err != nil { | ||||||
|  | 		return result.UnableToParse("无法解析提交的数据。") | ||||||
|  | 	} | ||||||
| 	park, err := service.ParkService.FetchParkDetail(requestParkId) | 	park, err := service.ParkService.FetchParkDetail(requestParkId) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	if userSession.Uid != park.UserId { | 	if userSession.Uid != park.UserId { | ||||||
| 		result.Unauthorized("不能修改不属于自己的园区。") | 		return result.Unauthorized("不能修改不属于自己的园区。") | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	copier.Copy(park, formData) | 	copier.Copy(park, formData) | ||||||
| 	nameAbbr := tools.PinyinAbbr(formData.Name) | 	nameAbbr := tools.PinyinAbbr(formData.Name) | ||||||
| 	park.Abbr = &nameAbbr | 	park.Abbr = &nameAbbr | ||||||
| 	err = service.ParkService.UpdateParkInfo(park) | 	err = service.ParkService.UpdateParkInfo(park) | ||||||
| 	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 fetchParkDetail(c *gin.Context) { | func fetchParkDetail(c *fiber.Ctx) error { | ||||||
| 	result := response.NewResult(c) | 	result := response.NewResult(c) | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	park, err := service.ParkService.FetchParkDetail(requestParkId) | 	park, err := service.ParkService.FetchParkDetail(requestParkId) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	result.Json(http.StatusOK, "已经获取到指定园区的信息。", gin.H{"park": park}) | 	return result.Json(http.StatusOK, "已经获取到指定园区的信息。", fiber.Map{"park": park}) | ||||||
| } | } | ||||||
|  |  | ||||||
| type _ParkStateFormData struct { | type _ParkStateFormData struct { | ||||||
| 	Enabled bool `json:"enabled" form:"enabled"` | 	Enabled bool `json:"enabled" form:"enabled"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func changeParkEnableState(c *gin.Context) { | func changeParkEnableState(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 |  | ||||||
| 	} | 	} | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	formData := new(_ParkStateFormData) | 	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) | 	err = service.ParkService.ChangeParkState(userSession.Uid, requestParkId, 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 deleteSpecificPark(c *gin.Context) { | func deleteSpecificPark(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 |  | ||||||
| 	} | 	} | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	err = service.ParkService.DeletePark(userSession.Uid, requestParkId) | 	err = service.ParkService.DeletePark(userSession.Uid, requestParkId) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 	} | 	} | ||||||
| 	result.Deleted("指定园区已成功删除。") | 	return result.Deleted("指定园区已成功删除。") | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user