complete Complete User Request Submission section RAD-1
This commit is contained in:
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user