82 lines
2.3 KiB
Go
Executable File
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)
|
|
}
|