Spaces:
Sleeping
Sleeping
File size: 3,341 Bytes
ab82ffd c0722d3 ab82ffd c0722d3 ab82ffd c0722d3 ab82ffd c0722d3 ab82ffd c0722d3 ab82ffd c0722d3 ab82ffd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | package controllers
import (
"github.com/gin-gonic/gin"
"abdanhafidz.com/go-boilerplate/models/dto"
entity "abdanhafidz.com/go-boilerplate/models/entity"
"abdanhafidz.com/go-boilerplate/services"
)
type RegionController interface {
SeedProvinces(ctx *gin.Context)
SeedCities(ctx *gin.Context)
ListProvinces(ctx *gin.Context)
ListCitiesByProvince(ctx *gin.Context)
}
type regionController struct {
regionService services.RegionService
}
func NewRegionController(regionService services.RegionService) RegionController {
return ®ionController{regionService: regionService}
}
// Seed Provinces godoc
// @Summary Seed Provinces
// @Description Seed multiple provinces into the system
// @Tags Region
// @Accept json
// @Produce json
// @Param request body []entity.RegionProvince true "Seed Provinces Request"
// @Success 200 {object} dto.SuccessResponse[any]
// @Failure 400 {object} dto.ErrorResponse
// @Router /api/v1/options/region/seed-provinces [post]
func (c *regionController) SeedProvinces(ctx *gin.Context) {
req := RequestJSON[[]entity.RegionProvince](ctx)
err := c.regionService.SeedProvinces(ctx.Request.Context(), req)
x := dto.SuccessResponse[any]{}
x.Data = nil
ResponseJSON(ctx, gin.H{"count": len(req)}, gin.H{"status": "ok"}, err)
}
// Seed Cities godoc
// @Summary Seed Cities
// @Description Seed multiple cities into the system
// @Tags Region
// @Accept json
// @Produce json
// @Param request body []entity.RegionCity true "Seed Cities Request"
// @Success 200 {object} dto.SuccessResponse[[]entity.RegionCity]
// @Failure 400 {object} dto.ErrorResponse
// @Router /api/v1/options/region/seed-cities [post]
func (c *regionController) SeedCities(ctx *gin.Context) {
req := RequestJSON[[]entity.RegionCity](ctx)
err := c.regionService.SeedCities(ctx.Request.Context(), req)
ResponseJSON[any](ctx, gin.H{"count": len(req)}, gin.H{"status": "ok"}, err)
}
// List Provinces godoc
// @Summary List Provinces
// @Description Retrieve a list of all provinces
// @Tags Region
// @Accept json
// @Produce json
// @Success 200 {object} dto.SuccessResponse[[]entity.RegionProvince]
// @Failure 400 {object} dto.ErrorResponse
// @Router /api/v1/options/region/provinces [get]
func (c *regionController) ListProvinces(ctx *gin.Context) {
res, err := c.regionService.ListProvinces(ctx.Request.Context())
ResponseJSON(ctx, gin.H{}, res, err)
}
// List Cities By Province godoc
// @Summary List Cities by Province
// @Description Retrieve a list of cities within a specific province
// @Tags Region
// @Accept json
// @Produce json
// @Param request body object{province_id=uint} true "Province ID"
// @Success 200 {object} dto.SuccessResponse[[]entity.RegionCity]
// @Failure 400 {object} dto.ErrorResponse
// @Router /api/v1/options/region/cities [get]
func (c *regionController) ListCitiesByProvince(ctx *gin.Context) {
type q struct {
ProvinceID uint `json:"province_id" binding:"required"`
}
req := RequestJSON[q](ctx)
res, err := c.regionService.ListCitiesByProvince(ctx.Request.Context(), req.ProvinceID)
ResponseJSON(ctx, req, res, err)
}
|