Spaces:
Sleeping
Sleeping
| 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) | |
| } | |