refact: add existing value validation in coverage area
This commit is contained in:
parent
9e2ff76c3d
commit
1c0636bba4
|
|
@ -8,6 +8,7 @@ import (
|
|||
)
|
||||
|
||||
type CoverageAreaRepository interface {
|
||||
FindCoverageByProvinceAndRegency(province, regency string) (*model.CoverageArea, error)
|
||||
CreateCoverage(coverage *model.CoverageArea) error
|
||||
FindCoverageById(id string) (*model.CoverageArea, error)
|
||||
FindAllCoverage() ([]model.CoverageArea, error)
|
||||
|
|
@ -23,6 +24,18 @@ func NewCoverageAreaRepository(db *gorm.DB) CoverageAreaRepository {
|
|||
return &coverageAreaRepository{DB: db}
|
||||
}
|
||||
|
||||
func (r *coverageAreaRepository) FindCoverageByProvinceAndRegency(province, regency string) (*model.CoverageArea, error) {
|
||||
var coverage model.CoverageArea
|
||||
err := r.DB.Where("province = ? AND regency = ?", province, regency).First(&coverage).Error
|
||||
if err != nil {
|
||||
if err == gorm.ErrRecordNotFound {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return &coverage, nil
|
||||
}
|
||||
|
||||
func (r *coverageAreaRepository) CreateCoverage(coverage *model.CoverageArea) error {
|
||||
if err := r.DB.Create(coverage).Error; err != nil {
|
||||
return fmt.Errorf("failed to create coverage: %v", err)
|
||||
|
|
|
|||
|
|
@ -19,10 +19,11 @@ type CoverageAreaService interface {
|
|||
|
||||
type coverageAreaService struct {
|
||||
repo repositories.CoverageAreaRepository
|
||||
WilayahRepo repositories.WilayahIndonesiaRepository
|
||||
}
|
||||
|
||||
func NewCoverageAreaService(repo repositories.CoverageAreaRepository) CoverageAreaService {
|
||||
return &coverageAreaService{repo: repo}
|
||||
func NewCoverageAreaService(repo repositories.CoverageAreaRepository, WilayahRepo repositories.WilayahIndonesiaRepository) CoverageAreaService {
|
||||
return &coverageAreaService{repo: repo, WilayahRepo: WilayahRepo}
|
||||
}
|
||||
|
||||
func ConvertCoverageAreaToResponse(coverage *model.CoverageArea) *dto.ResponseCoverageArea {
|
||||
|
|
@ -44,9 +45,24 @@ func (s *coverageAreaService) CreateCoverageArea(request dto.RequestCoverageArea
|
|||
return nil, fmt.Errorf("validation errors: %v", errors)
|
||||
}
|
||||
|
||||
province, _, err := s.WilayahRepo.FindProvinceByID(request.Province, 0, 0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid province_id")
|
||||
}
|
||||
|
||||
regency, _, err := s.WilayahRepo.FindRegencyByID(request.Regency, 0, 0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid regency_id")
|
||||
}
|
||||
|
||||
existingCoverage, err := s.repo.FindCoverageByProvinceAndRegency(province.Name, regency.Name)
|
||||
if err == nil && existingCoverage != nil {
|
||||
return nil, fmt.Errorf("coverage area with province %s and regency %s already exists", province.Name, regency.Name)
|
||||
}
|
||||
|
||||
coverage := model.CoverageArea{
|
||||
Province: request.Province,
|
||||
Regency: request.Regency,
|
||||
Province: province.Name,
|
||||
Regency: regency.Name,
|
||||
}
|
||||
|
||||
if err := s.repo.CreateCoverage(&coverage); err != nil {
|
||||
|
|
@ -96,8 +112,23 @@ func (s *coverageAreaService) UpdateCoverageArea(id string, request dto.RequestC
|
|||
return nil, fmt.Errorf("coverage area with ID %s not found: %v", id, err)
|
||||
}
|
||||
|
||||
coverage.Province = request.Province
|
||||
coverage.Regency = request.Regency
|
||||
province, _, err := s.WilayahRepo.FindProvinceByID(request.Province, 0, 0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid province_id")
|
||||
}
|
||||
|
||||
regency, _, err := s.WilayahRepo.FindRegencyByID(request.Regency, 0, 0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid regency_id")
|
||||
}
|
||||
|
||||
existingCoverage, err := s.repo.FindCoverageByProvinceAndRegency(province.Name, regency.Name)
|
||||
if err == nil && existingCoverage != nil {
|
||||
return nil, fmt.Errorf("coverage area with province %s and regency %s already exists", province.Name, regency.Name)
|
||||
}
|
||||
|
||||
coverage.Province = province.Name
|
||||
coverage.Regency = regency.Name
|
||||
|
||||
if err := s.repo.UpdateCoverage(id, coverage); err != nil {
|
||||
return nil, fmt.Errorf("failed to update coverage area: %v", err)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ import (
|
|||
|
||||
func CoverageAreaRouter(api fiber.Router) {
|
||||
coverageAreaRepo := repositories.NewCoverageAreaRepository(config.DB)
|
||||
coverageAreaService := services.NewCoverageAreaService(coverageAreaRepo)
|
||||
wilayahRepo := repositories.NewWilayahIndonesiaRepository(config.DB)
|
||||
coverageAreaService := services.NewCoverageAreaService(coverageAreaRepo, wilayahRepo)
|
||||
coverageAreaHandler := handler.NewCoverageAreaHandler(coverageAreaService)
|
||||
|
||||
coverage := api.Group("/coveragearea")
|
||||
|
|
|
|||
Loading…
Reference in New Issue