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
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call([
PermissionSeeder::class,
// FullDatasetSeeder::class,
]);
}
}
+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,
]);
}
}
}
+127
View File
@@ -0,0 +1,127 @@
<?php
namespace Database\Seeders;
use App\Enums\UserEnum;
use Illuminate\Database\Seeder;
use App\Models\Permission;
use App\Models\User;
use Spatie\Permission\Models\Role;
use Illuminate\Support\Facades\Hash;
class PermissionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
User::updateOrCreate(
['email' => 'admin@gmail.com'],
[
'password' => Hash::make('12345678'),
'username' => 'admin',
'phone' => '09123456789',
'level' => UserEnum::Admin->value,
'fullname' => 'admin',
'national_code' => '1234567890',
]
);
$permissions = [
'users' => [
'label' => 'دسترسی به کاربران',
'children' => [
'index' => 'دسترسی به لیست کاربران',
'create' => 'دسترسی به ایجاد کاربر',
'edit' => 'دسترسی به ویرایش کاربر',
'delete' => 'دسترسی به حذف کاربر',
'own' => 'دسترسی به اطلاعات خود کاربر',
],
],
'permissions' => [
'label' => 'دسترسی به سطح دسترسی‌ها',
'children' => [
'index' => 'دسترسی به لیست سطح دسترسی‌ها',
'create' => 'دسترسی به ایجاد سطح دسترسی',
'edit' => 'دسترسی به ویرایش سطح دسترسی',
'delete' => 'دسترسی به حذف سطح دسترسی',
'own' => 'دسترسی به سطح دسترسی خود',
],
],
'medium' => [
'label' => 'دسترسی به رسانه ها',
'children' => [
'index' => 'دسترسی به لیست رسانه ها',
'create' => 'دسترسی به ایجاد رسانه',
'edit' => 'دسترسی به ویرایش رسانه',
'delete' => 'دسترسی به حذف رسانه',
'own' => 'دسترسی به رسانه های خود',
],
],
'roles' => [
'label' => 'دسترسی به نقش‌ها',
'children' => [
'index' => 'دسترسی به لیست نقش‌ها',
'create' => 'دسترسی به ایجاد نقش',
'edit' => 'دسترسی به ویرایش نقش',
'delete' => 'دسترسی به حذف نقش',
'own' => 'دسترسی به نقش خود',
],
],
'pets' => [
'label' => 'دسترسی به کیس ها',
'children' => [
'index' => 'دسترسی به لیست کیس ها',
'create' => 'دسترسی به ایجاد کیس',
'edit' => 'دسترسی به ویرایش کیس',
'delete' => 'دسترسی به حذف کیس',
'own' => 'دسترسی به کیس خود',
],
],
'documents' => [
'label' => 'دسترسی به پرونده ها',
'children' => [
'index' => 'دسترسی به لیست پرونده ها',
'create' => 'دسترسی به ایجاد پرونده',
'edit' => 'دسترسی به ویرایش پرونده',
'delete' => 'دسترسی به حذف پرونده',
'own' => 'دسترسی به پرونده خود',
],
],
'reports' => [
'label' => 'دسترسی به گزارش ها',
'children' => [
'index' => 'دسترسی به لیست گزارش ها',
'create' => 'دسترسی به ایجاد گزارش',
'edit' => 'دسترسی به ویرایش گزارش',
'delete' => 'دسترسی به حذف گزارش',
'own' => 'دسترسی به گزارش خود',
],
],
];
foreach ($permissions as $key => $data) {
$parent = Permission::create([
'name' => $key,
'label' => $data['label'],
'parent_id' => 0,
]);
foreach ($data['children'] as $action => $label) {
Permission::create([
'name' => "$key.$action",
'label' => $label,
'parent_id' => $parent->id,
]);
}
}
$adminRole = Role::firstOrCreate(['name' => 'admin', 'label' => 'مدیر کل']);
$adminRole->syncPermissions(Permission::all());
$admin = User::where('email', 'admin@gmail.com')->first();
$admin->assignRole($adminRole);
}
}
+121
View File
@@ -0,0 +1,121 @@
<?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 SampleDataSeeder extends Seeder
{
public function run(): void
{
$admin = User::where('email', 'admin@gmail.com')->first();
if (!$admin) {
$admin = User::factory()->create([
'email' => 'admin@radical.dev',
'username' => 'admin_dev',
'level' => UserEnum::Admin->value,
'fullname' => 'مدیر سیستم',
]);
}
$supervisor = User::factory()->create([
'email' => 'supervisor@radical.dev',
'username' => 'supervisor',
'level' => UserEnum::Supervisor->value,
'fullname' => 'سرپرست بخش',
]);
$doctor = User::factory()->create([
'email' => 'doctor@radical.dev',
'username' => 'doctor',
'level' => UserEnum::Doctor->value,
'fullname' => 'دکتر رادیولوژی',
]);
$owner = User::factory()->create([
'email' => 'owner@radical.dev',
'username' => 'owner',
'level' => UserEnum::Supervisor->value,
'fullname' => 'صاحب حیوان',
]);
$dog = Pet::factory()->dog()->male()->create([
'name' => 'رکس',
'owner_id' => $owner->id,
]);
$cat = Pet::factory()->cat()->female()->create([
'name' => 'میمی',
'owner_id' => $owner->id,
]);
$urgentDocument = Document::factory()->urgent()->create([
'pet_id' => $dog->id,
'requester_id' => $owner->id,
]);
$completedDocument = Document::factory()->completed()->create([
'pet_id' => $cat->id,
'requester_id' => $owner->id,
'finalized_by' => $supervisor->id,
]);
DocumentAssignment::factory()->radiologist()->create([
'document_id' => $urgentDocument->id,
'user_id' => $doctor->id,
]);
DocumentAssignment::factory()->supervisor()->create([
'document_id' => $urgentDocument->id,
'user_id' => $supervisor->id,
]);
$imageFile = Medium::factory()->image()->public()->create([
'filename' => 'xray_dog.jpg',
]);
$documentFile = Medium::factory()->document()->create([
'filename' => 'medical_history.pdf',
]);
MediaAssignment::factory()->forDocument()->primary()->create([
'media_id' => $imageFile->id,
'mediable_id' => $urgentDocument->id,
'mediable_type' => Document::class,
]);
MediaAssignment::factory()->forDocument()->history()->create([
'media_id' => $documentFile->id,
'mediable_id' => $urgentDocument->id,
'mediable_type' => Document::class,
]);
Report::factory()->draft()->create([
'document_id' => $urgentDocument->id,
'doctor_id' => $doctor->id,
]);
$approvedReport = Report::factory()->approved()->create([
'document_id' => $completedDocument->id,
'doctor_id' => $doctor->id,
]);
$reportImage = Medium::factory()->image()->create([
'filename' => 'report_attachment.jpg',
]);
MediaAssignment::factory()->forReport()->attachments()->create([
'media_id' => $reportImage->id,
'mediable_id' => $approvedReport->id,
'mediable_type' => Report::class,
]);
}
}