feat(doctor): update schedule fields in doctor API responses to reflect actual availability

This commit is contained in:
hamed
2026-06-15 15:11:29 +03:30
parent ec36eefeb8
commit c662eb9b4f
5 changed files with 398 additions and 28 deletions
+16 -5
View File
@@ -2,6 +2,7 @@
namespace App\Doctor\Controller;
use App\Appointment\Repository\WeeklyScheduleRepository;
use App\Auth\Entity\User;
use App\Auth\Repository\UserRepository;
use App\Clinic\Entity\Clinic;
@@ -37,6 +38,7 @@ class DoctorController extends BaseController
private readonly CityRepository $cityRepo,
private readonly UserRepository $userRepo,
private readonly FileValidatorService $fileValidator,
private readonly WeeklyScheduleRepository $scheduleRepo,
private readonly string $projectDir,
) {}
@@ -114,7 +116,8 @@ class DoctorController extends BaseController
$this->userRepo->save($user);
}
return $this->success(['data' => $doctor->toDetailArray()], 201);
$schedule = $this->scheduleRepo->findByDoctor($doctor);
return $this->success(['data' => $doctor->toDetailArray($schedule)], 201);
}
#[OA\Get(
@@ -160,7 +163,8 @@ class DoctorController extends BaseController
],
], $clinics);
return $this->success(['data' => array_merge($doctor->toDetailArray(), ['clinics' => $clinicData])]);
$schedule = $this->scheduleRepo->findByDoctor($doctor);
return $this->success(['data' => array_merge($doctor->toDetailArray($schedule), ['clinics' => $clinicData])]);
}
#[Route('/api/v1/clinic/my-doctor/{doctorUuid}', methods: ['GET'])]
@@ -181,7 +185,8 @@ class DoctorController extends BaseController
return $this->error(ErrorCodes::ERR_AUTH_006, 'این پزشک عضو کلینیک شما نیست', 403);
}
return $this->success(['data' => array_merge($doctor->toDetailArray(), ['clinics' => [[
$schedule = $this->scheduleRepo->findByDoctor($doctor);
return $this->success(['data' => array_merge($doctor->toDetailArray($schedule), ['clinics' => [[
'id' => (string) $clinic->getId(),
'uuid' => $clinic->getUuid(),
'name' => $clinic->getName(),
@@ -235,8 +240,13 @@ class DoctorController extends BaseController
$filters = $request->query->all();
$result = $this->doctorRepo->findWithFilters($filters);
$scheduleMap = [];
foreach ($this->scheduleRepo->findByDoctors($result['items']) as $schedule) {
$scheduleMap[$schedule->getDoctor()->getId()] = $schedule;
}
return $this->paginated(
array_map(fn(Doctor $d) => $d->toListArray(), $result['items']),
array_map(fn(Doctor $d) => $d->toListArray($scheduleMap[$d->getId()] ?? null), $result['items']),
$result['total'],
$result['page'],
$result['limit']
@@ -309,7 +319,8 @@ class DoctorController extends BaseController
$this->hydrateDoctor($doctor, $data);
$this->doctorRepo->save($doctor);
return $this->success(['data' => $doctor->toDetailArray()]);
$schedule = $this->scheduleRepo->findByDoctor($doctor);
return $this->success(['data' => $doctor->toDetailArray($schedule)]);
}
#[OA\Delete(