fix: fixing response
This commit is contained in:
parent
0dff98736c
commit
2e8afdb365
|
@ -50,7 +50,7 @@ func (h *WilayahIndonesiaHandler) GetProvinces(c *fiber.Ctx) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *WilayahIndonesiaHandler) GetProvinceByID(c *fiber.Ctx) error {
|
func (h *WilayahIndonesiaHandler) GetProvinceByID(c *fiber.Ctx) error {
|
||||||
provinceID := c.Params("id")
|
provinceID := c.Params("provinceid")
|
||||||
|
|
||||||
page, err := strconv.Atoi(c.Query("page", "0"))
|
page, err := strconv.Atoi(c.Query("page", "0"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -96,7 +96,7 @@ func (h *WilayahIndonesiaHandler) GetAllRegencies(c *fiber.Ctx) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *WilayahIndonesiaHandler) GetRegencyByID(c *fiber.Ctx) error {
|
func (h *WilayahIndonesiaHandler) GetRegencyByID(c *fiber.Ctx) error {
|
||||||
regencyId := c.Params("id")
|
regencyId := c.Params("regencyid")
|
||||||
|
|
||||||
page, err := strconv.Atoi(c.Query("page", "0"))
|
page, err := strconv.Atoi(c.Query("page", "0"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -142,7 +142,7 @@ func (h *WilayahIndonesiaHandler) GetAllDistricts(c *fiber.Ctx) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *WilayahIndonesiaHandler) GetDistrictByID(c *fiber.Ctx) error {
|
func (h *WilayahIndonesiaHandler) GetDistrictByID(c *fiber.Ctx) error {
|
||||||
districtId := c.Params("id")
|
districtId := c.Params("districtid")
|
||||||
|
|
||||||
page, err := strconv.Atoi(c.Query("page", "0"))
|
page, err := strconv.Atoi(c.Query("page", "0"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -186,3 +186,14 @@ func (h *WilayahIndonesiaHandler) GetAllVillages(c *fiber.Ctx) error {
|
||||||
|
|
||||||
return utils.NonPaginatedResponse(c, villages, totalVillages, "villages fetched successfully")
|
return utils.NonPaginatedResponse(c, villages, totalVillages, "villages fetched successfully")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *WilayahIndonesiaHandler) GetVillageByID(c *fiber.Ctx) error {
|
||||||
|
id := c.Params("villageid")
|
||||||
|
|
||||||
|
village, err := h.WilayahService.GetVillageByID(id)
|
||||||
|
if err != nil {
|
||||||
|
return utils.GenericErrorResponse(c, fiber.StatusInternalServerError, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return utils.LogResponse(c, village, "Village fetched successfully")
|
||||||
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ type WilayahIndonesiaRepository interface {
|
||||||
FindDistrictByID(id string, page, limit int) (*model.District, int, error)
|
FindDistrictByID(id string, page, limit int) (*model.District, int, error)
|
||||||
|
|
||||||
FindAllVillages(page, limit int) ([]model.Village, int, error)
|
FindAllVillages(page, limit int) ([]model.Village, int, error)
|
||||||
|
FindVillageByID(id string) (*model.Village, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type wilayahIndonesiaRepository struct {
|
type wilayahIndonesiaRepository struct {
|
||||||
|
@ -128,6 +129,7 @@ func (r *wilayahIndonesiaRepository) FindAllRegencies(page, limit int) ([]model.
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
err := r.DB.Find(®encies).Error
|
err := r.DB.Find(®encies).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
|
@ -140,22 +142,24 @@ func (r *wilayahIndonesiaRepository) FindAllRegencies(page, limit int) ([]model.
|
||||||
func (r *wilayahIndonesiaRepository) FindRegencyByID(id string, page, limit int) (*model.Regency, int, error) {
|
func (r *wilayahIndonesiaRepository) FindRegencyByID(id string, page, limit int) (*model.Regency, int, error) {
|
||||||
var regency model.Regency
|
var regency model.Regency
|
||||||
|
|
||||||
err := r.DB.Preload("Districs", func(db *gorm.DB) *gorm.DB {
|
err := r.DB.Preload("Districts", func(db *gorm.DB) *gorm.DB {
|
||||||
if page > 0 && limit > 0 {
|
if page > 0 && limit > 0 {
|
||||||
|
|
||||||
return db.Offset((page - 1) * limit).Limit(limit)
|
return db.Offset((page - 1) * limit).Limit(limit)
|
||||||
}
|
}
|
||||||
|
|
||||||
return db
|
return db
|
||||||
}).Where("id = ?", id).First(®ency).Error
|
}).Where("id = ?", id).First(®ency).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var totalDistrict int64
|
var totalDistricts int64
|
||||||
r.DB.Model(&model.District{}).Where("regency_id = ?", id).Count(&totalDistrict)
|
err = r.DB.Model(&model.District{}).Where("regency_id = ?", id).Count(&totalDistricts).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
return ®ency, int(totalDistrict), nil
|
return ®ency, int(totalDistricts), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *wilayahIndonesiaRepository) FindAllDistricts(page, limit int) ([]model.District, int, error) {
|
func (r *wilayahIndonesiaRepository) FindAllDistricts(page, limit int) ([]model.District, int, error) {
|
||||||
|
@ -186,7 +190,7 @@ func (r *wilayahIndonesiaRepository) FindAllDistricts(page, limit int) ([]model.
|
||||||
func (r *wilayahIndonesiaRepository) FindDistrictByID(id string, page, limit int) (*model.District, int, error) {
|
func (r *wilayahIndonesiaRepository) FindDistrictByID(id string, page, limit int) (*model.District, int, error) {
|
||||||
var district model.District
|
var district model.District
|
||||||
|
|
||||||
err := r.DB.Preload("Village", func(db *gorm.DB) *gorm.DB {
|
err := r.DB.Preload("Villages", func(db *gorm.DB) *gorm.DB {
|
||||||
if page > 0 && limit > 0 {
|
if page > 0 && limit > 0 {
|
||||||
|
|
||||||
return db.Offset((page - 1) * limit).Limit(limit)
|
return db.Offset((page - 1) * limit).Limit(limit)
|
||||||
|
@ -205,7 +209,7 @@ func (r *wilayahIndonesiaRepository) FindDistrictByID(id string, page, limit int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *wilayahIndonesiaRepository) FindAllVillages(page, limit int) ([]model.Village, int, error) {
|
func (r *wilayahIndonesiaRepository) FindAllVillages(page, limit int) ([]model.Village, int, error) {
|
||||||
var village []model.Village
|
var villages []model.Village
|
||||||
var total int64
|
var total int64
|
||||||
|
|
||||||
err := r.DB.Model(&model.Village{}).Count(&total).Error
|
err := r.DB.Model(&model.Village{}).Count(&total).Error
|
||||||
|
@ -214,17 +218,26 @@ func (r *wilayahIndonesiaRepository) FindAllVillages(page, limit int) ([]model.V
|
||||||
}
|
}
|
||||||
|
|
||||||
if page > 0 && limit > 0 {
|
if page > 0 && limit > 0 {
|
||||||
err := r.DB.Offset((page - 1) * limit).Limit(limit).Find(&village).Error
|
err := r.DB.Offset((page - 1) * limit).Limit(limit).Find(&villages).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
err := r.DB.Find(&village).Error
|
err := r.DB.Find(&villages).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return village, int(total), nil
|
return villages, int(total), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *wilayahIndonesiaRepository) FindVillageByID(id string) (*model.Village, error) {
|
||||||
|
var village model.Village
|
||||||
|
err := r.DB.Where("id = ?", id).First(&village).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &village, nil
|
||||||
|
}
|
|
@ -25,6 +25,7 @@ type WilayahIndonesiaService interface {
|
||||||
GetDistrictByID(id string, page, limit int) (*dto.DistrictResponseDTO, int, error)
|
GetDistrictByID(id string, page, limit int) (*dto.DistrictResponseDTO, int, error)
|
||||||
|
|
||||||
GetAllVillages(page, limit int) ([]dto.VillageResponseDTO, int, error)
|
GetAllVillages(page, limit int) ([]dto.VillageResponseDTO, int, error)
|
||||||
|
GetVillageByID(id string) (*dto.VillageResponseDTO, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type wilayahIndonesiaService struct {
|
type wilayahIndonesiaService struct {
|
||||||
|
@ -412,22 +413,22 @@ func (s *wilayahIndonesiaService) GetDistrictByID(id string, page, limit int) (*
|
||||||
func (s *wilayahIndonesiaService) GetAllVillages(page, limit int) ([]dto.VillageResponseDTO, int, error) {
|
func (s *wilayahIndonesiaService) GetAllVillages(page, limit int) ([]dto.VillageResponseDTO, int, error) {
|
||||||
|
|
||||||
cacheKey := fmt.Sprintf("villages_page:%d_limit:%d", page, limit)
|
cacheKey := fmt.Sprintf("villages_page:%d_limit:%d", page, limit)
|
||||||
|
|
||||||
cachedData, err := utils.GetJSONData(cacheKey)
|
cachedData, err := utils.GetJSONData(cacheKey)
|
||||||
if err == nil && cachedData != nil {
|
if err == nil && cachedData != nil {
|
||||||
var villages []dto.VillageResponseDTO
|
var villages []dto.VillageResponseDTO
|
||||||
if data, ok := cachedData["data"].([]interface{}); ok {
|
if data, ok := cachedData["data"].([]interface{}); ok {
|
||||||
for _, item := range data {
|
for _, item := range data {
|
||||||
village, ok := item.(map[string]interface{})
|
villageData, ok := item.(map[string]interface{})
|
||||||
if ok {
|
if ok {
|
||||||
villages = append(villages, dto.VillageResponseDTO{
|
villages = append(villages, dto.VillageResponseDTO{
|
||||||
ID: village["id"].(string),
|
ID: villageData["id"].(string),
|
||||||
DistrictID: village["district_id"].(string),
|
DistrictID: villageData["district_id"].(string),
|
||||||
Name: village["name"].(string),
|
Name: villageData["name"].(string),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
total := int(cachedData["total"].(float64))
|
return villages, int(cachedData["total"].(float64)), nil
|
||||||
return villages, total, nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -451,8 +452,43 @@ func (s *wilayahIndonesiaService) GetAllVillages(page, limit int) ([]dto.Village
|
||||||
}
|
}
|
||||||
err = utils.SetJSONData(cacheKey, cacheData, time.Hour*24)
|
err = utils.SetJSONData(cacheKey, cacheData, time.Hour*24)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error caching villages data: %v\n", err)
|
fmt.Printf("Error caching villages data to Redis: %v\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return villageDTOs, total, nil
|
return villageDTOs, total, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *wilayahIndonesiaService) GetVillageByID(id string) (*dto.VillageResponseDTO, error) {
|
||||||
|
|
||||||
|
cacheKey := fmt.Sprintf("village:%s", id)
|
||||||
|
cachedData, err := utils.GetJSONData(cacheKey)
|
||||||
|
if err == nil && cachedData != nil {
|
||||||
|
villageResponse := &dto.VillageResponseDTO{}
|
||||||
|
if data, ok := cachedData["data"].(string); ok {
|
||||||
|
if err := json.Unmarshal([]byte(data), villageResponse); err == nil {
|
||||||
|
return villageResponse, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
village, err := s.WilayahRepo.FindVillageByID(id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("village not found: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
villageResponse := &dto.VillageResponseDTO{
|
||||||
|
ID: village.ID,
|
||||||
|
DistrictID: village.DistrictID,
|
||||||
|
Name: village.Name,
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheData := map[string]interface{}{
|
||||||
|
"data": villageResponse,
|
||||||
|
}
|
||||||
|
err = utils.SetJSONData(cacheKey, cacheData, 24*time.Hour)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error caching village data to Redis: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return villageResponse, nil
|
||||||
|
}
|
||||||
|
|
|
@ -16,18 +16,20 @@ func WilayahRouter(api fiber.Router) {
|
||||||
wilayahService := services.NewWilayahIndonesiaService(wilayahRepo)
|
wilayahService := services.NewWilayahIndonesiaService(wilayahRepo)
|
||||||
wilayahHandler := handler.NewWilayahImportHandler(wilayahService)
|
wilayahHandler := handler.NewWilayahImportHandler(wilayahService)
|
||||||
|
|
||||||
|
api.Post("/import/data-wilayah-indonesia", middleware.AuthMiddleware, middleware.RoleMiddleware(utils.RoleAdministrator), wilayahHandler.ImportWilayahData)
|
||||||
|
|
||||||
wilayahAPI := api.Group("/wilayah-indonesia")
|
wilayahAPI := api.Group("/wilayah-indonesia")
|
||||||
|
|
||||||
wilayahAPI.Get("/provinces", middleware.AuthMiddleware, wilayahHandler.GetProvinces)
|
wilayahAPI.Get("/provinces", middleware.AuthMiddleware, wilayahHandler.GetProvinces)
|
||||||
wilayahAPI.Get("/provinces/:id", middleware.AuthMiddleware, wilayahHandler.GetProvinceByID)
|
wilayahAPI.Get("/provinces/:provinceid", middleware.AuthMiddleware, wilayahHandler.GetProvinceByID)
|
||||||
|
|
||||||
wilayahAPI.Get("/regencies", middleware.AuthMiddleware, wilayahHandler.GetAllRegencies)
|
wilayahAPI.Get("/regencies", middleware.AuthMiddleware, wilayahHandler.GetAllRegencies)
|
||||||
wilayahAPI.Get("/regencies/:id", middleware.AuthMiddleware, wilayahHandler.GetRegencyByID)
|
wilayahAPI.Get("/regencies/:regencyid", middleware.AuthMiddleware, wilayahHandler.GetRegencyByID)
|
||||||
|
|
||||||
wilayahAPI.Get("/districts", middleware.AuthMiddleware, wilayahHandler.GetAllDistricts)
|
wilayahAPI.Get("/districts", middleware.AuthMiddleware, wilayahHandler.GetAllDistricts)
|
||||||
wilayahAPI.Get("/districts/:id", middleware.AuthMiddleware, wilayahHandler.GetDistrictByID)
|
wilayahAPI.Get("/districts/:districtid", middleware.AuthMiddleware, wilayahHandler.GetDistrictByID)
|
||||||
|
|
||||||
wilayahAPI.Get("/villages", middleware.AuthMiddleware, wilayahHandler.GetAllVillages)
|
wilayahAPI.Get("/villages", middleware.AuthMiddleware, wilayahHandler.GetAllVillages)
|
||||||
|
wilayahAPI.Get("/villages/:villageid", middleware.AuthMiddleware, wilayahHandler.GetVillageByID)
|
||||||
|
|
||||||
api.Post("/import/data-wilayah-indonesia", middleware.AuthMiddleware, middleware.RoleMiddleware(utils.RoleAdministrator), wilayahHandler.ImportWilayahData)
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue