feat: add seed data for clinic, doctors, and secretaries
This commit is contained in:
@@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
require __DIR__ . '/vendor/autoload.php';
|
||||||
|
|
||||||
|
use App\Auth\Entity\User;
|
||||||
|
use App\Clinic\Entity\Clinic;
|
||||||
|
use App\Doctor\Entity\Doctor;
|
||||||
|
use App\Secretary\Entity\DoctorSecretary;
|
||||||
|
use App\Kernel;
|
||||||
|
use Symfony\Component\Dotenv\Dotenv;
|
||||||
|
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactory;
|
||||||
|
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher;
|
||||||
|
|
||||||
|
(new Dotenv())->bootEnv(__DIR__ . '/.env');
|
||||||
|
|
||||||
|
$kernel = new Kernel($_SERVER['APP_ENV'] ?? 'dev', (bool) ($_SERVER['APP_DEBUG'] ?? true));
|
||||||
|
$kernel->boot();
|
||||||
|
|
||||||
|
$em = $kernel->getContainer()->get('doctrine')->getManager();
|
||||||
|
|
||||||
|
$factory = new PasswordHasherFactory([User::class => ['algorithm' => 'auto']]);
|
||||||
|
$hasher = new UserPasswordHasher($factory);
|
||||||
|
|
||||||
|
const PASSWORD = 'QaTest@1234';
|
||||||
|
|
||||||
|
/** ساخت کاربرِ لاگینپذیر با نقش و پسورد مشترک. */
|
||||||
|
function makeUser($em, $hasher, string $mobile, string $name, array $roles): User
|
||||||
|
{
|
||||||
|
$u = new User($mobile);
|
||||||
|
$u->setPasswordHash($hasher->hashPassword($u, PASSWORD));
|
||||||
|
$u->setRealName($name)->setRoles($roles)->setStatus(1);
|
||||||
|
$em->persist($u);
|
||||||
|
return $u;
|
||||||
|
}
|
||||||
|
|
||||||
|
$report = [];
|
||||||
|
|
||||||
|
// ── کلینیک نمونه: مالک + ۳ پزشک عضو ────────────────────────────────────────
|
||||||
|
$clinicOwner = makeUser($em, $hasher, '09150000001', 'مدیر کلینیک نمونه', ['ROLE_USER', 'ROLE_CLINIC']);
|
||||||
|
$clinic = new Clinic($clinicOwner);
|
||||||
|
$clinic->setName('کلینیک نمونه')->setIsActive(true);
|
||||||
|
$em->persist($clinic);
|
||||||
|
$report[] = ['کلینیک — مالک', '09150000001', 'ROLE_CLINIC'];
|
||||||
|
|
||||||
|
$clinicDoctorNames = [
|
||||||
|
'09150000011' => 'دکتر علی احمدی',
|
||||||
|
'09150000012' => 'دکتر مریم رضایی',
|
||||||
|
'09150000013' => 'دکتر حسن کریمی',
|
||||||
|
];
|
||||||
|
foreach ($clinicDoctorNames as $mobile => $name) {
|
||||||
|
$u = makeUser($em, $hasher, $mobile, $name, ['ROLE_USER', 'ROLE_DOCTOR']);
|
||||||
|
$d = new Doctor($u, $name);
|
||||||
|
$d->setGender('man')->setActiveDoctorAppointment(true);
|
||||||
|
$em->persist($d);
|
||||||
|
$clinic->getDoctors()->add($d);
|
||||||
|
$report[] = ['کلینیک — پزشک عضو', $mobile, $name];
|
||||||
|
}
|
||||||
|
|
||||||
|
// منشیِ کلینیک: یک رکورد DoctorSecretary per پزشکِ کلینیک (OWNER_CLINIC)
|
||||||
|
$clinicSec = makeUser($em, $hasher, '09150000021', 'منشی کلینیک نمونه', ['ROLE_USER', 'ROLE_SECRETARY']);
|
||||||
|
foreach ($clinic->getDoctors() as $d) {
|
||||||
|
$em->persist(new DoctorSecretary($d, $clinicSec, DoctorSecretary::OWNER_CLINIC, $clinic));
|
||||||
|
}
|
||||||
|
$report[] = ['کلینیک — منشی (هر ۳ پزشک)', '09150000021', 'ROLE_SECRETARY'];
|
||||||
|
|
||||||
|
// ── پزشکان مستقل: هرکدام + منشیِ اختصاصی ────────────────────────────────────
|
||||||
|
$independent = [
|
||||||
|
['09150000031', 'دکتر زهرا موسوی', '09150000041', 'منشی دکتر موسوی'],
|
||||||
|
['09150000032', 'دکتر رضا نجفی', '09150000042', 'منشی دکتر نجفی'],
|
||||||
|
['09150000033', 'دکتر سارا حسینی', '09150000043', 'منشی دکتر حسینی'],
|
||||||
|
];
|
||||||
|
foreach ($independent as [$docMobile, $docName, $secMobile, $secName]) {
|
||||||
|
$du = makeUser($em, $hasher, $docMobile, $docName, ['ROLE_USER', 'ROLE_DOCTOR']);
|
||||||
|
$d = new Doctor($du, $docName);
|
||||||
|
$d->setActiveDoctorAppointment(true);
|
||||||
|
$em->persist($d);
|
||||||
|
$report[] = ['پزشک مستقل', $docMobile, $docName];
|
||||||
|
|
||||||
|
$su = makeUser($em, $hasher, $secMobile, $secName, ['ROLE_USER', 'ROLE_SECRETARY']);
|
||||||
|
$em->persist(new DoctorSecretary($d, $su, DoctorSecretary::OWNER_DOCTOR));
|
||||||
|
$report[] = [' └ منشیِ همان پزشک', $secMobile, $secName];
|
||||||
|
}
|
||||||
|
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
echo "\n✅ Seed کامل شد — پسورد همه: " . PASSWORD . "\n\n";
|
||||||
|
printf("%-32s %-14s %s\n", 'نقش', 'موبایل', 'نام/نقش');
|
||||||
|
echo str_repeat('─', 70) . "\n";
|
||||||
|
foreach ($report as [$role, $mobile, $name]) {
|
||||||
|
printf("%-32s %-14s %s\n", $role, $mobile, $name);
|
||||||
|
}
|
||||||
|
echo "\n";
|
||||||
Reference in New Issue
Block a user