hiling_go/api/region.go
2026-06-03 13:46:26 +03:00

82 lines
2.3 KiB
Go
Executable File

package api
import (
"encoding/json"
"net/http"
"time"
"github.com/gin-gonic/gin"
)
// @Summary List all regions
// @Tags regions
// @Produce json
// @Success 200 {array} map[string]any
// @Router /regions [get]
func (server *Server) getListRegions(ctx *gin.Context) {
const key = "cache:regions"
if cached, err := server.Redis.Get(ctx, key).Result(); err == nil {
ctx.Data(http.StatusOK, "application/json", []byte(cached))
return
}
regions, err := server.Store.GetListRegions(ctx)
if err != nil {
ctx.JSON(http.StatusInternalServerError, ErrorResponse(err, "Something went wrong while try to get regions"))
return
}
if data, err := json.Marshal(regions); err == nil {
server.Redis.Set(ctx, key, data, 24*time.Hour)
}
ctx.JSON(http.StatusOK, regions)
}
// @Summary List provinces
// @Tags regions
// @Produce json
// @Success 200 {array} map[string]any
// @Router /region/provinces [get]
func (server *Server) getListProvinces(ctx *gin.Context) {
const key = "cache:provinces"
if cached, err := server.Redis.Get(ctx, key).Result(); err == nil {
ctx.Data(http.StatusOK, "application/json", []byte(cached))
return
}
provinces, err := server.Store.GetListProvinces(ctx)
if err != nil {
ctx.JSON(http.StatusInternalServerError, ErrorResponse(err, "Something went wrong while try to get provinces"))
return
}
if data, err := json.Marshal(provinces); err == nil {
server.Redis.Set(ctx, key, data, 24*time.Hour)
}
ctx.JSON(http.StatusOK, provinces)
}
// @Summary List regencies
// @Tags regions
// @Produce json
// @Success 200 {array} map[string]any
// @Router /region/regencies [get]
func (server *Server) getListRegencies(ctx *gin.Context) {
const key = "cache:regencies"
if cached, err := server.Redis.Get(ctx, key).Result(); err == nil {
ctx.Data(http.StatusOK, "application/json", []byte(cached))
return
}
regencies, err := server.Store.GetListRegencies(ctx)
if err != nil {
ctx.JSON(http.StatusInternalServerError, ErrorResponse(err, "Something went wrong while try to get regencies"))
return
}
if data, err := json.Marshal(regencies); err == nil {
server.Redis.Set(ctx, key, data, 24*time.Hour)
}
ctx.JSON(http.StatusOK, regencies)
}