fix(db): purge insurance config when a doctor/clinic is deleted (H5)
tenant_insurances, entity_insurance_pricing and tenant_service_coverages reference their owner through a polymorphic (entity_type, entity_id) pair, so no database FK can cascade their cleanup. Hard-deleting a doctor (DoctorController) or clinic (AdminApiController) left these rows orphaned. Add TenantInsuranceCleanupService::purgeForEntity() and call it from both delete paths — removes coverage (via owning tenant_insurance ids), then tenant insurances, then pricing. Residual (separate, lower-freq paths): deleting an insurance category or a service_item still orphans rows that reference them by id — tracked under the medium-tier soft-ref findings. Regression: tests/Insurance/TenantInsuranceCleanupTest. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,8 @@ namespace App\Doctor\Controller;
|
||||
|
||||
use App\Appointment\Repository\WeeklyScheduleRepository;
|
||||
use App\Auth\Entity\User;
|
||||
use App\Insurance\Entity\TenantInsurance;
|
||||
use App\Insurance\Service\TenantInsuranceCleanupService;
|
||||
use App\Auth\Repository\UserRepository;
|
||||
use App\Clinic\Entity\Clinic;
|
||||
use App\Clinic\Repository\ClinicRepository;
|
||||
@@ -39,6 +41,7 @@ class DoctorController extends BaseController
|
||||
private readonly UserRepository $userRepo,
|
||||
private readonly FileValidatorService $fileValidator,
|
||||
private readonly WeeklyScheduleRepository $scheduleRepo,
|
||||
private readonly TenantInsuranceCleanupService $insuranceCleanup,
|
||||
private readonly string $projectDir,
|
||||
) {}
|
||||
|
||||
@@ -369,6 +372,7 @@ class DoctorController extends BaseController
|
||||
return $this->error(ErrorCodes::ERR_VALIDATION_002, 'دکتر یافت نشد', 404);
|
||||
}
|
||||
|
||||
$this->insuranceCleanup->purgeForEntity(TenantInsurance::TYPE_DOCTOR, $doctor->getId());
|
||||
$this->doctorRepo->remove($doctor);
|
||||
return $this->success(['message' => 'دکتر با موفقیت حذف شد']);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user