api-qobiltu-dev / space /controller /region /region_controller.go
lifedebugger's picture
Deploy files from GitHub repository
7ce61af
package cv_controller
import (
"net/http"
"strconv"
"api.qobiltu.id/models"
"api.qobiltu.id/response"
"api.qobiltu.id/services"
"github.com/gin-gonic/gin"
)
type RegionController interface {
SeedProvince(ctx *gin.Context)
SeedCity(ctx *gin.Context)
ListProvinces(ctx *gin.Context)
ListCities(ctx *gin.Context)
}
type regionController struct {
regionService services.RegionService
}
func NewRegionController(regionService services.RegionService) RegionController {
return &regionController{
regionService: regionService,
}
}
func (c *regionController) SeedProvince(ctx *gin.Context) {
err := c.regionService.SeedProvince(ctx)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Province seeded", nil, nil)
}
func (c *regionController) SeedCity(ctx *gin.Context) {
err := c.regionService.SeedCity(ctx)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "City seeded", nil, nil)
}
func (c *regionController) ListProvinces(ctx *gin.Context) {
provinces, err := c.regionService.ListProvinces(ctx)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Provinces retrieved", provinces, nil)
}
func (c *regionController) ListCities(ctx *gin.Context) {
provinceID := ctx.Query("province_id")
if provinceID == "" {
cities, err := c.regionService.ListCities(ctx)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Cities retrieved", cities, nil)
return
}
provinceIDInt, err := strconv.ParseInt(provinceID, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.ListCitiesByProvinceIdRequest{
ProvinceID: provinceIDInt,
}
cities, err := c.regionService.ListCitiesByProvinceId(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Cities by province retrieved", cities, nil)
}