complete Complete User Request Submission section RAD-1

This commit is contained in:
2026-01-03 19:14:30 +03:30
commit 7137ec5792
393 changed files with 152602 additions and 0 deletions
+187
View File
@@ -0,0 +1,187 @@
<?php
namespace Database\Seeders;
use App\Enums\UserEnum;
use App\Models\Document;
use App\Models\DocumentAssignment;
use App\Models\MediaAssignment;
use App\Models\Medium;
use App\Models\Pet;
use App\Models\Report;
use App\Models\User;
use Illuminate\Database\Seeder;
class FullDatasetSeeder extends Seeder
{
public function run(): void
{
$users = collect();
$admin = User::where('email', 'admin@gmail.com')->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,
]);
}
}
}