This commit is contained in:
Adrian Hopek
2022-05-09 15:03:09 +02:00
parent 47ad45cb73
commit 37ce3262ac
25 changed files with 1843 additions and 806 deletions

View File

@@ -0,0 +1,90 @@
<?php
declare(strict_types=1);
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Collection;
use Toby\Eloquent\Models\Resume;
use Toby\Eloquent\Models\Technology;
class ResumeFactory extends Factory
{
protected $model = Resume::class;
public function definition(): array
{
return [
"name" => fn(array $attr) => empty($attr["user_id"]) ? $this->faker->name : null,
"description" => $this->faker->boolean(30) ? $this->faker->sentence : null,
"education" => $this->generateEducation(),
"languages" => $this->generateLanguages(),
"technologies" => $this->generateTechnologies(),
"projects" => $this->generateProjects(),
];
}
protected function generateEducation(): array
{
$items = [];
for ($i = 0; $i < $this->faker->numberBetween(1, 2); $i++) {
$items[] = [
"school" => $this->faker->sentence,
"degree" => $this->faker->sentence,
"fieldOfStudy" => $this->faker->sentence,
"startDate" => $this->faker->date,
"endDate" => $this->faker->date,
];
}
return $items;
}
protected function generateLanguages(): array
{
$languages = new Collection(["english", "polish", "germany"]);
$number = $this->faker->numberBetween(1, $languages->count());
return $languages->random($number)
->map(fn(string $language): array => [
"language" => $language,
"level" => $this->faker->numberBetween(1, 6),
])
->all();
}
protected function generateTechnologies(): array
{
$technologies = Technology::all();
$number = $this->faker->numberBetween(2, $technologies->count());
return $technologies->random($number)
->map(fn(string $technology): array => [
"technology" => $technology,
"level" => $this->faker->numberBetween(1, 5),
])
->all();
}
protected function generateProjects(): array
{
$items = [];
$technologies = Technology::all();
for ($i = 0; $i < $this->faker->numberBetween(1, 3); $i++) {
$number = $this->faker->numberBetween(2, $technologies->count());
$items[] = [
"description" => $this->faker->text,
"technologies" => $technologies->random($number)->all(),
"startDate" => $this->faker->date,
"endDate" => $this->faker->date,
"tasks" => $this->faker->text,
];
}
return $items;
}
}

View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Toby\Eloquent\Models\Technology;
class TechnologyFactory extends Factory
{
protected $model = Technology::class;
public function definition(): array
{
return [
"name" => $this->faker->unique()->word,
];
}
}

View File

@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Toby\Eloquent\Models\User;
return new class() extends Migration {
public function up(): void
{
Schema::create("resumes", function (Blueprint $table): void {
$table->id();
$table->foreignIdFor(User::class)->nullable()->constrained()->cascadeOnDelete();
$table->string("name")->nullable();
$table->string("description")->nullable();
$table->json("education");
$table->json("languages");
$table->json("technologies");
$table->json("projects");
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists("resumes");
}
};

View File

@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class() extends Migration {
public function up(): void
{
Schema::create("technologies", function (Blueprint $table): void {
$table->id();
$table->string("name")->unique();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists("technologies");
}
};

View File

@@ -20,6 +20,8 @@ use Toby\Domain\States\VacationRequest\WaitingForAdministrative;
use Toby\Domain\States\VacationRequest\WaitingForTechnical;
use Toby\Domain\VacationDaysCalculator;
use Toby\Eloquent\Models\Key;
use Toby\Eloquent\Models\Resume;
use Toby\Eloquent\Models\Technology;
use Toby\Eloquent\Models\User;
use Toby\Eloquent\Models\VacationLimit;
use Toby\Eloquent\Models\VacationRequest;
@@ -335,5 +337,35 @@ class DemoSeeder extends Seeder
->for($user)
->create();
}
Technology::factory()->createMany([
["name" => "Laravel"],
["name" => "Symfony"],
["name" => "CakePHP"],
["name" => "PHP"],
["name" => "Livewire"],
["name" => "Inertia"],
["name" => "Vue"],
["name" => "Javascript"],
["name" => "Redis"],
["name" => "AWS"],
["name" => "Tailwind"],
["name" => "CSS"],
["name" => "PHPUnit"],
["name" => "Cypress"],
["name" => "Behat"],
["name" => "Pest"],
["name" => "Golang"],
]);
foreach ($users as $user) {
Resume::factory()
->for($user)
->create();
}
Resume::factory()
->count(3)
->create();
}
}