seedDoctors(); $this->seedPets(); $this->seedDocuments($doctors); } protected function seedDoctors() { $doctors = [ ['email' => 'dr.hosseini@radical.dev', 'fullname' => 'دکتر حسین حسینی', 'specialty' => 'متخصص جراحی پوست و مو'], ['email' => 'dr.amin@radical.dev', 'fullname' => 'دکتر امین حسینی', 'specialty' => 'متخصص و رادیولوژیست'], ['email' => 'dr.mahdipour@radical.dev', 'fullname' => 'دکتر مریم مهدی‌پور', 'specialty' => 'متخصص تصویربرداری'], ['email' => 'dr.golian@radical.dev', 'fullname' => 'دکتر رضا گلیان', 'specialty' => 'متخصص داخلی دام کوچک'], ['email' => 'dr.karimi@radical.dev', 'fullname' => 'دکتر سارا کریمی', 'specialty' => 'متخصص سونوگرافی و اکو'], ['email' => 'dr.nazari@radical.dev', 'fullname' => 'دکتر بهرام نظری', 'specialty' => 'متخصص ارتوپدی دام کوچک'], ]; return collect($doctors)->map(function ($doctor) { return User::firstOrCreate( ['email' => $doctor['email']], array_merge(User::factory()->raw(), [ 'email' => $doctor['email'], 'username' => explode('@', $doctor['email'])[0], 'level' => UserEnum::Doctor->value, 'fullname' => $doctor['fullname'], 'specialty' => $doctor['specialty'], ]) ); }); } protected function seedPets(): void { $pets = [ ['name' => 'مایلو', 'type' => PetTypeEnum::Dog, 'gender' => PetGenderEnum::Male, 'breed' => 'ژرمن شپرد', 'weight' => 28, 'sterilized' => true], ['name' => 'تدی', 'type' => PetTypeEnum::Cat, 'gender' => PetGenderEnum::Male, 'breed' => 'پرشین', 'weight' => 4, 'sterilized' => false], ['name' => 'پونی', 'type' => PetTypeEnum::Rabbit, 'gender' => PetGenderEnum::Female, 'breed' => 'لوپ هلندی', 'weight' => 2, 'sterilized' => false], ['name' => 'روبیک', 'type' => PetTypeEnum::Hamster, 'gender' => PetGenderEnum::Male, 'breed' => 'سوری', 'weight' => 1, 'sterilized' => false], ['name' => 'کولا', 'type' => PetTypeEnum::GuineaPig, 'gender' => PetGenderEnum::Female, 'breed' => 'آمریکایی', 'weight' => 1, 'sterilized' => true], ['name' => 'هاپو', 'type' => PetTypeEnum::Dog, 'gender' => PetGenderEnum::Male, 'breed' => 'هاسکی سیبری', 'weight' => 24, 'sterilized' => false], ['name' => 'نازی', 'type' => PetTypeEnum::Cat, 'gender' => PetGenderEnum::Female, 'breed' => 'اسکاتیش فولد', 'weight' => 3, 'sterilized' => true], ['name' => 'قناری', 'type' => PetTypeEnum::Bird, 'gender' => PetGenderEnum::Unknown, 'breed' => 'قناری رسمی', 'weight' => 1, 'sterilized' => false], ['name' => 'لاکی', 'type' => PetTypeEnum::Turtle, 'gender' => PetGenderEnum::Female, 'breed' => 'برکه‌ای', 'weight' => 1, 'sterilized' => false], ['name' => 'اسنوپی', 'type' => PetTypeEnum::Dog, 'gender' => PetGenderEnum::Female, 'breed' => 'شیتزو', 'weight' => 6, 'sterilized' => true], ]; $owners = User::whereIn('level', [UserEnum::Admin->value, UserEnum::Supervisor->value, UserEnum::Vet->value])->get(); foreach ($owners as $owner) { foreach ($pets as $pet) { Pet::firstOrCreate( ['name' => $pet['name'], 'owner_id' => $owner->id], [ 'type' => $pet['type']->value, 'gender' => $pet['gender']->value, 'breed' => $pet['breed'], 'weight' => $pet['weight'], 'sterilized' => $pet['sterilized'], 'birthday' => now()->subYears(rand(1, 8))->startOfDay(), ] ); } } } protected function seedDocuments($doctors): void { $requests = [ ['pet' => 'مایلو', 'modality' => DocumentModalityEnum::Radiology, 'priority' => DocumentPriorityEnum::High, 'status' => DocumentStatusEnum::Registered, 'deadline_minutes' => -120, 'note' => 'لنگش اندام حرکتی عقب پس از پرش، احتمال آسیب مفصل ران. لطفا گرافی لگن بررسی شود.'], ['pet' => 'تدی', 'modality' => DocumentModalityEnum::Sonography, 'priority' => DocumentPriorityEnum::Medium, 'status' => DocumentStatusEnum::Registered, 'deadline_minutes' => 53, 'note' => 'بی‌اشتهایی و استفراغ متناوب از سه روز پیش، درخواست سونوگرافی شکمی.'], ['pet' => 'هاپو', 'modality' => DocumentModalityEnum::CtScan, 'priority' => DocumentPriorityEnum::High, 'status' => DocumentStatusEnum::InProgress, 'deadline_minutes' => 290, 'note' => 'تشنج ناگهانی، درخواست سی‌تی‌اسکن جمجمه جهت رد ضایعه فضاگیر.'], ['pet' => 'نازی', 'modality' => DocumentModalityEnum::Echo, 'priority' => DocumentPriorityEnum::Medium, 'status' => DocumentStatusEnum::Registered, 'deadline_minutes' => 1400, 'note' => 'سوفل قلبی در معاینه شنیده شد، درخواست اکوکاردیوگرافی.'], ['pet' => 'اسنوپی', 'modality' => DocumentModalityEnum::Mri, 'priority' => DocumentPriorityEnum::Medium, 'status' => DocumentStatusEnum::InProgress, 'deadline_minutes' => 1900, 'note' => 'ضعف پیش‌رونده اندام حرکتی، بررسی ستون فقرات از نظر دیسک بین‌مهره‌ای.'], ['pet' => 'پونی', 'modality' => DocumentModalityEnum::Radiology, 'priority' => DocumentPriorityEnum::Medium, 'status' => DocumentStatusEnum::Registered, 'deadline_minutes' => null, 'note' => 'کاهش وزن و دندان قروچه، درخواست گرافی دندان و فک.'], ['pet' => 'روبیک', 'modality' => DocumentModalityEnum::Sonography, 'priority' => DocumentPriorityEnum::High, 'status' => DocumentStatusEnum::InProgress, 'deadline_minutes' => 45, 'note' => 'تورم ناحیه شکم و بی‌حالی شدید، درخواست سونوگرافی اورژانسی.'], ['pet' => 'کولا', 'modality' => DocumentModalityEnum::CtScan, 'priority' => DocumentPriorityEnum::Medium, 'status' => DocumentStatusEnum::Registered, 'deadline_minutes' => 600, 'note' => 'کج شدن سر و عدم تعادل، بررسی گوش میانی و داخلی.'], ]; $owners = User::whereIn('level', [UserEnum::Admin->value, UserEnum::Supervisor->value, UserEnum::Vet->value])->get(); foreach ($owners as $owner) { if (Document::where('requester_id', $owner->id)->exists()) { continue; } foreach ($requests as $index => $request) { $pet = Pet::where('name', $request['pet'])->where('owner_id', $owner->id)->first(); if (!$pet) { continue; } $document = Document::create([ 'modality' => $request['modality']->value, 'priority' => $request['priority']->value, 'status' => $request['status']->value, 'note' => $request['note'], 'submitted_at' => now()->subDays(count($requests) - $index), 'processing_deadline' => $request['deadline_minutes'] !== null ? now()->addMinutes($request['deadline_minutes']) : null, 'pet_id' => $pet->id, 'requester_id' => $owner->id, ]); $document->assignments()->create([ 'user_id' => $doctors[$index % $doctors->count()]->id, 'role' => 'رادیولوژیست', ]); } } } }