From 49e2610eb311c9d63780e16b1d6d070764308dd1 Mon Sep 17 00:00:00 2001 From: Victor Alicaya Date: Tue, 7 Mar 2023 17:50:12 +0800 Subject: [PATCH] Create Models --- app/Http/Controllers/ProjectController.php | 65 ++++++++++++++++++ app/Http/Controllers/TaskController.php | 64 ++++++++++++++++++ app/Http/Controllers/UserController.php | 66 +++++++++++++++++++ app/Http/Requests/ProjectRequest.php | 30 +++++++++ app/Http/Requests/TaskRequest.php | 34 ++++++++++ app/Http/Requests/UserRequest.php | 31 +++++++++ app/Http/Resources/ProjectResource.php | 19 ++++++ app/Http/Resources/TaskResource.php | 28 ++++++++ app/Http/Resources/UserResource.php | 19 ++++++ app/Models/Project.php | 19 ++++++ app/Models/Task.php | 27 ++++++++ app/Models/User.php | 15 ++++- .../2014_10_12_000000_create_users_table.php | 4 +- ...023_03_07_090624_create_projects_table.php | 32 +++++++++ .../2023_03_07_091018_create_tasks_table.php | 38 +++++++++++ 15 files changed, 487 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/ProjectController.php create mode 100644 app/Http/Controllers/TaskController.php create mode 100644 app/Http/Controllers/UserController.php create mode 100644 app/Http/Requests/ProjectRequest.php create mode 100644 app/Http/Requests/TaskRequest.php create mode 100644 app/Http/Requests/UserRequest.php create mode 100644 app/Http/Resources/ProjectResource.php create mode 100644 app/Http/Resources/TaskResource.php create mode 100644 app/Http/Resources/UserResource.php create mode 100644 app/Models/Project.php create mode 100644 app/Models/Task.php create mode 100644 database/migrations/2023_03_07_090624_create_projects_table.php create mode 100644 database/migrations/2023_03_07_091018_create_tasks_table.php diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php new file mode 100644 index 0000000..38dd384 --- /dev/null +++ b/app/Http/Controllers/ProjectController.php @@ -0,0 +1,65 @@ + 'required|string|unique:projects,name' + ]; + } +} diff --git a/app/Http/Requests/TaskRequest.php b/app/Http/Requests/TaskRequest.php new file mode 100644 index 0000000..18e946a --- /dev/null +++ b/app/Http/Requests/TaskRequest.php @@ -0,0 +1,34 @@ + 'string|required', + 'description' => 'string', + 'status' => 'string|required', + 'project_id' => 'required|exists:projects,id', + 'user_id' => 'required|exists:users,id' + ]; + } +} diff --git a/app/Http/Requests/UserRequest.php b/app/Http/Requests/UserRequest.php new file mode 100644 index 0000000..2d80a61 --- /dev/null +++ b/app/Http/Requests/UserRequest.php @@ -0,0 +1,31 @@ + 'string|required|unique:users,username', + 'password' => 'string|required' + ]; + } +} diff --git a/app/Http/Resources/ProjectResource.php b/app/Http/Resources/ProjectResource.php new file mode 100644 index 0000000..2e2a8a4 --- /dev/null +++ b/app/Http/Resources/ProjectResource.php @@ -0,0 +1,19 @@ + $this->id, + 'title' => $this->title, + 'description' => $this->description, + 'status' => $this->status, + 'project' => $this->project, + 'user' => $this->user, + 'created_at' => $this->created_at, + 'updated_at' => $this->updated_at + ]; + } +} diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php new file mode 100644 index 0000000..7a74549 --- /dev/null +++ b/app/Http/Resources/UserResource.php @@ -0,0 +1,19 @@ +hasMany(Task::class); + } +} diff --git a/app/Models/Task.php b/app/Models/Task.php new file mode 100644 index 0000000..81e5ba5 --- /dev/null +++ b/app/Models/Task.php @@ -0,0 +1,27 @@ +belongsTo(User::class); + } + + public function project() { + return $this->belongsTo(Project::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 8996368..20ad16e 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -19,7 +20,7 @@ class User extends Authenticatable */ protected $fillable = [ 'name', - 'email', + 'username', 'password', ]; @@ -41,4 +42,16 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', ]; + + public function tasks() { + return $this->hasMany(Task::class); + } + + public static function boot() { + parent::boot(); + + self::addGlobalScope(function(Builder $builder) { + $builder->where('user_id', 1); + }); + } } diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 621a24e..8e45e20 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -15,9 +15,7 @@ public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); - $table->string('name'); - $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); + $table->string('username')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); diff --git a/database/migrations/2023_03_07_090624_create_projects_table.php b/database/migrations/2023_03_07_090624_create_projects_table.php new file mode 100644 index 0000000..950d255 --- /dev/null +++ b/database/migrations/2023_03_07_090624_create_projects_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name')->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('projects'); + } +} diff --git a/database/migrations/2023_03_07_091018_create_tasks_table.php b/database/migrations/2023_03_07_091018_create_tasks_table.php new file mode 100644 index 0000000..a5623ac --- /dev/null +++ b/database/migrations/2023_03_07_091018_create_tasks_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('title'); + $table->string('description'); + $table->string('status'); + $table->unsignedBigInteger('project_id'); + $table->unsignedBigInteger('user_id'); + $table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade'); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('tasks'); + } +}