From 16d954bdee71690bc64789b9ef33915c3f538510 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Mon, 1 Aug 2022 16:00:17 +0100 Subject: [PATCH 01/13] feat: add changes made to files, routes and migrations --- .idea/.gitignore | 8 + ..._01_103245_create_task_checklist_items.php | 25 +++ ...ate_structure_for_task_checklist_items.php | 15 ++ ...7_20_104852_create_task_comments_table.php | 30 +++ ...001_create_structure_for_task_comments.php | 13 ++ routes/api.php | 3 + routes/checklistsItems.php | 14 ++ routes/comments.php | 16 ++ src/AuthServiceProvider.php | 3 + src/EnumServiceProvider.php | 2 + src/Enums/Statuses.php | 18 ++ src/Forms/Builders/Task.php | 4 +- src/Forms/Templates/task.json | 51 ++++- .../Tasks/ChecklistItems/Destroy.php | 18 ++ .../Tasks/ChecklistItems/Store.php | 21 ++ .../Tasks/ChecklistItems/Update.php | 17 ++ .../Controllers/Tasks/Comments/Destroy.php | 21 ++ src/Http/Controllers/Tasks/Comments/Index.php | 22 +++ src/Http/Controllers/Tasks/Comments/Store.php | 21 ++ .../Controllers/Tasks/Comments/Update.php | 25 +++ src/Http/Controllers/Tasks/Options.php | 14 ++ src/Http/Controllers/Tasks/Show.php | 18 ++ .../Comments/ValidateCommentFetch.php | 21 ++ .../Comments/ValidateCommentStore.php | 18 ++ .../Comments/ValidateCommentUpdate.php | 21 ++ src/Http/Requests/ValidateChecklistItem.php | 30 +++ src/Http/Requests/ValidateTask.php | 6 +- src/Http/Resources/Comment.php | 32 +++ src/Http/Resources/Task.php | 34 +++- src/Models/ChecklistItem.php | 30 +++ src/Models/Task.php | 35 +++- src/Models/TaskComment.php | 17 ++ src/Observers/ChecklistItem.php | 25 +++ src/Policies/TaskComment.php | 43 ++++ src/Tables/Builders/Task.php | 6 +- src/Tables/Templates/tasks.json | 185 ++++++++++-------- src/Upgrades/Permissions.php | 16 ++ src/Upgrades/Statuses.php | 42 ++++ 38 files changed, 832 insertions(+), 108 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 database/migrations/2022_07_01_103245_create_task_checklist_items.php create mode 100644 database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php create mode 100644 database/migrations/2022_07_20_104852_create_task_comments_table.php create mode 100644 database/migrations/2022_07_20_160001_create_structure_for_task_comments.php create mode 100644 routes/checklistsItems.php create mode 100644 routes/comments.php create mode 100644 src/Enums/Statuses.php create mode 100644 src/Http/Controllers/Tasks/ChecklistItems/Destroy.php create mode 100644 src/Http/Controllers/Tasks/ChecklistItems/Store.php create mode 100644 src/Http/Controllers/Tasks/ChecklistItems/Update.php create mode 100644 src/Http/Controllers/Tasks/Comments/Destroy.php create mode 100644 src/Http/Controllers/Tasks/Comments/Index.php create mode 100644 src/Http/Controllers/Tasks/Comments/Store.php create mode 100644 src/Http/Controllers/Tasks/Comments/Update.php create mode 100644 src/Http/Controllers/Tasks/Options.php create mode 100644 src/Http/Controllers/Tasks/Show.php create mode 100644 src/Http/Requests/Comments/ValidateCommentFetch.php create mode 100644 src/Http/Requests/Comments/ValidateCommentStore.php create mode 100644 src/Http/Requests/Comments/ValidateCommentUpdate.php create mode 100644 src/Http/Requests/ValidateChecklistItem.php create mode 100644 src/Http/Resources/Comment.php create mode 100644 src/Models/ChecklistItem.php create mode 100644 src/Models/TaskComment.php create mode 100644 src/Observers/ChecklistItem.php create mode 100644 src/Policies/TaskComment.php create mode 100644 src/Upgrades/Permissions.php create mode 100644 src/Upgrades/Statuses.php diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/database/migrations/2022_07_01_103245_create_task_checklist_items.php b/database/migrations/2022_07_01_103245_create_task_checklist_items.php new file mode 100644 index 0000000..1517817 --- /dev/null +++ b/database/migrations/2022_07_01_103245_create_task_checklist_items.php @@ -0,0 +1,25 @@ +id(); + $table->foreignId('task_id')->constrained('tasks'); + $table->string('name'); + $table->unsignedInteger('order_index')->nullable(); + $table->boolean('is_completed'); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('task_checklist_items'); + } +}; diff --git a/database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php b/database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php new file mode 100644 index 0000000..46ab0d9 --- /dev/null +++ b/database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php @@ -0,0 +1,15 @@ + 'tasks.checklistItems.store', 'description' => 'Store a new check list', 'is_default' => false], + ['name' => 'tasks.checklistItems.update', 'description' => 'Update check list', 'is_default' => false], + ['name' => 'tasks.checklistItems.destroy', 'description' => 'Delete check list', 'is_default' => false], + ]; + + protected ?string $parentMenu = ''; +}; + diff --git a/database/migrations/2022_07_20_104852_create_task_comments_table.php b/database/migrations/2022_07_20_104852_create_task_comments_table.php new file mode 100644 index 0000000..0390fc2 --- /dev/null +++ b/database/migrations/2022_07_20_104852_create_task_comments_table.php @@ -0,0 +1,30 @@ +increments('id'); + $table->foreignId('task_id')->constrained(); + $table->text('body'); + + $table->integer('created_by')->unsigned()->nullable()->index(); + $table->foreign('created_by')->references('id')->on('users'); + + $table->integer('updated_by')->unsigned()->nullable(); + $table->foreign('updated_by')->references('id')->on('users'); + + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('task_comments'); + } +}; diff --git a/database/migrations/2022_07_20_160001_create_structure_for_task_comments.php b/database/migrations/2022_07_20_160001_create_structure_for_task_comments.php new file mode 100644 index 0000000..9591874 --- /dev/null +++ b/database/migrations/2022_07_20_160001_create_structure_for_task_comments.php @@ -0,0 +1,13 @@ + 'tasks.comments.index', 'description' => 'Show index for comments', 'is_default' => false], + ['name' => 'tasks.comments.store', 'description' => 'Store a new comment', 'is_default' => false], + ['name' => 'tasks.comments.update', 'description' => 'Update comment', 'is_default' => false], + ['name' => 'tasks.comments.destroy', 'description' => 'Delete comment', 'is_default' => false], + ]; +}; diff --git a/routes/api.php b/routes/api.php index 3c6f7c2..8308e51 100644 --- a/routes/api.php +++ b/routes/api.php @@ -33,4 +33,7 @@ Route::get('', Index::class)->name('index'); Route::get('users', Users::class)->name('users'); + + require __DIR__.'/checklistsItems.php'; + require __DIR__.'/comments.php'; }); diff --git a/routes/checklistsItems.php b/routes/checklistsItems.php new file mode 100644 index 0000000..467792d --- /dev/null +++ b/routes/checklistsItems.php @@ -0,0 +1,14 @@ +as('checklistItems.') + ->group(function () { + Route::post('', Store::class)->name('store'); + Route::patch('{checklistItem}', Update::class)->name('update'); + Route::delete('{checklistItem}', Destroy::class)->name('destroy'); + }); diff --git a/routes/comments.php b/routes/comments.php new file mode 100644 index 0000000..a1725c7 --- /dev/null +++ b/routes/comments.php @@ -0,0 +1,16 @@ +as('comments.') + ->group(function () { + Route::get('', Index::class)->name('index'); + Route::post('', Store::class)->name('store'); + Route::patch('{comment}', Update::class)->name('update'); + Route::delete('{comment}', Destroy::class)->name('destroy'); + }); diff --git a/src/AuthServiceProvider.php b/src/AuthServiceProvider.php index ec6d91f..3f5a24c 100644 --- a/src/AuthServiceProvider.php +++ b/src/AuthServiceProvider.php @@ -4,12 +4,15 @@ use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use LaravelEnso\Tasks\Models\Task; +use LaravelEnso\Tasks\Models\TaskComment; use LaravelEnso\Tasks\Policies\Task as Policy; +use LaravelEnso\Tasks\Policies\TaskComment as TaskCommentPolicy; class AuthServiceProvider extends ServiceProvider { protected $policies = [ Task::class => Policy::class, + TaskComment::class => TaskCommentPolicy::class, ]; public function boot() diff --git a/src/EnumServiceProvider.php b/src/EnumServiceProvider.php index b644633..1fb90f9 100644 --- a/src/EnumServiceProvider.php +++ b/src/EnumServiceProvider.php @@ -4,10 +4,12 @@ use LaravelEnso\Enums\EnumServiceProvider as ServiceProvider; use LaravelEnso\Tasks\Enums\Flags; +use LaravelEnso\Tasks\Enums\Statuses; class EnumServiceProvider extends ServiceProvider { public $register = [ 'flags' => Flags::class, + 'Statuses' => Statuses::class, ]; } diff --git a/src/Enums/Statuses.php b/src/Enums/Statuses.php new file mode 100644 index 0000000..9d02c33 --- /dev/null +++ b/src/Enums/Statuses.php @@ -0,0 +1,18 @@ + 'New', + self::InProgress => 'In Progress', + self::Finished => 'Finished', + ]; +} diff --git a/src/Forms/Builders/Task.php b/src/Forms/Builders/Task.php index 3fed158..61f27e7 100644 --- a/src/Forms/Builders/Task.php +++ b/src/Forms/Builders/Task.php @@ -4,6 +4,7 @@ use Illuminate\Support\Facades\Auth; use LaravelEnso\Forms\Services\Form; +use LaravelEnso\Tasks\Enums\Statuses; use LaravelEnso\Tasks\Models\Task as Model; class Task @@ -21,8 +22,9 @@ public function __construct() public function create() { - return $this->form->hide('completed') + return $this->form->hide('status') ->value('allocated_to', Auth::id()) + ->value('status', Statuses::New) ->create(); } diff --git a/src/Forms/Templates/task.json b/src/Forms/Templates/task.json index f0f91a4..7d7f90d 100644 --- a/src/Forms/Templates/task.json +++ b/src/Forms/Templates/task.json @@ -22,11 +22,21 @@ "type": "input", "content": "text" } + }, + { + "label": "Status", + "name": "status", + "value": null, + "meta": { + "type": "select", + "options": "LaravelEnso\\Tasks\\Enums\\Statuses", + "placeholder": "Choose Task Status" + } } ] }, { - "columns": 3, + "columns": 2, "fields": [ { "label": "Allocated To", @@ -48,10 +58,43 @@ "format": "Y-m-d H:i:s", "time": true } + } + ] + }, + { + "columns": 2, + "fields": [ + { + "label": "From", + "name": "from", + "value": "", + "meta": { + "type": "datepicker", + "altFormat": "m-d-Y H:i", + "format": "Y-m-d H:i:s", + "time": true + } }, { - "label": "Completed", - "name": "completed", + "label": "To", + "name": "to", + "value": "", + "meta": { + "type": "datepicker", + "altFormat": "m-d-Y H:i", + "format": "Y-m-d H:i:s", + "time": true + } + } + ] + }, + { + "columns": "custom", + "fields": [ + { + "column": 3, + "label": "Muted", + "name": "muted", "value": false, "meta": { "type": "input", @@ -74,4 +117,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/Http/Controllers/Tasks/ChecklistItems/Destroy.php b/src/Http/Controllers/Tasks/ChecklistItems/Destroy.php new file mode 100644 index 0000000..9e325fd --- /dev/null +++ b/src/Http/Controllers/Tasks/ChecklistItems/Destroy.php @@ -0,0 +1,18 @@ +delete(); + + return [ + 'message' => __('The item was successfully deleted'), + ]; + } +} diff --git a/src/Http/Controllers/Tasks/ChecklistItems/Store.php b/src/Http/Controllers/Tasks/ChecklistItems/Store.php new file mode 100644 index 0000000..91c9ca1 --- /dev/null +++ b/src/Http/Controllers/Tasks/ChecklistItems/Store.php @@ -0,0 +1,21 @@ +fill($request->validated() + ['is_completed' => false])->save(); + + return [ + 'message' => __('The item was successfully created'), + 'param' => ['checkList' => $checklistItem->id], + 'data' => $checklistItem, + ]; + } +} diff --git a/src/Http/Controllers/Tasks/ChecklistItems/Update.php b/src/Http/Controllers/Tasks/ChecklistItems/Update.php new file mode 100644 index 0000000..9826d08 --- /dev/null +++ b/src/Http/Controllers/Tasks/ChecklistItems/Update.php @@ -0,0 +1,17 @@ +update($request->validated()); + + return ['message' => __('The item was successfully updated')]; + } +} diff --git a/src/Http/Controllers/Tasks/Comments/Destroy.php b/src/Http/Controllers/Tasks/Comments/Destroy.php new file mode 100644 index 0000000..053c86c --- /dev/null +++ b/src/Http/Controllers/Tasks/Comments/Destroy.php @@ -0,0 +1,21 @@ +authorize('destroy', $comment); + + $comment->delete(); + + return ['count' => $comment->count()]; + } +} diff --git a/src/Http/Controllers/Tasks/Comments/Index.php b/src/Http/Controllers/Tasks/Comments/Index.php new file mode 100644 index 0000000..32bb9f9 --- /dev/null +++ b/src/Http/Controllers/Tasks/Comments/Index.php @@ -0,0 +1,22 @@ +whereTaskId($request->validated()) + ->with('createdBy.person', 'createdBy.avatar', 'updatedBy') + ->get(); + + return Resource::collection($comments)->additional([ + 'humanReadableDates' => Config::get('enso.comments.humanReadableDates'), + ]); + } +} diff --git a/src/Http/Controllers/Tasks/Comments/Store.php b/src/Http/Controllers/Tasks/Comments/Store.php new file mode 100644 index 0000000..f8ebe95 --- /dev/null +++ b/src/Http/Controllers/Tasks/Comments/Store.php @@ -0,0 +1,21 @@ +fill($request->validatedExcept('path')); + tap($comment)->save(); + + return new Resource($comment->load([ + 'createdBy.person', 'createdBy.avatar', + ])); + } +} diff --git a/src/Http/Controllers/Tasks/Comments/Update.php b/src/Http/Controllers/Tasks/Comments/Update.php new file mode 100644 index 0000000..f76a2d2 --- /dev/null +++ b/src/Http/Controllers/Tasks/Comments/Update.php @@ -0,0 +1,25 @@ +authorize('update', $comment); + tap($comment)->update($request->only('body')); + + return new Resource($comment->load([ + 'createdBy.person', 'createdBy.avatar', 'updatedBy', + ])); + } +} diff --git a/src/Http/Controllers/Tasks/Options.php b/src/Http/Controllers/Tasks/Options.php new file mode 100644 index 0000000..3f8c6f4 --- /dev/null +++ b/src/Http/Controllers/Tasks/Options.php @@ -0,0 +1,14 @@ +load('checklistItems', + 'allocatedTo.person', 'allocatedTo.avatar', 'createdBy.avatar', 'createdBy.person' + ); + return ['task' => new TaskResource($task)]; + } +} diff --git a/src/Http/Requests/Comments/ValidateCommentFetch.php b/src/Http/Requests/Comments/ValidateCommentFetch.php new file mode 100644 index 0000000..cc36239 --- /dev/null +++ b/src/Http/Requests/Comments/ValidateCommentFetch.php @@ -0,0 +1,21 @@ + 'required', + ]; + } +} diff --git a/src/Http/Requests/Comments/ValidateCommentStore.php b/src/Http/Requests/Comments/ValidateCommentStore.php new file mode 100644 index 0000000..471b846 --- /dev/null +++ b/src/Http/Requests/Comments/ValidateCommentStore.php @@ -0,0 +1,18 @@ + 'required', + 'path' => 'required', + ]; + } +} diff --git a/src/Http/Requests/Comments/ValidateCommentUpdate.php b/src/Http/Requests/Comments/ValidateCommentUpdate.php new file mode 100644 index 0000000..19824ad --- /dev/null +++ b/src/Http/Requests/Comments/ValidateCommentUpdate.php @@ -0,0 +1,21 @@ + 'required', + 'path' => 'required', + ]; + } +} diff --git a/src/Http/Requests/ValidateChecklistItem.php b/src/Http/Requests/ValidateChecklistItem.php new file mode 100644 index 0000000..2f1bb95 --- /dev/null +++ b/src/Http/Requests/ValidateChecklistItem.php @@ -0,0 +1,30 @@ + "{$this->requiredOrFilled()}|string|max:255", + 'task_id' => "{$this->requiredOrFilled()}|integer|exists:tasks,id", + 'order_index' => 'nullable|integer', + 'is_completed' => 'nullable|boolean', + ]; + } + + private function requiredOrFilled() + { + return $this->method() === 'POST' + ? 'required' + : 'filled'; + } +} diff --git a/src/Http/Requests/ValidateTask.php b/src/Http/Requests/ValidateTask.php index bd9054c..add610b 100644 --- a/src/Http/Requests/ValidateTask.php +++ b/src/Http/Requests/ValidateTask.php @@ -5,6 +5,7 @@ use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Carbon; use LaravelEnso\Tasks\Enums\Flags; +use LaravelEnso\Tasks\Enums\Statuses; use LaravelEnso\Tasks\Models\Task; class ValidateTask extends FormRequest @@ -22,7 +23,10 @@ public function rules() 'flag' => 'nullable|in:'.Flags::keys()->implode(','), 'reminder' => 'nullable|date', 'allocated_to' => "{$this->requiredOrFilled()}|exists:users,id", - 'completed' => "{$this->requiredOrFilled()}|boolean", + 'status' => "{$this->requiredOrFilled()}|in:".Statuses::keys()->implode(','), + 'from' => "{$this->requiredOrFilled()}|date", + 'to' => "{$this->requiredOrFilled()}|date", + 'muted' => 'nullable|boolean', ]; } diff --git a/src/Http/Resources/Comment.php b/src/Http/Resources/Comment.php new file mode 100644 index 0000000..7d3a3d0 --- /dev/null +++ b/src/Http/Resources/Comment.php @@ -0,0 +1,32 @@ + $this->id, + 'body' => $this->body, + 'owner' => new User($this->whenLoaded('createdBy')), + 'isEditable' => $this->isEditable($request), + 'isDeletable' => $this->isDeletable($request), + 'createdAt' => $this->created_at->toDatetimeString(), + 'updatedAt' => $this->updated_at->toDatetimeString(), + ]; + } + + public function isEditable($request) + { + return $request->user()->can('update', $this->resource); + } + + public function isDeletable($request) + { + return $request->user()->can('destroy', $this->resource); + } +} diff --git a/src/Http/Resources/Task.php b/src/Http/Resources/Task.php index 36e556a..97cae41 100644 --- a/src/Http/Resources/Task.php +++ b/src/Http/Resources/Task.php @@ -3,18 +3,40 @@ namespace LaravelEnso\Tasks\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; +use Illuminate\Support\Carbon; class Task extends JsonResource { public function toArray($request) { return [ - 'id' => $this->id, - 'name' => $this->name, - 'description' => $this->description, - 'flag' => $this->flag, - 'overdue' => $this->overdue(), - 'reminder' => $this->reminder, + 'id' => $this->id, + 'name' => $this->name, + 'status' => $this->status, + 'description' => $this->description, + 'flag' => $this->flag, + 'overdue' => $this->overdue(), + 'reminder' => $this->reminder, + 'from' => Carbon::parse($this->from)->toFormattedDateString(), + 'to' => Carbon::parse($this->to)->toFormattedDateString(), + 'checklist' => $this->checklistItems, + 'completedChecklist' => $this->completedChecklist($this->checklistItems), + 'allocatedTo' => $this->allocatedTo, + 'createdBy' => $this->createdBy->person->name, + 'updatedAt' => $this->updated_at->diffForHumans(), + 'muted' => $this->muted, + ]; + } + + private function completedChecklist($checklists): array + { + $completed = $checklists->filter(function ($checklist) { + return $checklist->is_completed; + })->count(); + + return [ + 'percentageValue' => $checklists->count() > 0 ? round(($completed / $checklists->count()) * 100) : 0, + 'percentageString' => $completed.'/'.count($checklists), ]; } } diff --git a/src/Models/ChecklistItem.php b/src/Models/ChecklistItem.php new file mode 100644 index 0000000..8b00dfe --- /dev/null +++ b/src/Models/ChecklistItem.php @@ -0,0 +1,30 @@ + 'boolean', + ]; + + public function task(): BelongsTo + { + return $this->belongsTo(Task::class); + } + + public function scopeCompleted($query) + { + return $query->where('is_completed', true); + } + +} diff --git a/src/Models/Task.php b/src/Models/Task.php index add6dc4..b66631a 100644 --- a/src/Models/Task.php +++ b/src/Models/Task.php @@ -12,6 +12,7 @@ use LaravelEnso\TrackWho\Traits\CreatedBy; use LaravelEnso\TrackWho\Traits\UpdatedBy; use LaravelEnso\Users\Models\User; +use LaravelEnso\Tasks\Enums\Statuses; class Task extends Model { @@ -22,9 +23,9 @@ class Task extends Model protected $guarded = ['id']; - protected $dates = ['reminder', 'reminded_at']; + protected $dates = ['reminder', 'reminded_at', 'from', 'to']; - protected $casts = ['completed' => 'boolean']; + protected $casts = ['muted' => 'boolean']; public function allocatedTo(): Relation { @@ -54,12 +55,33 @@ public function scopeVisible($query) public function scopePending($query) { - return $query->whereCompleted(false); + return $query->whereStatus(Statuses::InProgress); } public function scopeCompleted($query) { - return $query->whereCompleted(true); + return $query->whereStatus(Statuses::Finished); + } + + public function overdue(): bool + { + return $this->status !== Statuses::Finished + && $this->reminder?->lessThan(Carbon::now()); + } + + public function updateStatus(): void + { + $completedCheckList = $this->checklistItems()->completed()->count(); + $totalCheckList = $this->checklistItems()->count(); + + $status = match($completedCheckList) + { + $totalCheckList => Statuses::Finished, + 0 => Statuses::New, + default => Statuses::InProgress, + }; + + $this->update(['status' => $status]); } public function setReminderAttribute($dateTime) @@ -79,9 +101,4 @@ public function remind() $this->update(['reminded_at' => Carbon::now()]); } - public function overdue(): bool - { - return !$this->completed - && $this->reminder?->lessThan(Carbon::now()); - } } diff --git a/src/Models/TaskComment.php b/src/Models/TaskComment.php new file mode 100644 index 0000000..301b092 --- /dev/null +++ b/src/Models/TaskComment.php @@ -0,0 +1,17 @@ +task->updateStatus(); + } + + public function updated(CheckListModel $checklist) + { + if ($checklist->isDirty('is_completed')) { + $checklist->task->updateStatus(); + } + } + + public function deleted(CheckListModel $checklist) + { + $checklist->task->updateStatus(); + } +} diff --git a/src/Policies/TaskComment.php b/src/Policies/TaskComment.php new file mode 100644 index 0000000..94d0092 --- /dev/null +++ b/src/Policies/TaskComment.php @@ -0,0 +1,43 @@ +isAdmin() || $user->isSupervisor()) { + return true; + } + } + + public function update(User $user, Model $comment) + { + return $this->ownsComment($user, $comment) + && $this->isRecent($comment); + } + + public function destroy(User $user, Model $comment) + { + return $this->ownsComment($user, $comment) + && $this->isRecent($comment); + } + + private function ownsComment(User $user, Model $comment) + { + return $user->id === (int) $comment->created_by; + } + + private function isRecent(Model $comment) + { + return $comment->created_at->diffInSeconds(Carbon::now()) + < config('enso.comments.editableTimeLimit'); + } +} diff --git a/src/Tables/Builders/Task.php b/src/Tables/Builders/Task.php index 4c61c90..9c441cd 100644 --- a/src/Tables/Builders/Task.php +++ b/src/Tables/Builders/Task.php @@ -10,6 +10,7 @@ use LaravelEnso\Tables\Contracts\ConditionalActions; use LaravelEnso\Tables\Contracts\CustomFilter; use LaravelEnso\Tables\Contracts\Table; +use LaravelEnso\Tasks\Enums\Statuses; use LaravelEnso\Tasks\Models\Task as Model; class Task implements Table, AuthenticatesOnExport, CustomFilter, ConditionalActions @@ -19,13 +20,14 @@ class Task implements Table, AuthenticatesOnExport, CustomFilter, ConditionalAct public function query(): Builder { $now = Carbon::now(); - $overdue = "completed = true and reminder >= '{$now}'"; + $finished = Statuses::Finished; + $overdue = "status={$finished} and reminder >= '{$now}'"; return Model::visible() ->with('createdBy.avatar', 'createdBy.person') ->with('allocatedTo.avatar', 'allocatedTo.person') ->selectRaw(" - tasks.id, tasks.name, tasks.description, tasks.flag, tasks.completed, + tasks.id, tasks.status, tasks.name, tasks.description, tasks.flag, tasks.allocated_to, tasks.reminder, tasks.reminder as rawReminder, created_by, created_at, {$overdue} as overdue "); diff --git a/src/Tables/Templates/tasks.json b/src/Tables/Templates/tasks.json index a0ee75f..c7ff00e 100644 --- a/src/Tables/Templates/tasks.json +++ b/src/Tables/Templates/tasks.json @@ -5,92 +5,107 @@ "buttons": [ "excel", "create", + "show", "edit", "destroy" ], - "strip": ["allocated_to", "created_by"], - "columns": [{ - "label": "Name", - "name": "name", - "data": "tasks.name", - "meta": [ - "slot", - "searchable" - ] - }, { - "label": "Flag", - "name": "flag", - "data": "tasks.flag", - "meta": [ - "sortable", - "slot" - ], - "enum": "LaravelEnso\\Tasks\\Enums\\Flags" - }, { - "label": "Reminder", - "name": "reminder", - "data": "tasks.reminder", - "dateFormat": "Y-m-d H:i:s", - "meta": [ - "sortable", - "slot", - "datetime" - ] - }, { - "label": "Allocated To", - "name": "allocatedTo", - "data": "tasks.allocatedTo", - "resource": "LaravelEnso\\Users\\Http\\Resources\\User", - "meta": [ - "slot", - "notExportable" - ] - }, { - "label": "Completed", - "name": "completed", - "data": "tasks.completed", - "meta": [ - "sortable", - "slot" - ] - }, { - "label": "Created At", - "name": "created_at", - "data": "tasks.created_at", - "meta": [ - "sortable", - "date" - ] - }, { - "label": "By", - "name": "createdBy", - "data": "tasks.createdBy", - "resource": "LaravelEnso\\Users\\Http\\Resources\\User", - "meta": [ - "slot", - "notExportable" - ] - }, { - "label": "Raw Reminder", - "name": "rawReminder", - "data": "tasks.reminder", - "meta": [ - "rogue", - "notExportable" - ] - }, { - "label": "Allocated", - "name": "allocatedTo.person.name", - "data": "tasks.allocatedTo.person", - "meta": [ - "rogue" - ] - }, { - "label": "Creator", - "name": "createdBy.person.name", - "data": "tasks.createdBy.person", - "meta": [ - "rogue" - ] - }] + "strip": [ + "allocated_to", + "created_by" + ], + "columns": [ + { + "label": "Name", + "name": "name", + "data": "tasks.name", + "meta": [ + "slot", + "searchable" + ] + }, + { + "label": "Status", + "name": "status", + "data": "tasks.status", + "enum": "App\\Enums\\TaskStatuses", + "meta": [ + "slot" + ] + }, + { + "label": "Flag", + "name": "flag", + "data": "tasks.flag", + "meta": [ + "sortable", + "slot" + ], + "enum": "LaravelEnso\\Tasks\\Enums\\Flags" + }, + { + "label": "Reminder", + "name": "reminder", + "data": "tasks.reminder", + "dateFormat": "Y-m-d H:i:s", + "meta": [ + "sortable", + "slot", + "datetime" + ] + }, + { + "label": "Allocated To", + "name": "allocatedTo", + "data": "tasks.allocatedTo", + "resource": "LaravelEnso\\Users\\Http\\Resources\\User", + "meta": [ + "slot", + "notExportable" + ] + }, + { + "label": "Created At", + "name": "created_at", + "data": "tasks.created_at", + "meta": [ + "sortable", + "date" + ] + }, + { + "label": "By", + "name": "createdBy", + "data": "tasks.createdBy", + "resource": "LaravelEnso\\Users\\Http\\Resources\\User", + "meta": [ + "slot", + "notExportable" + ] + }, + { + "label": "Raw Reminder", + "name": "rawReminder", + "data": "tasks.reminder", + "meta": [ + "rogue", + "notExportable" + ] + }, + { + "label": "Allocated", + "name": "allocatedTo.person.name", + "data": "tasks.allocatedTo.person", + "meta": [ + "rogue" + ] + }, + { + "label": "Creator", + "name": "createdBy.person.name", + "data": "tasks.createdBy.person", + "meta": [ + "rogue" + ] + } + ] } diff --git a/src/Upgrades/Permissions.php b/src/Upgrades/Permissions.php new file mode 100644 index 0000000..e0138c4 --- /dev/null +++ b/src/Upgrades/Permissions.php @@ -0,0 +1,16 @@ + 'tasks.show', 'description' => 'Display task information', 'is_default' => true], + ['name' => 'tasks.options', 'description' => 'Get tasks options for select', 'is_default' => false] + ]; +} diff --git a/src/Upgrades/Statuses.php b/src/Upgrades/Statuses.php new file mode 100644 index 0000000..7c85352 --- /dev/null +++ b/src/Upgrades/Statuses.php @@ -0,0 +1,42 @@ +smallInteger('status')->nullable()->after('reminder'); + }); + } + + public function migrateData(): void + { + Task::whereCompleted(false) + ->update(['status' => StatusesEnum::New]); + Task::whereCompleted(true) + ->update(['status' => StatusesEnum::Finished]); + } + + public function migratePostDataMigration(): void + { + Schema::table('tasks', function ($table) { + $table->smallInteger('status')->nullable('false')->change(); + $table->dropColumn('completed'); + }); + } +} From 589925ba9562d30c5ba175b6f58997bf109a9b0c Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Mon, 1 Aug 2022 16:04:53 +0100 Subject: [PATCH 02/13] whip: add .gitignore --- .gitignore | 25 +++++++++++++++++++++++++ .idea/.gitignore | 8 -------- 2 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 .gitignore delete mode 100644 .idea/.gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f358a94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# local +.DS_STORE +.DS_Store +._* +Homestead.json +Homestead.yaml +/public/* +!/public/robots.txt +!/public/index.php +!/public/.htaccess +!/public/vendor +/resources/views/index.blade.php +/node_modules +/vendor +/packages +.vagrant + +# code editors +/.idea +/.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml From 28de41f8515b1d771703c8372d4719612a5b2e16 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Mon, 1 Aug 2022 16:08:37 +0100 Subject: [PATCH 03/13] feat: add table columns for tasks Statuses.php upgrade --- src/Upgrades/Permissions.php | 2 +- src/Upgrades/Statuses.php | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Upgrades/Permissions.php b/src/Upgrades/Permissions.php index e0138c4..8641095 100644 --- a/src/Upgrades/Permissions.php +++ b/src/Upgrades/Permissions.php @@ -1,6 +1,6 @@ smallInteger('status')->nullable()->after('reminder'); + $table->dateTime('from')->nullable()->after('status'); + $table->dateTime('to')->nullable()->after('status'); + $table->boolean('muted')->default(false)->after('to'); }); } From a09f02b57f9c483ca0fa8db9d38d8af2984494b1 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Tue, 2 Aug 2022 09:22:02 +0100 Subject: [PATCH 04/13] feat: add Upgrades for (From, Muted and To) columns --- .../2020_10_27_102330_create_tasks_table.php | 6 +++-- src/Upgrades/From.php | 25 +++++++++++++++++++ src/Upgrades/Muted.php | 25 +++++++++++++++++++ src/Upgrades/To.php | 25 +++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 src/Upgrades/From.php create mode 100644 src/Upgrades/Muted.php create mode 100644 src/Upgrades/To.php diff --git a/database/migrations/2020_10_27_102330_create_tasks_table.php b/database/migrations/2020_10_27_102330_create_tasks_table.php index 075a2e8..b198723 100644 --- a/database/migrations/2020_10_27_102330_create_tasks_table.php +++ b/database/migrations/2020_10_27_102330_create_tasks_table.php @@ -16,9 +16,11 @@ public function up() $table->tinyInteger('flag')->nullable()->index(); - $table->boolean('completed')->index(); - $table->dateTime('reminder')->nullable(); + $table->smallInteger('status')->nullable(); + $table->dateTime('from')->nullable(); + $table->dateTime('to')->nullable(); + $table->boolean('muted')->default(false); $table->unsignedInteger('allocated_to')->nullable()->index(); $table->foreign('allocated_to')->references('id')->on('users'); diff --git a/src/Upgrades/From.php b/src/Upgrades/From.php new file mode 100644 index 0000000..b7bb1b9 --- /dev/null +++ b/src/Upgrades/From.php @@ -0,0 +1,25 @@ +dateTime('from')->nullable()->after('reminder'); + }); + } + +} diff --git a/src/Upgrades/Muted.php b/src/Upgrades/Muted.php new file mode 100644 index 0000000..3a0e66a --- /dev/null +++ b/src/Upgrades/Muted.php @@ -0,0 +1,25 @@ +boolean('muted')->default(false)->after('reminder'); + }); + } + +} diff --git a/src/Upgrades/To.php b/src/Upgrades/To.php new file mode 100644 index 0000000..d21a942 --- /dev/null +++ b/src/Upgrades/To.php @@ -0,0 +1,25 @@ +dateTime('to')->nullable()->after('reminder'); + }); + } + +} From b4ed32c40142c6f83ba80659b696d31a7b732d04 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Tue, 2 Aug 2022 09:33:22 +0100 Subject: [PATCH 05/13] feat: add completed column for existing db --- database/migrations/2020_10_27_102330_create_tasks_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2020_10_27_102330_create_tasks_table.php b/database/migrations/2020_10_27_102330_create_tasks_table.php index b198723..488ecb0 100644 --- a/database/migrations/2020_10_27_102330_create_tasks_table.php +++ b/database/migrations/2020_10_27_102330_create_tasks_table.php @@ -15,7 +15,7 @@ public function up() $table->text('description'); $table->tinyInteger('flag')->nullable()->index(); - + $table->boolean('completed')->index(); $table->dateTime('reminder')->nullable(); $table->smallInteger('status')->nullable(); $table->dateTime('from')->nullable(); From 0c4517358dc8883969e1f70750ac69d84ba01f08 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Fri, 5 Aug 2022 11:14:22 +0100 Subject: [PATCH 06/13] chore: removed unwanted fields from Statuses.php --- src/Upgrades/Statuses.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Upgrades/Statuses.php b/src/Upgrades/Statuses.php index eea36a4..7c85352 100644 --- a/src/Upgrades/Statuses.php +++ b/src/Upgrades/Statuses.php @@ -21,9 +21,6 @@ public function migrateTable(): void { Schema::table('tasks', function ($table) { $table->smallInteger('status')->nullable()->after('reminder'); - $table->dateTime('from')->nullable()->after('status'); - $table->dateTime('to')->nullable()->after('status'); - $table->boolean('muted')->default(false)->after('to'); }); } From 3d6bb12e3bb8b8c2f626c73c086645ec16cab921 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Fri, 5 Aug 2022 11:25:42 +0100 Subject: [PATCH 07/13] chore: updated observer in AppServiceProvider.php --- src/AppServiceProvider.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/AppServiceProvider.php b/src/AppServiceProvider.php index 5372ad4..9f18c86 100644 --- a/src/AppServiceProvider.php +++ b/src/AppServiceProvider.php @@ -7,6 +7,8 @@ use LaravelEnso\DynamicMethods\Services\Methods; use LaravelEnso\Tasks\Commands\SendTaskReminders; use LaravelEnso\Tasks\DynamicRelations\Tasks; +use LaravelEnso\Tasks\Models\ChecklistItem; +use LaravelEnso\Tasks\Observers\ChecklistItem as ChecklistItemObserver; use LaravelEnso\Tasks\Models\Task as Model; use LaravelEnso\Tasks\Observers\Task as Observer; use LaravelEnso\Users\Models\User; @@ -20,6 +22,7 @@ public function boot() ->command() ->relations() ->observers(); + ChecklistItem::observe(ChecklistItemObserver::class); } private function load(): self From 00a4fb5955705ffd92f0735ed9c449845b5c6032 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Fri, 5 Aug 2022 12:13:35 +0100 Subject: [PATCH 08/13] chore: refactor and updated files --- src/AuthServiceProvider.php | 6 +++--- .../Controllers/Tasks/Comments/Destroy.php | 4 ++-- src/Http/Controllers/Tasks/Comments/Index.php | 4 ++-- src/Http/Controllers/Tasks/Comments/Store.php | 4 ++-- .../Controllers/Tasks/Comments/Update.php | 4 ++-- src/Http/Resources/ChecklistItem.php | 21 +++++++++++++++++++ src/Http/Resources/Task.php | 16 +++++--------- src/Models/{TaskComment.php => Comment.php} | 2 +- src/Policies/{TaskComment.php => Comment.php} | 2 +- 9 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 src/Http/Resources/ChecklistItem.php rename src/Models/{TaskComment.php => Comment.php} (92%) rename src/Policies/{TaskComment.php => Comment.php} (98%) diff --git a/src/AuthServiceProvider.php b/src/AuthServiceProvider.php index 3f5a24c..b220d09 100644 --- a/src/AuthServiceProvider.php +++ b/src/AuthServiceProvider.php @@ -4,15 +4,15 @@ use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use LaravelEnso\Tasks\Models\Task; -use LaravelEnso\Tasks\Models\TaskComment; +use LaravelEnso\Tasks\Models\Comment; use LaravelEnso\Tasks\Policies\Task as Policy; -use LaravelEnso\Tasks\Policies\TaskComment as TaskCommentPolicy; +use LaravelEnso\Tasks\Policies\Comment as TaskCommentPolicy; class AuthServiceProvider extends ServiceProvider { protected $policies = [ Task::class => Policy::class, - TaskComment::class => TaskCommentPolicy::class, + Comment::class => TaskCommentPolicy::class, ]; public function boot() diff --git a/src/Http/Controllers/Tasks/Comments/Destroy.php b/src/Http/Controllers/Tasks/Comments/Destroy.php index 053c86c..42aee75 100644 --- a/src/Http/Controllers/Tasks/Comments/Destroy.php +++ b/src/Http/Controllers/Tasks/Comments/Destroy.php @@ -4,13 +4,13 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Routing\Controller; -use LaravelEnso\Tasks\Models\TaskComment; +use LaravelEnso\Tasks\Models\Comment; class Destroy extends Controller { use AuthorizesRequests; - public function __invoke(TaskComment $comment) + public function __invoke(Comment $comment) { $this->authorize('destroy', $comment); diff --git a/src/Http/Controllers/Tasks/Comments/Index.php b/src/Http/Controllers/Tasks/Comments/Index.php index 32bb9f9..826d348 100644 --- a/src/Http/Controllers/Tasks/Comments/Index.php +++ b/src/Http/Controllers/Tasks/Comments/Index.php @@ -5,13 +5,13 @@ use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Config; use LaravelEnso\Tasks\Http\Resources\Comment as Resource; -use LaravelEnso\Tasks\Models\TaskComment; +use LaravelEnso\Tasks\Models\Comment; class Index extends Controller { public function __invoke(ValidateCommentFetch $request) { - $comments = TaskComment::latest()->whereTaskId($request->validated()) + $comments = Comment::latest()->whereTaskId($request->validated()) ->with('createdBy.person', 'createdBy.avatar', 'updatedBy') ->get(); diff --git a/src/Http/Controllers/Tasks/Comments/Store.php b/src/Http/Controllers/Tasks/Comments/Store.php index f8ebe95..8114d2e 100644 --- a/src/Http/Controllers/Tasks/Comments/Store.php +++ b/src/Http/Controllers/Tasks/Comments/Store.php @@ -5,11 +5,11 @@ use Illuminate\Routing\Controller; use LaravelEnso\Tasks\Http\Requests\Task\Comments\ValidateCommentStore; use LaravelEnso\Tasks\Http\Resources\Comment as Resource; -use LaravelEnso\Tasks\Models\TaskComment; +use LaravelEnso\Tasks\Models\Comment; class Store extends Controller { - public function __invoke(ValidateCommentStore $request, TaskComment $comment) + public function __invoke(ValidateCommentStore $request, Comment $comment) { $comment->fill($request->validatedExcept('path')); tap($comment)->save(); diff --git a/src/Http/Controllers/Tasks/Comments/Update.php b/src/Http/Controllers/Tasks/Comments/Update.php index f76a2d2..863c9d7 100644 --- a/src/Http/Controllers/Tasks/Comments/Update.php +++ b/src/Http/Controllers/Tasks/Comments/Update.php @@ -6,14 +6,14 @@ use Illuminate\Routing\Controller; use LaravelEnso\Tasks\Http\Requests\Task\Comments\ValidateCommentUpdate; use LaravelEnso\Tasks\Http\Resources\Comment as Resource; -use LaravelEnso\Tasks\Models\TaskComment; +use LaravelEnso\Tasks\Models\Comment; class Update extends Controller { use AuthorizesRequests; - public function __invoke(ValidateCommentUpdate $request, TaskComment $comment) + public function __invoke(ValidateCommentUpdate $request, Comment $comment) { $this->authorize('update', $comment); tap($comment)->update($request->only('body')); diff --git a/src/Http/Resources/ChecklistItem.php b/src/Http/Resources/ChecklistItem.php new file mode 100644 index 0000000..af13f5a --- /dev/null +++ b/src/Http/Resources/ChecklistItem.php @@ -0,0 +1,21 @@ + $this->id, + 'name' => $this->name, + 'task_id' => $this->task_id, + 'is_completed' => $this->is_completed, + 'orderIndex' => $this->order_index, + 'createdAt' => $this->created_at->toDatetimeString(), + ]; + } +} diff --git a/src/Http/Resources/Task.php b/src/Http/Resources/Task.php index 97cae41..6cab4a0 100644 --- a/src/Http/Resources/Task.php +++ b/src/Http/Resources/Task.php @@ -4,6 +4,7 @@ use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Carbon; +use LaravelEnso\Tasks\Http\Resources\ChecklistItem; class Task extends JsonResource { @@ -19,8 +20,8 @@ public function toArray($request) 'reminder' => $this->reminder, 'from' => Carbon::parse($this->from)->toFormattedDateString(), 'to' => Carbon::parse($this->to)->toFormattedDateString(), - 'checklist' => $this->checklistItems, - 'completedChecklist' => $this->completedChecklist($this->checklistItems), + 'taskChecklistItems' => ChecklistItem::collection($this->whenLoaded('checklistItems')), + 'completedChecklist' => $this->completedChecklist(), 'allocatedTo' => $this->allocatedTo, 'createdBy' => $this->createdBy->person->name, 'updatedAt' => $this->updated_at->diffForHumans(), @@ -28,15 +29,8 @@ public function toArray($request) ]; } - private function completedChecklist($checklists): array + private function completedChecklist(): string { - $completed = $checklists->filter(function ($checklist) { - return $checklist->is_completed; - })->count(); - - return [ - 'percentageValue' => $checklists->count() > 0 ? round(($completed / $checklists->count()) * 100) : 0, - 'percentageString' => $completed.'/'.count($checklists), - ]; + return "{$this->checklistItems()->completed()->count()}/{$this->checklistItems->count()}"; } } diff --git a/src/Models/TaskComment.php b/src/Models/Comment.php similarity index 92% rename from src/Models/TaskComment.php rename to src/Models/Comment.php index 301b092..5ff8c6f 100644 --- a/src/Models/TaskComment.php +++ b/src/Models/Comment.php @@ -8,7 +8,7 @@ use LaravelEnso\TrackWho\Traits\CreatedBy; use LaravelEnso\TrackWho\Traits\UpdatedBy; -class TaskComment extends Model +class Comment extends Model { use CreatedBy, HasFactory, UpdatedBy, UpdatesOnTouch; diff --git a/src/Policies/TaskComment.php b/src/Policies/Comment.php similarity index 98% rename from src/Policies/TaskComment.php rename to src/Policies/Comment.php index 94d0092..56ebc08 100644 --- a/src/Policies/TaskComment.php +++ b/src/Policies/Comment.php @@ -7,7 +7,7 @@ use LaravelEnso\Comments\Models\Comment as Model; use LaravelEnso\Users\Models\User; -class TaskComment +class Comment { use HandlesAuthorization; From 260ae1bc4f87e9a59cf26f6c6ab5220a851f48b6 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Mon, 8 Aug 2022 07:53:57 +0100 Subject: [PATCH 09/13] chore: refactor and updated files --- .gitignore | 25 ------------------- .../Tasks/ChecklistItems/Store.php | 2 +- 2 files changed, 1 insertion(+), 26 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f358a94..0000000 --- a/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# local -.DS_STORE -.DS_Store -._* -Homestead.json -Homestead.yaml -/public/* -!/public/robots.txt -!/public/index.php -!/public/.htaccess -!/public/vendor -/resources/views/index.blade.php -/node_modules -/vendor -/packages -.vagrant - -# code editors -/.idea -/.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw* diff --git a/src/Http/Controllers/Tasks/ChecklistItems/Store.php b/src/Http/Controllers/Tasks/ChecklistItems/Store.php index 91c9ca1..f2c33f1 100644 --- a/src/Http/Controllers/Tasks/ChecklistItems/Store.php +++ b/src/Http/Controllers/Tasks/ChecklistItems/Store.php @@ -14,7 +14,7 @@ public function __invoke(ValidateChecklistItem $request, ChecklistItem $checklis return [ 'message' => __('The item was successfully created'), - 'param' => ['checkList' => $checklistItem->id], + 'param' => ['checklist' => $checklistItem->id], 'data' => $checklistItem, ]; } From fcbdef0112b81df5f37318c6fc7190c53a9e3644 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Wed, 10 Aug 2022 16:25:13 +0100 Subject: [PATCH 10/13] fix: fix issues flagged by ci/cd pipeline --- .idea/modules.xml | 8 + .idea/php.xml | 6 + .idea/tasks.iml | 13 ++ .idea/vcs.xml | 6 + .idea/workspace.xml | 175 ++++++++++++++++++ .../2020_10_27_102330_create_tasks_table.php | 3 +- ...0_27_102337_create_structure_for_tasks.php | 3 +- ..._01_103245_create_task_checklist_items.php | 3 +- ...ate_structure_for_task_checklist_items.php | 3 +- ...7_20_104852_create_task_comments_table.php | 3 +- ...001_create_structure_for_task_comments.php | 3 +- routes/checklistsItems.php | 8 +- routes/comments.php | 2 +- src/AppServiceProvider.php | 2 +- src/AuthServiceProvider.php | 8 +- src/EnumServiceProvider.php | 4 +- src/Enums/Statuses.php | 6 +- .../Tasks/ChecklistItems/Store.php | 4 +- .../Controllers/Tasks/Comments/Update.php | 1 - src/Http/Controllers/Tasks/Show.php | 11 +- .../Comments/ValidateCommentFetch.php | 1 - src/Http/Requests/ValidateChecklistItem.php | 8 +- src/Http/Requests/ValidateTask.php | 18 +- src/Http/Resources/ChecklistItem.php | 13 +- src/Http/Resources/Comment.php | 14 +- src/Http/Resources/Task.php | 30 +-- src/Models/ChecklistItem.php | 3 +- src/Models/Comment.php | 6 +- src/Models/Task.php | 10 +- src/Upgrades/From.php | 3 - src/Upgrades/Muted.php | 3 - src/Upgrades/Permissions.php | 2 +- src/Upgrades/Statuses.php | 4 +- src/Upgrades/To.php | 3 - 34 files changed, 292 insertions(+), 98 deletions(-) create mode 100644 .idea/modules.xml create mode 100644 .idea/php.xml create mode 100644 .idea/tasks.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..14a22b9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..31b8a3a --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/tasks.iml b/.idea/tasks.iml new file mode 100644 index 0000000..6476e52 --- /dev/null +++ b/.idea/tasks.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..b4b4970 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $PROJECT_DIR$/composer.json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1659365760066 + + + 1659366293626 + + + 1659366517638 + + + 1659429202811 + + + 1659694462634 + + + 1659695143008 + + + 1659698015574 + + + 1659941637908 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/database/migrations/2020_10_27_102330_create_tasks_table.php b/database/migrations/2020_10_27_102330_create_tasks_table.php index 488ecb0..d54ed79 100644 --- a/database/migrations/2020_10_27_102330_create_tasks_table.php +++ b/database/migrations/2020_10_27_102330_create_tasks_table.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class extends Migration { public function up() { Schema::create('tasks', function (Blueprint $table) { diff --git a/database/migrations/2020_10_27_102337_create_structure_for_tasks.php b/database/migrations/2020_10_27_102337_create_structure_for_tasks.php index 9c90464..24d768b 100644 --- a/database/migrations/2020_10_27_102337_create_structure_for_tasks.php +++ b/database/migrations/2020_10_27_102337_create_structure_for_tasks.php @@ -2,8 +2,7 @@ use LaravelEnso\Migrator\Database\Migration; -return new class extends Migration -{ +return new class extends Migration { protected array $permissions = [ ['name' => 'tasks.index', 'description' => 'Show index for tasks', 'is_default' => false], ['name' => 'tasks.create', 'description' => 'Create task', 'is_default' => false], diff --git a/database/migrations/2022_07_01_103245_create_task_checklist_items.php b/database/migrations/2022_07_01_103245_create_task_checklist_items.php index 1517817..398fc09 100644 --- a/database/migrations/2022_07_01_103245_create_task_checklist_items.php +++ b/database/migrations/2022_07_01_103245_create_task_checklist_items.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class extends Migration { public function up() { Schema::create('task_checklist_items', function (Blueprint $table) { diff --git a/database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php b/database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php index 46ab0d9..edea620 100644 --- a/database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php +++ b/database/migrations/2022_07_01_103248_create_structure_for_task_checklist_items.php @@ -2,8 +2,7 @@ use LaravelEnso\Migrator\Database\Migration; -return new class extends Migration -{ +return new class extends Migration { protected array $permissions = [ ['name' => 'tasks.checklistItems.store', 'description' => 'Store a new check list', 'is_default' => false], ['name' => 'tasks.checklistItems.update', 'description' => 'Update check list', 'is_default' => false], diff --git a/database/migrations/2022_07_20_104852_create_task_comments_table.php b/database/migrations/2022_07_20_104852_create_task_comments_table.php index 0390fc2..7a7831c 100644 --- a/database/migrations/2022_07_20_104852_create_task_comments_table.php +++ b/database/migrations/2022_07_20_104852_create_task_comments_table.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class extends Migration { public function up() { Schema::create('task_comments', function (Blueprint $table) { diff --git a/database/migrations/2022_07_20_160001_create_structure_for_task_comments.php b/database/migrations/2022_07_20_160001_create_structure_for_task_comments.php index 9591874..98e3713 100644 --- a/database/migrations/2022_07_20_160001_create_structure_for_task_comments.php +++ b/database/migrations/2022_07_20_160001_create_structure_for_task_comments.php @@ -2,8 +2,7 @@ use LaravelEnso\Migrator\Database\Migration; -return new class extends Migration -{ +return new class extends Migration { protected array $permissions = [ ['name' => 'tasks.comments.index', 'description' => 'Show index for comments', 'is_default' => false], ['name' => 'tasks.comments.store', 'description' => 'Store a new comment', 'is_default' => false], diff --git a/routes/checklistsItems.php b/routes/checklistsItems.php index 467792d..90f8ead 100644 --- a/routes/checklistsItems.php +++ b/routes/checklistsItems.php @@ -1,14 +1,14 @@ as('checklistItems.') ->group(function () { - Route::post('', Store::class)->name('store'); - Route::patch('{checklistItem}', Update::class)->name('update'); - Route::delete('{checklistItem}', Destroy::class)->name('destroy'); + Route::post('', Store::class)->name('store'); + Route::patch('{checklistItem}', Update::class)->name('update'); + Route::delete('{checklistItem}', Destroy::class)->name('destroy'); }); diff --git a/routes/comments.php b/routes/comments.php index a1725c7..a43bf3d 100644 --- a/routes/comments.php +++ b/routes/comments.php @@ -1,10 +1,10 @@ as('comments.') diff --git a/src/AppServiceProvider.php b/src/AppServiceProvider.php index 9f18c86..76ab546 100644 --- a/src/AppServiceProvider.php +++ b/src/AppServiceProvider.php @@ -8,8 +8,8 @@ use LaravelEnso\Tasks\Commands\SendTaskReminders; use LaravelEnso\Tasks\DynamicRelations\Tasks; use LaravelEnso\Tasks\Models\ChecklistItem; -use LaravelEnso\Tasks\Observers\ChecklistItem as ChecklistItemObserver; use LaravelEnso\Tasks\Models\Task as Model; +use LaravelEnso\Tasks\Observers\ChecklistItem as ChecklistItemObserver; use LaravelEnso\Tasks\Observers\Task as Observer; use LaravelEnso\Users\Models\User; diff --git a/src/AuthServiceProvider.php b/src/AuthServiceProvider.php index b220d09..b15b6d8 100644 --- a/src/AuthServiceProvider.php +++ b/src/AuthServiceProvider.php @@ -3,16 +3,16 @@ namespace LaravelEnso\Tasks; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; -use LaravelEnso\Tasks\Models\Task; use LaravelEnso\Tasks\Models\Comment; -use LaravelEnso\Tasks\Policies\Task as Policy; +use LaravelEnso\Tasks\Models\Task; use LaravelEnso\Tasks\Policies\Comment as TaskCommentPolicy; +use LaravelEnso\Tasks\Policies\Task as Policy; class AuthServiceProvider extends ServiceProvider { protected $policies = [ - Task::class => Policy::class, - Comment::class => TaskCommentPolicy::class, + Task::class => Policy::class, + Comment::class => TaskCommentPolicy::class, ]; public function boot() diff --git a/src/EnumServiceProvider.php b/src/EnumServiceProvider.php index 1fb90f9..e79749f 100644 --- a/src/EnumServiceProvider.php +++ b/src/EnumServiceProvider.php @@ -9,7 +9,7 @@ class EnumServiceProvider extends ServiceProvider { public $register = [ - 'flags' => Flags::class, - 'Statuses' => Statuses::class, + 'flags' => Flags::class, + 'Statuses' => Statuses::class, ]; } diff --git a/src/Enums/Statuses.php b/src/Enums/Statuses.php index 9d02c33..a97fafc 100644 --- a/src/Enums/Statuses.php +++ b/src/Enums/Statuses.php @@ -11,8 +11,8 @@ class Statuses extends Enum public const Finished = 3; protected static array $data = [ - self::New => 'New', - self::InProgress => 'In Progress', - self::Finished => 'Finished', + self::New => 'New', + self::InProgress => 'In Progress', + self::Finished => 'Finished', ]; } diff --git a/src/Http/Controllers/Tasks/ChecklistItems/Store.php b/src/Http/Controllers/Tasks/ChecklistItems/Store.php index f2c33f1..2988bfd 100644 --- a/src/Http/Controllers/Tasks/ChecklistItems/Store.php +++ b/src/Http/Controllers/Tasks/ChecklistItems/Store.php @@ -14,8 +14,8 @@ public function __invoke(ValidateChecklistItem $request, ChecklistItem $checklis return [ 'message' => __('The item was successfully created'), - 'param' => ['checklist' => $checklistItem->id], - 'data' => $checklistItem, + 'param' => ['checklist' => $checklistItem->id], + 'data' => $checklistItem, ]; } } diff --git a/src/Http/Controllers/Tasks/Comments/Update.php b/src/Http/Controllers/Tasks/Comments/Update.php index 863c9d7..ae591a8 100644 --- a/src/Http/Controllers/Tasks/Comments/Update.php +++ b/src/Http/Controllers/Tasks/Comments/Update.php @@ -8,7 +8,6 @@ use LaravelEnso\Tasks\Http\Resources\Comment as Resource; use LaravelEnso\Tasks\Models\Comment; - class Update extends Controller { use AuthorizesRequests; diff --git a/src/Http/Controllers/Tasks/Show.php b/src/Http/Controllers/Tasks/Show.php index 50c1e6e..c008ce5 100644 --- a/src/Http/Controllers/Tasks/Show.php +++ b/src/Http/Controllers/Tasks/Show.php @@ -2,17 +2,22 @@ namespace LaravelEnso\Tasks\Http\Controllers\Tasks; -use LaravelEnso\Tasks\Http\Resources\Task as TaskResource; use Illuminate\Routing\Controller; +use LaravelEnso\Tasks\Http\Resources\Task as TaskResource; use LaravelEnso\Tasks\Models\Task; class Show extends Controller { public function __invoke(Task $task) { - $task->load('checklistItems', - 'allocatedTo.person', 'allocatedTo.avatar', 'createdBy.avatar', 'createdBy.person' + $task->load( + 'checklistItems', + 'allocatedTo.person', + 'allocatedTo.avatar', + 'createdBy.avatar', + 'createdBy.person' ); + return ['task' => new TaskResource($task)]; } } diff --git a/src/Http/Requests/Comments/ValidateCommentFetch.php b/src/Http/Requests/Comments/ValidateCommentFetch.php index cc36239..e453ba6 100644 --- a/src/Http/Requests/Comments/ValidateCommentFetch.php +++ b/src/Http/Requests/Comments/ValidateCommentFetch.php @@ -3,7 +3,6 @@ namespace LaravelEnso\Tasks\Http\Requests\Task\Comments; use Illuminate\Foundation\Http\FormRequest; -use LaravelEnso\Helpers\Traits\TransformMorphMap; class ValidateCommentFetch extends FormRequest { diff --git a/src/Http/Requests/ValidateChecklistItem.php b/src/Http/Requests/ValidateChecklistItem.php index 2f1bb95..b26f488 100644 --- a/src/Http/Requests/ValidateChecklistItem.php +++ b/src/Http/Requests/ValidateChecklistItem.php @@ -14,10 +14,10 @@ public function authorize() public function rules() { return [ - 'name' => "{$this->requiredOrFilled()}|string|max:255", - 'task_id' => "{$this->requiredOrFilled()}|integer|exists:tasks,id", - 'order_index' => 'nullable|integer', - 'is_completed' => 'nullable|boolean', + 'name' => "{$this->requiredOrFilled()}|string|max:255", + 'task_id' => "{$this->requiredOrFilled()}|integer|exists:tasks,id", + 'order_index' => 'nullable|integer', + 'is_completed' => 'nullable|boolean', ]; } diff --git a/src/Http/Requests/ValidateTask.php b/src/Http/Requests/ValidateTask.php index add610b..a8f7109 100644 --- a/src/Http/Requests/ValidateTask.php +++ b/src/Http/Requests/ValidateTask.php @@ -18,15 +18,15 @@ public function authorize() public function rules() { return [ - 'name' => "{$this->requiredOrFilled()}|string", - 'description' => 'filled', - 'flag' => 'nullable|in:'.Flags::keys()->implode(','), - 'reminder' => 'nullable|date', - 'allocated_to' => "{$this->requiredOrFilled()}|exists:users,id", - 'status' => "{$this->requiredOrFilled()}|in:".Statuses::keys()->implode(','), - 'from' => "{$this->requiredOrFilled()}|date", - 'to' => "{$this->requiredOrFilled()}|date", - 'muted' => 'nullable|boolean', + 'name' => "{$this->requiredOrFilled()}|string", + 'description' => 'filled', + 'flag' => 'nullable|in:'.Flags::keys()->implode(','), + 'reminder' => 'nullable|date', + 'allocated_to' => "{$this->requiredOrFilled()}|exists:users,id", + 'status' => "{$this->requiredOrFilled()}|in:".Statuses::keys()->implode(','), + 'from' => "{$this->requiredOrFilled()}|date", + 'to' => "{$this->requiredOrFilled()}|date", + 'muted' => 'nullable|boolean', ]; } diff --git a/src/Http/Resources/ChecklistItem.php b/src/Http/Resources/ChecklistItem.php index af13f5a..b32a918 100644 --- a/src/Http/Resources/ChecklistItem.php +++ b/src/Http/Resources/ChecklistItem.php @@ -3,19 +3,18 @@ namespace LaravelEnso\Tasks\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; -use Illuminate\Support\Carbon; class ChecklistItem extends JsonResource { public function toArray($request) { return [ - 'id' => $this->id, - 'name' => $this->name, - 'task_id' => $this->task_id, - 'is_completed' => $this->is_completed, - 'orderIndex' => $this->order_index, - 'createdAt' => $this->created_at->toDatetimeString(), + 'id' => $this->id, + 'name' => $this->name, + 'task_id' => $this->task_id, + 'is_completed' => $this->is_completed, + 'orderIndex' => $this->order_index, + 'createdAt' => $this->created_at->toDatetimeString(), ]; } } diff --git a/src/Http/Resources/Comment.php b/src/Http/Resources/Comment.php index 7d3a3d0..23a478c 100644 --- a/src/Http/Resources/Comment.php +++ b/src/Http/Resources/Comment.php @@ -10,13 +10,13 @@ class Comment extends JsonResource public function toArray($request) { return [ - 'id' => $this->id, - 'body' => $this->body, - 'owner' => new User($this->whenLoaded('createdBy')), - 'isEditable' => $this->isEditable($request), - 'isDeletable' => $this->isDeletable($request), - 'createdAt' => $this->created_at->toDatetimeString(), - 'updatedAt' => $this->updated_at->toDatetimeString(), + 'id' => $this->id, + 'body' => $this->body, + 'owner' => new User($this->whenLoaded('createdBy')), + 'isEditable' => $this->isEditable($request), + 'isDeletable' => $this->isDeletable($request), + 'createdAt' => $this->created_at->toDatetimeString(), + 'updatedAt' => $this->updated_at->toDatetimeString(), ]; } diff --git a/src/Http/Resources/Task.php b/src/Http/Resources/Task.php index 6cab4a0..3560b19 100644 --- a/src/Http/Resources/Task.php +++ b/src/Http/Resources/Task.php @@ -11,21 +11,21 @@ class Task extends JsonResource public function toArray($request) { return [ - 'id' => $this->id, - 'name' => $this->name, - 'status' => $this->status, - 'description' => $this->description, - 'flag' => $this->flag, - 'overdue' => $this->overdue(), - 'reminder' => $this->reminder, - 'from' => Carbon::parse($this->from)->toFormattedDateString(), - 'to' => Carbon::parse($this->to)->toFormattedDateString(), - 'taskChecklistItems' => ChecklistItem::collection($this->whenLoaded('checklistItems')), - 'completedChecklist' => $this->completedChecklist(), - 'allocatedTo' => $this->allocatedTo, - 'createdBy' => $this->createdBy->person->name, - 'updatedAt' => $this->updated_at->diffForHumans(), - 'muted' => $this->muted, + 'id' => $this->id, + 'name' => $this->name, + 'status' => $this->status, + 'description' => $this->description, + 'flag' => $this->flag, + 'overdue' => $this->overdue(), + 'reminder' => $this->reminder, + 'from' => Carbon::parse($this->from)->toFormattedDateString(), + 'to' => Carbon::parse($this->to)->toFormattedDateString(), + 'taskChecklistItems' => ChecklistItem::collection($this->whenLoaded('checklistItems')), + 'completedChecklist' => $this->completedChecklist(), + 'allocatedTo' => $this->allocatedTo, + 'createdBy' => $this->createdBy->person->name, + 'updatedAt' => $this->updated_at->diffForHumans(), + 'muted' => $this->muted, ]; } diff --git a/src/Models/ChecklistItem.php b/src/Models/ChecklistItem.php index 8b00dfe..0cb4f76 100644 --- a/src/Models/ChecklistItem.php +++ b/src/Models/ChecklistItem.php @@ -8,7 +8,7 @@ class ChecklistItem extends Model { - use TableCache; + use TableCache; protected $table = 'task_checklist_items'; protected $guarded = ['id']; @@ -26,5 +26,4 @@ public function scopeCompleted($query) { return $query->where('is_completed', true); } - } diff --git a/src/Models/Comment.php b/src/Models/Comment.php index 5ff8c6f..7f26c02 100644 --- a/src/Models/Comment.php +++ b/src/Models/Comment.php @@ -10,8 +10,10 @@ class Comment extends Model { - use CreatedBy, HasFactory, UpdatedBy, UpdatesOnTouch; + use CreatedBy; + use HasFactory; + use UpdatedBy; + use UpdatesOnTouch; protected $guarded = ['id']; - } diff --git a/src/Models/Task.php b/src/Models/Task.php index b66631a..2a039a3 100644 --- a/src/Models/Task.php +++ b/src/Models/Task.php @@ -8,11 +8,11 @@ use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Facades\Auth; use LaravelEnso\Tables\Traits\TableCache; +use LaravelEnso\Tasks\Enums\Statuses; use LaravelEnso\Tasks\Notifications\TaskNotification; use LaravelEnso\TrackWho\Traits\CreatedBy; use LaravelEnso\TrackWho\Traits\UpdatedBy; use LaravelEnso\Users\Models\User; -use LaravelEnso\Tasks\Enums\Statuses; class Task extends Model { @@ -74,11 +74,10 @@ public function updateStatus(): void $completedCheckList = $this->checklistItems()->completed()->count(); $totalCheckList = $this->checklistItems()->count(); - $status = match($completedCheckList) - { + $status = match($completedCheckList) { $totalCheckList => Statuses::Finished, - 0 => Statuses::New, - default => Statuses::InProgress, + 0 => Statuses::New, + default => Statuses::InProgress, }; $this->update(['status' => $status]); @@ -100,5 +99,4 @@ public function remind() $this->update(['reminded_at' => Carbon::now()]); } - } diff --git a/src/Upgrades/From.php b/src/Upgrades/From.php index b7bb1b9..0a0db39 100644 --- a/src/Upgrades/From.php +++ b/src/Upgrades/From.php @@ -3,10 +3,8 @@ namespace LaravelEnso\Tasks\Upgrades; use Illuminate\Support\Facades\Schema; -use LaravelEnso\Tasks\Enums\Statuses as StatusesEnum; use LaravelEnso\Upgrade\Contracts\MigratesTable; use LaravelEnso\Upgrade\Helpers\Table; -use LaravelEnso\Tasks\Models\Task; class From implements MigratesTable { @@ -21,5 +19,4 @@ public function migrateTable(): void $table->dateTime('from')->nullable()->after('reminder'); }); } - } diff --git a/src/Upgrades/Muted.php b/src/Upgrades/Muted.php index 3a0e66a..44d1d94 100644 --- a/src/Upgrades/Muted.php +++ b/src/Upgrades/Muted.php @@ -3,10 +3,8 @@ namespace LaravelEnso\Tasks\Upgrades; use Illuminate\Support\Facades\Schema; -use LaravelEnso\Tasks\Enums\Statuses as StatusesEnum; use LaravelEnso\Upgrade\Contracts\MigratesTable; use LaravelEnso\Upgrade\Helpers\Table; -use LaravelEnso\Tasks\Models\Task; class Muted implements MigratesTable { @@ -21,5 +19,4 @@ public function migrateTable(): void $table->boolean('muted')->default(false)->after('reminder'); }); } - } diff --git a/src/Upgrades/Permissions.php b/src/Upgrades/Permissions.php index 8641095..6149ec6 100644 --- a/src/Upgrades/Permissions.php +++ b/src/Upgrades/Permissions.php @@ -11,6 +11,6 @@ class Permissions implements MigratesStructure protected array $permissions = [ ['name' => 'tasks.show', 'description' => 'Display task information', 'is_default' => true], - ['name' => 'tasks.options', 'description' => 'Get tasks options for select', 'is_default' => false] + ['name' => 'tasks.options', 'description' => 'Get tasks options for select', 'is_default' => false], ]; } diff --git a/src/Upgrades/Statuses.php b/src/Upgrades/Statuses.php index 7c85352..6c1c267 100644 --- a/src/Upgrades/Statuses.php +++ b/src/Upgrades/Statuses.php @@ -4,11 +4,11 @@ use Illuminate\Support\Facades\Schema; use LaravelEnso\Tasks\Enums\Statuses as StatusesEnum; -use LaravelEnso\Upgrade\Contracts\MigratesTable; +use LaravelEnso\Tasks\Models\Task; use LaravelEnso\Upgrade\Contracts\MigratesData; use LaravelEnso\Upgrade\Contracts\MigratesPostDataMigration; +use LaravelEnso\Upgrade\Contracts\MigratesTable; use LaravelEnso\Upgrade\Helpers\Table; -use LaravelEnso\Tasks\Models\Task; class Statuses implements MigratesTable, MigratesPostDataMigration, MigratesData { diff --git a/src/Upgrades/To.php b/src/Upgrades/To.php index d21a942..08a228b 100644 --- a/src/Upgrades/To.php +++ b/src/Upgrades/To.php @@ -3,10 +3,8 @@ namespace LaravelEnso\Tasks\Upgrades; use Illuminate\Support\Facades\Schema; -use LaravelEnso\Tasks\Enums\Statuses as StatusesEnum; use LaravelEnso\Upgrade\Contracts\MigratesTable; use LaravelEnso\Upgrade\Helpers\Table; -use LaravelEnso\Tasks\Models\Task; class To implements MigratesTable { @@ -21,5 +19,4 @@ public function migrateTable(): void $table->dateTime('to')->nullable()->after('reminder'); }); } - } From 831b7b39011d90af2e4ce9b858740686033e51f8 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Thu, 11 Aug 2022 07:43:05 +0100 Subject: [PATCH 11/13] fix: fix issues flagged by ci/cd pipeline --- .idea/modules.xml | 8 --- .idea/php.xml | 6 --- .idea/tasks.iml | 13 ----- .idea/vcs.xml | 6 --- .idea/workspace.xml | 53 +++++++------------ .../2020_10_27_102330_create_tasks_table.php | 1 - ..._01_103245_create_task_checklist_items.php | 1 + src/Models/ChecklistItem.php | 1 + src/Models/Task.php | 8 +-- 9 files changed, 24 insertions(+), 73 deletions(-) delete mode 100644 .idea/modules.xml delete mode 100644 .idea/php.xml delete mode 100644 .idea/tasks.iml delete mode 100644 .idea/vcs.xml diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 14a22b9..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml deleted file mode 100644 index 31b8a3a..0000000 --- a/.idea/php.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/tasks.iml b/.idea/tasks.iml deleted file mode 100644 index 6476e52..0000000 --- a/.idea/tasks.iml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index b4b4970..328e5a8 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,41 +1,15 @@ - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -170,6 +152,7 @@ - \ No newline at end of file diff --git a/database/migrations/2020_10_27_102330_create_tasks_table.php b/database/migrations/2020_10_27_102330_create_tasks_table.php index d54ed79..bc53843 100644 --- a/database/migrations/2020_10_27_102330_create_tasks_table.php +++ b/database/migrations/2020_10_27_102330_create_tasks_table.php @@ -14,7 +14,6 @@ public function up() $table->text('description'); $table->tinyInteger('flag')->nullable()->index(); - $table->boolean('completed')->index(); $table->dateTime('reminder')->nullable(); $table->smallInteger('status')->nullable(); $table->dateTime('from')->nullable(); diff --git a/database/migrations/2022_07_01_103245_create_task_checklist_items.php b/database/migrations/2022_07_01_103245_create_task_checklist_items.php index 398fc09..ba63c82 100644 --- a/database/migrations/2022_07_01_103245_create_task_checklist_items.php +++ b/database/migrations/2022_07_01_103245_create_task_checklist_items.php @@ -10,6 +10,7 @@ public function up() Schema::create('task_checklist_items', function (Blueprint $table) { $table->id(); $table->foreignId('task_id')->constrained('tasks'); + $table->string('name'); $table->unsignedInteger('order_index')->nullable(); $table->boolean('is_completed'); diff --git a/src/Models/ChecklistItem.php b/src/Models/ChecklistItem.php index 0cb4f76..7de4d05 100644 --- a/src/Models/ChecklistItem.php +++ b/src/Models/ChecklistItem.php @@ -9,6 +9,7 @@ class ChecklistItem extends Model { use TableCache; + protected $table = 'task_checklist_items'; protected $guarded = ['id']; diff --git a/src/Models/Task.php b/src/Models/Task.php index 2a039a3..f165862 100644 --- a/src/Models/Task.php +++ b/src/Models/Task.php @@ -71,11 +71,11 @@ public function overdue(): bool public function updateStatus(): void { - $completedCheckList = $this->checklistItems()->completed()->count(); - $totalCheckList = $this->checklistItems()->count(); + $completedItems = $this->checklistItems()->completed()->count(); + $totalItems = $this->checklistItems()->count(); - $status = match($completedCheckList) { - $totalCheckList => Statuses::Finished, + $status = match($completedItems) { + $totalItems => Statuses::Finished, 0 => Statuses::New, default => Statuses::InProgress, }; From f338a38102d76e5c3c6af996012113115dc08045 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Thu, 11 Aug 2022 07:44:14 +0100 Subject: [PATCH 12/13] remove idea files --- .idea/workspace.xml | 158 -------------------------------------------- 1 file changed, 158 deletions(-) delete mode 100644 .idea/workspace.xml diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 328e5a8..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - $PROJECT_DIR$/composer.json - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1659365760066 - - - 1659366293626 - - - 1659366517638 - - - 1659429202811 - - - 1659694462634 - - - 1659695143008 - - - 1659698015574 - - - 1659941637908 - - - 1660145113673 - - - - - - - - - - - - - - - - - - \ No newline at end of file From 13417f97df42c4e356e7fd96ef9f1bdd5cd50cc3 Mon Sep 17 00:00:00 2001 From: MusahMusah Date: Thu, 11 Aug 2022 07:47:23 +0100 Subject: [PATCH 13/13] fix: added fix for code align --- src/Http/Resources/Task.php | 1 - src/Models/Task.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Http/Resources/Task.php b/src/Http/Resources/Task.php index 3560b19..ada02b3 100644 --- a/src/Http/Resources/Task.php +++ b/src/Http/Resources/Task.php @@ -4,7 +4,6 @@ use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Carbon; -use LaravelEnso\Tasks\Http\Resources\ChecklistItem; class Task extends JsonResource { diff --git a/src/Models/Task.php b/src/Models/Task.php index f165862..1f49a07 100644 --- a/src/Models/Task.php +++ b/src/Models/Task.php @@ -74,7 +74,7 @@ public function updateStatus(): void $completedItems = $this->checklistItems()->completed()->count(); $totalItems = $this->checklistItems()->count(); - $status = match($completedItems) { + $status = match ($completedItems) { $totalItems => Statuses::Finished, 0 => Statuses::New, default => Statuses::InProgress,