refactor: create models, factories, and seeders for Company, Internship, InternshipStatus, and StudentData

This commit is contained in:
2025-10-21 12:25:54 +02:00
parent b4f98718e6
commit e3c7bd3a5a
18 changed files with 579 additions and 3 deletions

View File

@@ -0,0 +1,27 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Company>
*/
class CompanyFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->company(),
'address' => fake()->address(),
'ico' => fake()->numberBetween(111111, 999999),
'contact' => 0,
'hiring' => fake()->boolean(),
];
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Internship>
*/
class InternshipFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'user_id' => 0,
'company_id' => 0,
'start' => fake()->dateTime(),
'end' => fake()->dateTime("+30 days"),
'year_of_study' => fake()->randomElement([1, 2, 3, 4, 5]),
'semester' => fake()->randomElement(["WINTER", "SUMMER"]),
'position_description' => fake()->jobTitle(),
'agreement' => null,
];
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\InternshipStatus>
*/
class InternshipStatusFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'internship_id' => 0,
'status' => fake()->randomElement(["SUBMITTED", "CONFIRMED", "DENIED", "DEFENDED", "NOT_DEFENDED"]),
'changed' => fake()->dateTime(),
'note' => null,
'modified_by' => 0,
];
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\StudentData>
*/
class StudentDataFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'user_id' => 0,
'address' => fake()->address(),
'personal_email' => fake()->safeEmail(),
'study_field' => fake()->randomElement(["AI22m", "AI22b"]),
];
}
}

View File

@@ -21,8 +21,6 @@ return new class extends Migration
$table->enum("semester", ["WINTER", "SUMMER"])->nullable(false);
$table->string("position_description")->nullable(false);
$table->binary("agreement")->nullable(true);
$table->foreignId("personel_id")->nullable(false)->constrained("users")->onDelete("cascade");
$table->foreignId("status_id")->nullable(false)->constrained("internship_statuses")->onDelete("cascade");
$table->timestamps();
});
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class CompanySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -2,6 +2,10 @@
namespace Database\Seeders;
use App\Models\Company;
use App\Models\Internship;
use App\Models\InternshipStatus;
use App\Models\StudentData;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
@@ -14,7 +18,7 @@ class DatabaseSeeder extends Seeder
public function run(): void
{
// create a default admin user
User::factory()->create([
$admin = User::factory()->create([
'name' => 'Test User',
'first_name' => 'Test',
'last_name' => 'User',
@@ -22,5 +26,39 @@ class DatabaseSeeder extends Seeder
'phone' => '+421907444555',
'role' => 'ADMIN',
]);
// create employers and companies
User::factory(10)
->create([
'role' => 'EMPLOYER'
])
->each(function ($user) {
Company::factory()->create([
'contact' => $user->id
]);
});
// create students
User::factory(10)
->create([
'role' => 'STUDENT'
])
->each(function ($user) use ($admin) {
StudentData::factory()->create([
'user_id' => $user->id
]);
$internship = Internship::factory()->create([
'user_id' => $user->id,
'company_id' => Company::inRandomOrder()->value('id'),
]);
InternshipStatus::factory()->create([
'internship_id' => $internship->id,
'status' => "SUBMITTED",
'note' => 'made by seeder',
'modified_by' => $admin->id,
]);
});
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class InternshipSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class InternshipStatusSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class StudentDataSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}