feat: add factory for models

This commit is contained in:
amir-ys
2024-11-23 22:14:01 +03:30
parent 26a0acb1d2
commit a74492e488
36 changed files with 600 additions and 16 deletions
@@ -117,6 +117,15 @@ class MedicalCenterController extends Controller
$cycle->delete();
}
foreach ( $user->galleries as $gallery ) {
if (count($gallery->uploadables)) {
foreach ($gallery->uploadables as $item) {
$item->delete();
}
}
$gallery->delete();
}
// delete user
$user->delete();
}
+5
View File
@@ -153,6 +153,11 @@ class UserController extends Controller
}
foreach ( $User->galleries as $gallery ) {
if (count($gallery->uploadables)) {
foreach ($gallery->uploadables as $item) {
$item->delete();
}
}
$gallery->delete();
}
+2
View File
@@ -2,12 +2,14 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class Cycle extends Model
{
use HasFactory;
public $fillable = [
'date', 'user_id', 'cycle_number', 'sterilizer_id', 'note', 'verified', 'unique_id'
];
+6
View File
@@ -2,12 +2,18 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Gallery extends Model
{
use HasFactory;
protected $fillable = ['user_id', 'path'];
public $timestamps = false;
public function uploadables()
{
return $this->hasMany(Uploadable::class);
}
}
+3
View File
@@ -2,12 +2,15 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Input extends Model
{
use HasFactory;
public $fillable = [
'name', 'type', 'size', 'test_type_id', 'parent_id', 'require_scanner'
];
+3
View File
@@ -2,11 +2,14 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class InputValue extends Model
{
use HasFactory;
public $fillable = [
'value', 'test_result_id', 'input_id', 'option_id'
];
+2 -2
View File
@@ -4,17 +4,17 @@ namespace App\Models;
use App\Constants\StatusTypeEnum;
use App\Services\Media\HasMediaTrait;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\MorphOne;
use Spatie\Image\Exceptions\InvalidManipulation;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class Item extends Model implements HasMedia
{
use HasMediaTrait;
use HasMediaTrait, HasFactory;
public $fillable = [
'name', 'size', 'unique_id', 'specific', 'note', 'user_id', 'udi', 'status', 'repair',
+3
View File
@@ -2,12 +2,15 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class Label extends Model
{
use HasFactory;
public $fillable = [
'sterile_date', 'expire_date', 'sterilizer_id', 'cycle_number', 'lot_number', 'user_id',
'package_id'
+3
View File
@@ -2,12 +2,15 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class MedicalCenter extends Model
{
use HasFactory;
public $fillable = ['name', 'city_id', 'address', 'phone_number'];
public function users(): HasMany
+2 -1
View File
@@ -2,13 +2,14 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class Message extends Model
{
use SoftDeletes;
use SoftDeletes,HasFactory;
public $fillable = ['title', 'text', 'status', 'recipient_user_id', 'sender_user_id'];
+3
View File
@@ -2,12 +2,15 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
class Option extends Model
{
use HasFactory;
public $fillable = ['title', 'input_id'];
public function input(): BelongsTo
+3
View File
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Constants\StatusTypeEnum;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -11,6 +12,8 @@ use Illuminate\Database\Eloquent\Relations\MorphOne;
class Package extends Model
{
use HasFactory;
public $fillable = ['name', 'user_id', 'note', 'status', 'creator_id'];
public function user(): BelongsTo
+2 -1
View File
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Services\Media\HasMediaTrait;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -12,7 +13,7 @@ use Spatie\MediaLibrary\MediaCollections\Models\Media;
class TestResult extends Model implements HasMedia
{
use HasMediaTrait;
use HasMediaTrait,HasFactory;
public $fillable = ['result', 'verified', 'test_type_id', 'user_id', 'device_id', 'cycle_number', 'date'];
+2 -1
View File
@@ -2,6 +2,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -9,7 +10,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
class TestType extends Model
{
use SoftDeletes;
use SoftDeletes,HasFactory;
public $fillable = ['name', 'unique_code', 'user_id', 'bar_code', 'device_label'];
+2 -1
View File
@@ -2,6 +2,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;
@@ -9,7 +10,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
class Transfer extends Model
{
use SoftDeletes;
use SoftDeletes,HasFactory;
public $fillable = ['user_id', 'to_date', 'from_date', 'status', 'user_transfer_id'];
+2
View File
@@ -2,11 +2,13 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Uploadable extends Model
{
use HasFactory;
protected $fillable = [
'uploadable_id', 'uploadable_type', 'gallery_id', 'image_role', 'batch_id'
+2 -1
View File
@@ -2,6 +2,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
@@ -11,7 +12,7 @@ use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use Notifiable, HasApiTokens, HasRoles;
use Notifiable, HasApiTokens, HasRoles, HasFactory;
protected $fillable = [
'name', 'email', 'cell_number', 'password', 'status', 'medical_center_id', 'address',
+4 -6
View File
@@ -47,12 +47,10 @@
"autoload": {
"psr-4": {
"App\\": "app/",
"Packages\\": "packages/"
},
"classmap": [
"database/seeds",
"database/factories"
]
"Packages\\": "packages/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
"autoload-dev": {
"psr-4": {
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace Database\Factories;
use App\Models\Cycle;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<Cycle>
*/
class CycleFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'unique_id' => $this->faker->uuid,
'date' => $this->faker->date,
'sterilizer_id' => $this->faker->uuid,
'cycle_number' => $this->faker->numerify('Cycle-####'),
'note' => $this->faker->word,
'verified' => $this->faker->randomElement(['Verified', 'NotVerified']),
'user_id' => \App\Models\User::factory(),
];
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace Database\Factories;
use App\Models\Label;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model>
*/
class CycleLabelFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'label_id' => \App\Models\Label::factory(),
'cycle_id' => \App\Models\Cycle::factory(),
'count' => $this->faker->numberBetween(1, 10),
];
}
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Gallery>
*/
class GalleryFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'user_id' => \App\Models\User::factory(),
'path' => $this->faker->imageUrl(),
];
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Input>
*/
class InputFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => $this->faker->word,
'type' => $this->faker->randomElement(['Text', 'Form', 'Checkbox', 'Select']),
'test_type_id' => \App\Models\TestType::factory(),
'parent_id' => null,
'size' => $this->faker->word,
'value' => $this->faker->word,
'require_scanner' => $this->faker->boolean,
];
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\InputValue>
*/
class InputValueFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'value' => $this->faker->word,
'option_id' => \App\Models\Option::factory(),
'input_id' => \App\Models\Input::factory(),
'test_result_id' => \App\Models\TestResult::factory(),
];
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Item>
*/
class ItemFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'package_id' => \App\Models\Package::factory(),
'name' => $this->faker->word,
'size' => $this->faker->word,
'unique_id' => $this->faker->uuid,
'specific' => $this->faker->word,
'note' => $this->faker->word,
'user_id' => \App\Models\User::factory(),
'udi' => $this->faker->uuid,
'repair' => $this->faker->boolean,
'creator_id' => \App\Models\User::factory(),
'status' => $this->faker->randomElement(['approved', 'rejected', 'suspended']),
];
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Label>
*/
class LabelFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => $this->faker->word,
'sterile_date' => $this->faker->date,
'expire_date' => $this->faker->date,
'sterilizer_id' => $this->faker->uuid,
'cycle_number' => $this->faker->numerify('Cycle-####'),
'lot_number' => $this->faker->word,
'department' => $this->faker->word,
'note' => $this->faker->word,
'user_id' => \App\Models\User::factory(),
'package_id' => \App\Models\Package::factory(),
];
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace Database\Factories;
use App\Models\MedicalCenter;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends Factory<MedicalCenter>
*/
class MedicalCenterFactory extends Factory
{
protected $model = MedicalCenter::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => $this->faker->company,
'address' => $this->faker->address,
'phone_number' => $this->faker->phoneNumber,
'city_id' => 1,
];
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Message>
*/
class MessageFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'title' => $this->faker->word,
'text' => $this->faker->word,
'sender_user_id' => User::factory(),
'recipient_user_id' => User::factory(),
'status' => $this->faker->randomElement(['Read', 'UnRead']),
];
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace Database\Factories;
use App\Models\Input;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Option>
*/
class OptionFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'title' => $this->faker->word,
'input_id' => Input::factory(),
'created_at' => now(),
'updated_at' => now(),
];
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model>
*/
class PackageFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => $this->faker->word,
'note' => $this->faker->optional()->word,
'user_id' => User::factory(), // ایجاد کاربر به طور خودکار
'bar_code' => $this->faker->optional()->word,
'qr_code' => $this->faker->optional()->word,
'creator_id' => User::factory(), // ایجاد کاربر دیگر به عنوان creator
'status' => $this->faker->randomElement(['approved', 'rejected', 'suspended']),
'created_at' => now(),
'updated_at' => now(),
];
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace Database\Factories;
use App\Models\TestType;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\TestResult>
*/
class TestResultFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'info' => $this->faker->name,
'cycle_number' => $this->faker->numberBetween(1000, 9999),
'date' => $this->faker->date(),
'result' => $this->faker->randomElement(['Accept', 'Reject']),
'description' => $this->faker->word,
'verified' => $this->faker->randomElement(['Verified', 'NotVerified', 'None']),
'device_id' => $this->faker->uuid(),
'user_id' => User::factory(),
'test_type_id' => TestType::factory(),
];
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\TestType>
*/
class TestTypeFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => Str::random(20),
'unique_code' => Str::random(20),
'bar_code' => $this->faker->word,
'user_id' => User::factory(),
'device_label' => $this->faker->randomElement([
'AutoclaveID', 'WasherID', 'SterilizerID', 'WasherMachineID',
'SealMachineID', 'PatientID', 'Set/PackID', 'MDID', 'ORID',
'InstrumentID', 'ID', 'PersonalID'
]),
];
}
}
+81
View File
@@ -0,0 +1,81 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\User;
class TransferFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
// Get a random model for polymorphic relationship
$transferableModels = [
\App\Models\Package::class,
\App\Models\Item::class,
];
$transferableType = $this->faker->randomElement($transferableModels);
$transferable = $transferableType::factory()->create();
// Generate from_date and ensure to_date is after from_date
$fromDate = $this->faker->dateTimeBetween('-1 year', 'now');
$toDate = $this->faker->dateTimeBetween($fromDate, '+1 year');
return [
'transferable_type' => $transferableType,
'transferable_id' => $transferable->id,
'user_id' => User::factory(),
'from_date' => $fromDate,
'to_date' => $toDate,
'status' => $this->faker->randomElement(['approved', 'rejected', 'suspended']),
'user_transfer_id' => User::factory(),
'deleted_at' => null,
];
}
/**
* Indicate that the transfer is approved.
*/
public function approved(): static
{
return $this->state(fn (array $attributes) => [
'status' => 'approved',
]);
}
/**
* Indicate that the transfer is rejected.
*/
public function rejected(): static
{
return $this->state(fn (array $attributes) => [
'status' => 'rejected',
]);
}
/**
* Indicate that the transfer is suspended.
*/
public function suspended(): static
{
return $this->state(fn (array $attributes) => [
'status' => 'suspended',
]);
}
/**
* Indicate that the transfer is soft deleted.
*/
public function deleted(): static
{
return $this->state(fn (array $attributes) => [
'deleted_at' => now(),
]);
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace Database\Factories;
use App\Models\Gallery;
use App\Models\Uploadable;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model>
*/
class UploadableFactory extends Factory
{
protected $model = Uploadable::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'uploadable_id' => $this->faker->numberBetween(1, 100), // شناسه‌ی تصادفی برای uploadable
'uploadable_type' => $this->faker->word, // نوع تصادفی uploadable
'gallery_id' => Gallery::factory(), // شناسه‌ی تصادفی برای gallery (در صورتی که گالری‌ها وجود داشته باشند)
'image_role' => $this->faker->word, // نقش تصادفی برای تصویر (مثل 'thumbnail' یا 'featured')
];
}
}
+11 -2
View File
@@ -2,6 +2,7 @@
namespace Database\Factories;
use App\Models\MedicalCenter;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
@@ -17,9 +18,17 @@ class UserFactory extends Factory
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'country_code' => '0098',
'cell_number' => $this->faker->phoneNumber,
'gender' => $this->faker->randomElement(['Male', 'FeMale']),
'verified' => $this->faker->randomElement(['Verified', 'NotVerified']),
'status' => $this->faker->randomElement(['Active', 'Suspended']),
'medical_center_id' => MedicalCenter::factory(), // ایجاد مرکز پزشکی به طور خودکار
'password' => bcrypt('password'), // رمز عبور پیش‌فرض
'address' => $this->faker->optional()->address,
'remember_token' => Str::random(10),
'created_at' => now(),
'updated_at' => now(),
];
}
}
@@ -1,5 +1,8 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
@@ -11,6 +14,8 @@ class DatabaseSeeder extends Seeder
*/
public function run()
{
// $this->call(UserTableSeeder::class);
$this->call([
TableSeeder::class
]);
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class TableSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run(): void
{
\App\Models\MedicalCenter::factory(10)->create();
\App\Models\User::factory(10)->create();
\App\Models\TestType::factory(10)->create();
\App\Models\TestResult::factory(10)->create();
\App\Models\Input::factory(10)->create();
\App\Models\Option::factory(10)->create();
\App\Models\InputValue::factory(10)->create();
\App\Models\Gallery::factory(10)->create();
\App\Models\Uploadable::factory(10)->create();
\App\Models\Package::factory(10)->create();
\App\Models\Item::factory(10)->create();
\App\Models\Label::factory(10)->create();
\App\Models\Cycle::factory(10)->create();
\App\Models\Message::factory(10)->create();
\App\Models\Transfer::factory(10)->create();
}
}