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) }