add restrict delete master data kandang group

This commit is contained in:
giovanni
2026-03-27 12:11:17 +07:00
parent 6510bccc76
commit 63cf0c6fac
2 changed files with 29 additions and 0 deletions
@@ -2,6 +2,7 @@ package repository
import (
"context"
"errors"
"gorm.io/gorm"
@@ -14,6 +15,7 @@ type KandangGroupRepository interface {
LocationExists(ctx context.Context, locationId uint) (bool, error)
PicExists(ctx context.Context, picId uint) (bool, error)
NameExists(ctx context.Context, name string, excludeID *uint) (bool, error)
HasDailyChecklistRelation(ctx context.Context, kandangGroupId uint) (bool, error)
}
type KandangGroupRepositoryImpl struct {
@@ -39,3 +41,20 @@ func (r *KandangGroupRepositoryImpl) PicExists(ctx context.Context, picId uint)
func (r *KandangGroupRepositoryImpl) NameExists(ctx context.Context, name string, excludeID *uint) (bool, error) {
return repository.ExistsByName[entity.KandangGroup](ctx, r.db, name, excludeID)
}
func (r *KandangGroupRepositoryImpl) HasDailyChecklistRelation(ctx context.Context, kandangGroupId uint) (bool, error) {
var marker int
err := r.db.WithContext(ctx).
Model(&entity.DailyChecklist{}).
Select("1").
Where("kandang_id = ?", kandangGroupId).
Limit(1).
Take(&marker).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
return false, nil
}
if err != nil {
return false, err
}
return true, nil
}
@@ -226,6 +226,16 @@ func (s kandangGroupService) DeleteOne(c *fiber.Ctx, id uint) error {
if err != nil {
return err
}
hasDailyChecklistRelation, err := s.Repository.HasDailyChecklistRelation(c.Context(), id)
if err != nil {
s.Log.Errorf("Failed to check daily checklist relation for kandang group %d: %+v", id, err)
return fiber.NewError(fiber.StatusInternalServerError, "Failed to check kandang group relation")
}
if hasDailyChecklistRelation {
return fiber.NewError(fiber.StatusConflict, "Kandang group tidak boleh dihapus karena masih memiliki relasi daily checklist")
}
if len(kandangGroup.Kandangs) > 0 {
return fiber.NewError(fiber.StatusConflict, "Kandang group tidak boleh dihapus karena masih memiliki relasi kandang")
}