diff --git a/controller/region.go b/controller/region.go new file mode 100644 index 0000000..9e4af8c --- /dev/null +++ b/controller/region.go @@ -0,0 +1,40 @@ +package controller + +import ( + "electricity_bill_calc/repository" + "electricity_bill_calc/response" + "net/http" + + "github.com/gofiber/fiber/v2" +) + +func InitializeRegionHandlers(router *fiber.App) { + router.Get("/region/:rid", getSubRegions) + router.Get("/regions/:rid", getParentRegions) +} + +func getSubRegions(c *fiber.Ctx) error { + result := response.NewResult(c) + requestParentId := c.Params("rid") + regions, err := repository.RegionRepository.FindSubRegions(requestParentId) + if err != nil { + return result.Error(http.StatusInternalServerError, err.Error()) + } + if len(regions) == 0 { + return result.Json(http.StatusNotFound, "未能获取到相关的行政区划。", fiber.Map{"regions": make([]string, 0)}) + } + return result.Json(http.StatusOK, "已经获取到相关的行政区划。", fiber.Map{"regions": regions}) +} + +func getParentRegions(c *fiber.Ctx) error { + result := response.NewResult(c) + requestRegionCode := c.Params("rid") + regions, err := repository.RegionRepository.FindParentRegions(requestRegionCode) + if err != nil { + return result.Error(http.StatusInternalServerError, err.Error()) + } + if len(regions) == 0 { + return result.Json(http.StatusNotFound, "未能获取到相关的行政区划。", fiber.Map{"regions": make([]string, 0)}) + } + return result.Json(http.StatusOK, "以及获取到相关的行政区划。", fiber.Map{"regions": regions}) +} diff --git a/model/region.go b/model/region.go new file mode 100644 index 0000000..76315bd --- /dev/null +++ b/model/region.go @@ -0,0 +1,8 @@ +package model + +type Region struct { + Code string `json:"code"` + Name string `json:"name"` + Level int32 `json:"level"` + Parent string `json:"parent"` +} diff --git a/router/router.go b/router/router.go index 965eeb3..795d48d 100644 --- a/router/router.go +++ b/router/router.go @@ -45,6 +45,7 @@ func App() *fiber.App { app.Use(security.SessionRecovery) controller.InitializeUserHandlers(app) + controller.InitializeRegionHandlers(app) return app }