first(); if ($admin) { $users->push($admin); } $supervisors = User::factory()->count(3)->create([ 'level' => UserEnum::Supervisor->value, ]); $users = $users->merge($supervisors); $vets = User::factory()->count(5)->create([ 'level' => UserEnum::Vet->value, ]); $users = $users->merge($vets); $doctors = User::factory()->count(8)->create([ 'level' => UserEnum::Doctor->value, ]); $users = $users->merge($doctors); $owners = User::factory()->count(20)->create(); $users = $users->merge($owners); $pets = collect(); foreach ($owners as $owner) { $petCount = rand(1, 3); for ($i = 0; $i < $petCount; $i++) { $pet = Pet::factory()->create([ 'owner_id' => $owner->id, ]); $pets->push($pet); } } $documents = collect(); foreach ($pets as $pet) { $docCount = rand(2, 5); for ($i = 0; $i < $docCount; $i++) { $document = Document::factory()->create([ 'pet_id' => $pet->id, 'requester_id' => $pet->owner_id, ]); $documents->push($document); } } $media = collect(); for ($i = 0; $i < 100; $i++) { $medium = Medium::factory()->create(); $media->push($medium); } foreach ($documents as $document) { $assigneeCount = rand(1, 3); $assignees = $users->where('level', '!=', UserEnum::Admin->value) ->random($assigneeCount); foreach ($assignees as $assignee) { DocumentAssignment::factory()->create([ 'document_id' => $document->id, 'user_id' => $assignee->id, ]); } } $reports = collect(); foreach ($documents as $document) { if (rand(1, 100) <= 70) { $report = Report::factory()->create([ 'document_id' => $document->id, 'doctor_id' => $doctors->random()->id, ]); $reports->push($report); } } foreach ($documents as $document) { $mediaCount = rand(2, 5); $documentMedia = $media->random($mediaCount); foreach ($documentMedia as $medium) { MediaAssignment::factory()->forDocument()->create([ 'media_id' => $medium->id, 'mediable_id' => $document->id, 'mediable_type' => Document::class, ]); } } foreach ($reports as $report) { $mediaCount = rand(1, 3); $reportMedia = $media->random($mediaCount); foreach ($reportMedia as $medium) { MediaAssignment::factory()->forReport()->create([ 'media_id' => $medium->id, 'mediable_id' => $report->id, 'mediable_type' => Report::class, ]); } } $this->createSpecificScenarios($users, $pets, $documents, $reports, $media); } private function createSpecificScenarios($users, $pets, $documents, $reports, $media): void { $mediumDocuments = $documents->random(5); foreach ($mediumDocuments as $document) { $document->update([ 'status' => \App\Enums\DocumentStatusEnum::InProgress, 'priority' => \App\Enums\DocumentPriorityEnum::Medium, 'processing_deadline' => now()->addDays(1), ]); } $highDocuments = $documents->random(5); foreach ($highDocuments as $document) { $document->update([ 'status' => \App\Enums\DocumentStatusEnum::InProgress, 'priority' => \App\Enums\DocumentPriorityEnum::High, 'processing_deadline' => now()->addDays(1), ]); } $completedDocuments = $documents->random(10); foreach ($completedDocuments as $document) { $document->update([ 'status' => \App\Enums\DocumentStatusEnum::Completed, 'finalized_at' => now()->subDays(rand(1, 30)), 'finalized_by' => $users->where('level', UserEnum::Supervisor->value)->random()->id, ]); if (!$reports->where('document_id', $document->id)->count()) { Report::factory()->approved()->create([ 'document_id' => $document->id, 'doctor_id' => $users->where('level', UserEnum::Doctor->value)->random()->id, ]); } } $rejectedDocuments = $documents->random(3); foreach ($rejectedDocuments as $document) { $document->update([ 'status' => \App\Enums\DocumentStatusEnum::Rejected, 'rejection_reason' => 'کیفیت تصاویر نامناسب است', ]); } $dogs = Pet::factory()->count(10)->dog()->create(); $cats = Pet::factory()->count(8)->cat()->create(); foreach ($dogs as $dog) { Document::factory()->count(2)->create([ 'pet_id' => $dog->id, 'requester_id' => $dog->owner_id, ]); } foreach ($cats as $cat) { Document::factory()->count(2)->create([ 'pet_id' => $cat->id, 'requester_id' => $cat->owner_id, ]); } } }