Migrations, Seeders, Models, Resources for User, Client, Project, Team, Mastertask, Subtask, Timeblock, Timesheet, Attachment

This commit is contained in:
StudioTem committed 2023-01-24 17:38:24 +01:00
1 parent 30ae7dab84
commit 8d88c0c4e6
35 files changed
+910 -14

No files matched your search

@@ -0,0 +1,32 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Attachment>
*/
class AttachmentFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$extension = fake()->fileExtension();
return [
'original_name' => fake()->words(2, true) . '.' . $extension,
'disk_name' => Str::random(15) . '.' . $extension,
'path' => fake()->imageUrl(),
'extension' => $extension,
'content_type' => fake()->mimeType(),
'file_size' => fake()->numberBetween(1323,992385),
];
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Client>
*/
class ClientFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$company = fake()->company();
return [
'name' => $company,
'code' => strtoupper(substr($company, 0, 5)),
];
}
}
@@ -0,0 +1,32 @@
<?php
namespace Database\Factories;
use App\Models\Client;
use App\Models\Project;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\MasterTask>
*/
class MasterTaskFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$project = Project::factory()->create();
return [
'project_id' => $project->id,
'title' => 'Master task ' . fake()->words(2, true),
'estimated_time' => fake()->numberBetween(20,100),
'tracked_time' => fake()->numberBetween(4,20),
'deadline' => fake()->date(),
'is_finished' => 0,
];
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace Database\Factories;
use App\Models\Client;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Project>
*/
class ProjectFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$name = fake()->country();
$client = Client::factory('App\Models\Client')->create();
return [
'client_id' => $client->id,
'name' => 'Project ' . $name,
'code' => strtoupper(substr($name, 0, 3)) . '-2023-' . rand(1, 9),
];
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace Database\Factories;
use App\Models\Client;
use App\Models\MasterTask;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\SubTask>
*/
class SubTaskFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
// $user = User::factory()->create();
// $mastertask = MasterTask::factory()->hasAttachments(random_int(0 , 3))->create();
return [
'user_id' => 1,
// 'master_task_id' => $mastertask->id,
'estimated_time' => fake()->numberBetween(1,16),
'tracked_time' => fake()->numberBetween(4,20),
'is_finished' => 0,
];
}
}
+1 -1
View File
@@ -18,7 +18,7 @@ class TeamFactory extends Factory
public function definition()
{
return [
'name' => fake()->company(),
'name' => 'Team ' . fake()->colorName(),
];
}
}
@@ -0,0 +1,28 @@
<?php
namespace Database\Factories;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Timeblock>
*/
class TimeblockFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$start = fake()->dateTimeBetween('now', '+3 weeks');
$end = Carbon::instance($start)->addHours(fake()->numberBetween(3, 5));
return [
'start' => $start,
'end' => fake()->dateTimeBetween($start, $end),
];
}
}
@@ -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\Timesheet>
*/
class TimesheetFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
$user = User::factory()->create();
return [
'user_id' => $user->id,
'time' => fake()->numberBetween(1,8),
'synced_to_karat' => null,
];
}
}
+9 -6
View File
@@ -17,15 +17,18 @@ class UserFactory extends Factory
*/
public function definition()
{
$firstname = fake()->firstname();
$lastname = fake()->lastname();
return [
'email' => fake()->unique()->safeEmail(),
'email' => strtolower($firstname . '.' . $lastname . '@jandl.sk'),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
'firstname' => fake()->firstname(),
'lastname' => fake()->lastname(),
'code' => strtoupper(Str::random(3)),
'work_start' => '9.0',
'work_end' => '17.0',
'firstname' => $firstname,
'lastname' => $lastname,
'code' => strtoupper(substr($firstname, 0, 1) . substr($lastname, 0, 2)),
'work_start' => rand(7, 10) . '.0',
'work_end' => rand(15, 18) . '.0',
];
}
@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('clients', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('code');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('clients');
}
};
@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('projects', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(\App\Models\Client::class);
$table->string('name');
$table->string('code');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('projects');
}
};
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('clients', function (Blueprint $table) {
$table->unique('code');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
};
@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('projects', function (Blueprint $table) {
$table->unique('code');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
};
@@ -0,0 +1,40 @@
<?php
use App\Models\Project;
use App\Models\Team;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('master_tasks', function (Blueprint $table) {
$table->id();
$table->foreignIdFor( Project::class);
$table->foreignIdFor( Team::class)->nullable();
$table->string('title');
$table->float('estimated_time')->comment('tento field sa updatuje automaticky na zaklade subtaskov');
$table->float('tracked_time')->default(0)->comment('tento field sa updatuje automaticky na zaklade vykazov subtaskov');
$table->timestamp('deadline');
$table->boolean('is_finished')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('master_task');
}
};
@@ -0,0 +1,40 @@
<?php
use App\Models\MasterTask;
use App\Models\Project;
use App\Models\Team;
use App\Models\User;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sub_tasks', function (Blueprint $table) {
$table->id();
$table->foreignIdFor( MasterTask::class);
$table->foreignIdFor( User::class);
$table->float('estimated_time');
$table->float('tracked_time')->default(0)->comment('tento field sa updatuje automaticky na zaklade vykazov');
$table->boolean('is_finished')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('sub_tasks');
}
};
@@ -0,0 +1,39 @@
<?php
use App\Models\MasterTask;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('attachments', function (Blueprint $table) {
$table->id();
$table->foreignIdFor( MasterTask::class);
$table->string('original_name');
$table->string('disk_name');
$table->string('path');
$table->string('extension');
$table->string('content_type');
$table->bigInteger('file_size');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('attachments');
}
};
@@ -0,0 +1,37 @@
<?php
use App\Models\SubTask;
use App\Models\User;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('timesheets', function (Blueprint $table) {
$table->id();
$table->foreignIdFor( SubTask::class);
$table->foreignIdFor( User::class);
$table->float('time', 4);
$table->timestamp( 'synced_to_karat')->nullable()->default(null);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('timesheets');
}
};
@@ -0,0 +1,35 @@
<?php
use App\Models\SubTask;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('timeblocks', function (Blueprint $table) {
$table->id();
$table->foreignIdFor( SubTask::class);
$table->timestamp( 'start');
$table->timestamp( 'end');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('timeblocks');
}
};
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace Database\Seeders;
use App\Models\Client;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ClientSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Client::factory()
->count(10)
->hasProjects(3)
->create();
}
}
+23 -5
View File
@@ -3,6 +3,10 @@
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use App\Models\MasterTask;
use App\Models\Project;
use App\Models\Team;
use App\Models\User;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
@@ -14,11 +18,25 @@ class DatabaseSeeder extends Seeder
*/
public function run()
{
// \App\Models\User::factory(10)->create();
for ($i=0; $i < 5; $i++) {
Team::factory()
->hasUsers(random_int(2, 5))
->create();
}
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
for ($i=0; $i < 3; $i++) {
MasterTask::factory()
->hasAttachments(random_int(0, 3))
->hasSubTasks(random_int(3, 5))
->create();
}
// for ($i=0; $i < 3; $i++) {
// User::factory()
// ->hasSubTasks(3)
//// ->hasAttachments(random_int(0, 3))
//// ->hasSubTasks(random_int(3, 5))
// ->create();
// }
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace Database\Seeders;
use App\Models\MasterTask;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class MasterTaskSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
MasterTask::factory()
->hasAttachments(2)
->hasSubTasks(2)
->create();
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace Database\Seeders;
use App\Models\MasterTask;
use App\Models\Project;
use App\Models\Team;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ProjectSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
for ($i=0; $i < 20; $i++) {
Project::factory()
->hasMastertasks(2)
->create();
}
}
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace Database\Seeders;
use App\Models\SubTask;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class SubTaskSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
SubTask::factory()
->count(10)
->hasTimeblocks(2)
->hasTimesheets(2)
->create();
}
}