From 332a12008c37e412620cbe2fb17a2a24483be806 Mon Sep 17 00:00:00 2001 From: Dodowingster Date: Wed, 24 Apr 2024 15:18:28 +0800 Subject: [PATCH] initial commit --- .../ControllersLogic/CreateRemarkLogic.php | 62 ++++++++++++++++ .../ControllersLogic/DeleteRemarkLogic.php | 66 +++++++++++++++++ .../ControllersLogic/FetchRemarkLogic.php | 59 +++++++++++++++ .../ControllersLogic/ListRemarksLogic.php | 59 +++++++++++++++ .../ControllersLogic/UpdateRemarkLogic.php | 71 ++++++++++++++++++ .../DataTransferObjects/RemarkObject.php | 38 ++++++++++ .../Processors/CreateRemarkProcessor.php | 47 ++++++++++++ .../Remarks/Services/CreatesRemark.php | 31 ++++++++ .../Remarks/Services/DeletesRemark.php | 19 +++++ .../Remarks/Services/FetchesRemark.php | 33 +++++++++ .../Modules/Remarks/Services/ListsRemarks.php | 33 +++++++++ .../Remarks/Services/UpdatesRemark.php | 26 +++++++ .../Standards/Rules/CanCreateRemark.php | 57 +++++++++++++++ .../Standards/Rules/CanDeleteRemark.php | 43 +++++++++++ .../Standards/Rules/CanFetchRemark.php | 43 +++++++++++ .../Standards/Rules/CanListRemarks.php | 43 +++++++++++ .../Standards/Rules/CanUpdateRemark.php | 57 +++++++++++++++ .../Standards/Validators/RemarkValidation.php | 41 +++++++++++ .../Remarks/CreateRemarkController.php | 20 +++++ .../Remarks/DeleteRemarkController.php | 20 +++++ .../Remarks/FetchRemarkController.php | 20 +++++ .../Remarks/ListRemarksController.php | 20 +++++ .../Remarks/UpdateRemarkController.php | 20 +++++ app/Http/Resources/RemarkResource.php | 26 +++++++ .../general/elements/RemarkComponent.vue | 32 ++++++++ .../general/elements/RemarkListComponent.vue | 71 ++++++++++++++++++ .../forms/DeleteRemarkFormComponent.vue | 32 ++++++++ .../forms/RemarkCommentFormComponent.vue | 55 ++++++++++++++ .../general/forms/RemarkFormComponent.vue | 73 +++++++++++++++++++ routes/remark.php | 11 +++ 30 files changed, 1228 insertions(+) create mode 100644 app/Classes/Modules/Remarks/ControllersLogic/CreateRemarkLogic.php create mode 100644 app/Classes/Modules/Remarks/ControllersLogic/DeleteRemarkLogic.php create mode 100644 app/Classes/Modules/Remarks/ControllersLogic/FetchRemarkLogic.php create mode 100644 app/Classes/Modules/Remarks/ControllersLogic/ListRemarksLogic.php create mode 100644 app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php create mode 100644 app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php create mode 100644 app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php create mode 100644 app/Classes/Modules/Remarks/Services/CreatesRemark.php create mode 100644 app/Classes/Modules/Remarks/Services/DeletesRemark.php create mode 100644 app/Classes/Modules/Remarks/Services/FetchesRemark.php create mode 100644 app/Classes/Modules/Remarks/Services/ListsRemarks.php create mode 100644 app/Classes/Modules/Remarks/Services/UpdatesRemark.php create mode 100644 app/Classes/Modules/Remarks/Standards/Rules/CanCreateRemark.php create mode 100644 app/Classes/Modules/Remarks/Standards/Rules/CanDeleteRemark.php create mode 100644 app/Classes/Modules/Remarks/Standards/Rules/CanFetchRemark.php create mode 100644 app/Classes/Modules/Remarks/Standards/Rules/CanListRemarks.php create mode 100644 app/Classes/Modules/Remarks/Standards/Rules/CanUpdateRemark.php create mode 100644 app/Classes/Modules/Remarks/Standards/Validators/RemarkValidation.php create mode 100644 app/Http/Controllers/Remarks/CreateRemarkController.php create mode 100644 app/Http/Controllers/Remarks/DeleteRemarkController.php create mode 100644 app/Http/Controllers/Remarks/FetchRemarkController.php create mode 100644 app/Http/Controllers/Remarks/ListRemarksController.php create mode 100644 app/Http/Controllers/Remarks/UpdateRemarkController.php create mode 100644 app/Http/Resources/RemarkResource.php create mode 100644 resources/assets/vue/components/general/elements/RemarkComponent.vue create mode 100644 resources/assets/vue/components/general/elements/RemarkListComponent.vue create mode 100644 resources/assets/vue/components/general/forms/DeleteRemarkFormComponent.vue create mode 100644 resources/assets/vue/components/general/forms/RemarkCommentFormComponent.vue create mode 100644 resources/assets/vue/components/general/forms/RemarkFormComponent.vue create mode 100644 routes/remark.php diff --git a/app/Classes/Modules/Remarks/ControllersLogic/CreateRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/CreateRemarkLogic.php new file mode 100644 index 00000000..46d822c5 --- /dev/null +++ b/app/Classes/Modules/Remarks/ControllersLogic/CreateRemarkLogic.php @@ -0,0 +1,62 @@ + 'Created Remark', + 'message' => 'You have successfully created a new Remark' + ]; + } + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + + /** + * CreateRemarkLogic constructor. + * @param CreateRemarkProcessor $createRemarkProcessor + */ + public function __construct(CreateRemarkProcessor $createRemarkProcessor) + { + $this->createRemarkProcessor = $createRemarkProcessor; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $classs = '\\App\\Models\\' . Str::studly($request->input('model_type')); + + if (!class_exists($classs)) { + throw new MalformedRequestException('Unable to process this entity'); + } + + $remarkOwner = $classs::find($request->route('id')); + + $remarkObject = new RemarkObject($request->input('content'), auth()->user()->id); + + $remmark = $this->createRemarkProcessor->execute($remarkOwner, $remarkObject); + + return $this->resourceResponse(new RemarkResource($remmark)); + } +} diff --git a/app/Classes/Modules/Remarks/ControllersLogic/DeleteRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/DeleteRemarkLogic.php new file mode 100644 index 00000000..b593d603 --- /dev/null +++ b/app/Classes/Modules/Remarks/ControllersLogic/DeleteRemarkLogic.php @@ -0,0 +1,66 @@ + 'Deleted Remark', + 'message' => 'You have successfully deleted a Remark' + ]; + } + + + /** @var CanDeleteRemark */ + private $canDeleteRemark; + + /** @var DeletesRemark */ + private $deletesRemark; + + /** @var FetchesRemark */ + private $fetchesRemark; + + /** + * DeleteRemarkControllersLogic constructor. + * @param CanDeleteRemark $canDeleteRemark + * @param DeletesRemark $deletesRemark + * @param FetchesRemark $fetchesRemark + */ + public function __construct(CanDeleteRemark $canDeleteRemark, DeletesRemark $deletesRemark, FetchesRemark $fetchesRemark) + { + $this->canDeleteRemark = $canDeleteRemark; + $this->deletesRemark = $deletesRemark; + $this->fetchesRemark = $fetchesRemark; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canDeleteRemark->passes(); + + $query = $this->fetchesRemark->execute(['id' => $request->route('id')]); + + $this->deletesRemark->execute($query); + + return $this->response([]); + } + +} diff --git a/app/Classes/Modules/Remarks/ControllersLogic/FetchRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/FetchRemarkLogic.php new file mode 100644 index 00000000..9c5aa5af --- /dev/null +++ b/app/Classes/Modules/Remarks/ControllersLogic/FetchRemarkLogic.php @@ -0,0 +1,59 @@ + 'Retrieved Remark', + 'message' => 'You have successfully retrieved a Remark' + ]; + } + + /** @var CanFetchRemark */ + private $canFetchRemark; + + /** @var FetchesRemark */ + private $fetchesRemark; + + /** + * FetchRemarkControllersLogic constructor. + * @param CanFetchRemark $canFetchRemark + * @param FetchesRemark $fetchesRemark + */ + public function __construct(CanFetchRemark $canFetchRemark, FetchesRemark $fetchesRemark) + { + $this->canFetchRemark = $canFetchRemark; + $this->fetchesRemark = $fetchesRemark; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canFetchRemark->passes(); + + $query = $this->fetchesRemark->execute(['id' => $request->route('id')]); + + return $this->resourceResponse(new RemarkResource($query)); + } + +} diff --git a/app/Classes/Modules/Remarks/ControllersLogic/ListRemarksLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/ListRemarksLogic.php new file mode 100644 index 00000000..c70ccee1 --- /dev/null +++ b/app/Classes/Modules/Remarks/ControllersLogic/ListRemarksLogic.php @@ -0,0 +1,59 @@ + 'Retrieved Remarks', + 'message' => 'You have successfully retrieved a list of Remarks' + ]; + } + + /** @var CanListRemarks */ + private $canListRemarks; + + /** @var ListsRemarks */ + private $listsRemarks; + + /** + * ListRemarksLogic constructor. + * @param CanListRemarks $canListRemarks + * @param ListsRemarks $listsRemarks + */ + public function __construct(CanListRemarks $canListRemarks, ListsRemarks $listsRemarks) + { + $this->canListRemarks = $canListRemarks; + $this->listsRemarks = $listsRemarks; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canListRemarks->passes(); + + $query = $this->listsRemarks->execute($this->listsRemarks->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(RemarkResource::collection($query)); + } + +} diff --git a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php new file mode 100644 index 00000000..f120efab --- /dev/null +++ b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php @@ -0,0 +1,71 @@ + 'Updated Remark', + 'message' => 'You have successfully updated the Remark' + ]; + } + + /** @var CanUpdateRemark */ + private $canUpdateRemark; + + /** @var UpdatesRemark */ + private $updatesRemark; + + /** @var FetchesRemark */ + private $fetchesRemark; + + /** + * UpdateRemarkLogic constructor. + * @param CanUpdateRemark $canUpdateRemark + * @param UpdatesRemark $updatesRemark + * @param FetchesRemark $fetchesRemark + */ + public function __construct(CanUpdateRemark $canUpdateRemark, UpdatesRemark $updatesRemark, FetchesRemark $fetchesRemark) + { + $this->canUpdateRemark = $canUpdateRemark; + $this->updatesRemark = $updatesRemark; + $this->fetchesRemark = $fetchesRemark; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $object = new RemarkObject($request->input('content'), auth()->user()->id); + + $this->canUpdateRemark->passes($object); + + $query = $this->fetchesRemark->execute(['id' => $request->route('id')]); + + $query = $this->updatesRemark->execute($query, $object); + + return $this->resourceResponse(new RemarkResource($query)); + } + +} diff --git a/app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php b/app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php new file mode 100644 index 00000000..44a9507f --- /dev/null +++ b/app/Classes/Modules/Remarks/DataTransferObjects/RemarkObject.php @@ -0,0 +1,38 @@ +commenterID = $commenterID; + $this->content = $content; + } + + /** + * @return int + */ + public function getCommenterId(): string + { + return $this->commenterID; + } + + /** + * @return string + */ + public function getContent(): ?string + { + return $this->content; + } + +} diff --git a/app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php b/app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php new file mode 100644 index 00000000..aadbe502 --- /dev/null +++ b/app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php @@ -0,0 +1,47 @@ +createsRemark = $createsRemark; + $this->canCreateRemark = $canCreateRemark; + } + + + /** + * @param Remarkable $remarkable + * @param RemarkObject $object + * @return \Illuminate\Database\Eloquent\Model + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function execute(Remarkable $remarkable, RemarkObject $object){ + + $this->canCreateRemark->passes($object); + return $this->createsRemark->execute($remarkable, $object); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Remarks/Services/CreatesRemark.php b/app/Classes/Modules/Remarks/Services/CreatesRemark.php new file mode 100644 index 00000000..ac0d57a3 --- /dev/null +++ b/app/Classes/Modules/Remarks/Services/CreatesRemark.php @@ -0,0 +1,31 @@ +commenter_id = $object->getCommenterId(); + $model->content = $object->getContent(); + + return $this->handler($remarkable->remarks(), $model); + + } +} diff --git a/app/Classes/Modules/Remarks/Services/DeletesRemark.php b/app/Classes/Modules/Remarks/Services/DeletesRemark.php new file mode 100644 index 00000000..4c29be9d --- /dev/null +++ b/app/Classes/Modules/Remarks/Services/DeletesRemark.php @@ -0,0 +1,19 @@ +handler($model); + } +} diff --git a/app/Classes/Modules/Remarks/Services/FetchesRemark.php b/app/Classes/Modules/Remarks/Services/FetchesRemark.php new file mode 100644 index 00000000..a3b5c765 --- /dev/null +++ b/app/Classes/Modules/Remarks/Services/FetchesRemark.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} diff --git a/app/Classes/Modules/Remarks/Services/ListsRemarks.php b/app/Classes/Modules/Remarks/Services/ListsRemarks.php new file mode 100644 index 00000000..53479558 --- /dev/null +++ b/app/Classes/Modules/Remarks/Services/ListsRemarks.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} diff --git a/app/Classes/Modules/Remarks/Services/UpdatesRemark.php b/app/Classes/Modules/Remarks/Services/UpdatesRemark.php new file mode 100644 index 00000000..4ba9501c --- /dev/null +++ b/app/Classes/Modules/Remarks/Services/UpdatesRemark.php @@ -0,0 +1,26 @@ +commenter_id = $object->getCommenterId(); + $model->content = $object->getContent(); + + return $this->handler($model); + + } +} diff --git a/app/Classes/Modules/Remarks/Standards/Rules/CanCreateRemark.php b/app/Classes/Modules/Remarks/Standards/Rules/CanCreateRemark.php new file mode 100644 index 00000000..a7d2e5b1 --- /dev/null +++ b/app/Classes/Modules/Remarks/Standards/Rules/CanCreateRemark.php @@ -0,0 +1,57 @@ +RemarkValidation = $RemarkValidation; + } + + + /** + * @return bool + */ + protected function authorized($object): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param RemarkObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->RemarkValidation->validate($object); + + } + + + /** + * @param RemarkObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} diff --git a/app/Classes/Modules/Remarks/Standards/Rules/CanDeleteRemark.php b/app/Classes/Modules/Remarks/Standards/Rules/CanDeleteRemark.php new file mode 100644 index 00000000..1c61ac9d --- /dev/null +++ b/app/Classes/Modules/Remarks/Standards/Rules/CanDeleteRemark.php @@ -0,0 +1,43 @@ +RemarkValidation = $RemarkValidation; + } + + + /** + * @return bool + */ + protected function authorized($object): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param RemarkObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->RemarkValidation->validate($object); + + } + + + /** + * @param RemarkObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} diff --git a/app/Classes/Modules/Remarks/Standards/Validators/RemarkValidation.php b/app/Classes/Modules/Remarks/Standards/Validators/RemarkValidation.php new file mode 100644 index 00000000..b35d3bde --- /dev/null +++ b/app/Classes/Modules/Remarks/Standards/Validators/RemarkValidation.php @@ -0,0 +1,41 @@ + $object->getCommenterId(), + 'content' => $object->getContent(), + ]; + } + + /** + * @return array + */ + protected function rules(): array { + return [ + 'commenter_id' => 'required', + 'content' => 'required', + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + +} diff --git a/app/Http/Controllers/Remarks/CreateRemarkController.php b/app/Http/Controllers/Remarks/CreateRemarkController.php new file mode 100644 index 00000000..a66aa8fd --- /dev/null +++ b/app/Http/Controllers/Remarks/CreateRemarkController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Remarks/DeleteRemarkController.php b/app/Http/Controllers/Remarks/DeleteRemarkController.php new file mode 100644 index 00000000..8d0163c0 --- /dev/null +++ b/app/Http/Controllers/Remarks/DeleteRemarkController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Remarks/FetchRemarkController.php b/app/Http/Controllers/Remarks/FetchRemarkController.php new file mode 100644 index 00000000..ba43be07 --- /dev/null +++ b/app/Http/Controllers/Remarks/FetchRemarkController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Remarks/ListRemarksController.php b/app/Http/Controllers/Remarks/ListRemarksController.php new file mode 100644 index 00000000..f76f752e --- /dev/null +++ b/app/Http/Controllers/Remarks/ListRemarksController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Remarks/UpdateRemarkController.php b/app/Http/Controllers/Remarks/UpdateRemarkController.php new file mode 100644 index 00000000..ae53f6b7 --- /dev/null +++ b/app/Http/Controllers/Remarks/UpdateRemarkController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Resources/RemarkResource.php b/app/Http/Resources/RemarkResource.php new file mode 100644 index 00000000..24081934 --- /dev/null +++ b/app/Http/Resources/RemarkResource.php @@ -0,0 +1,26 @@ + $this->id, + 'commenter' => new UserResource($this->commenter), + 'owner_id' => $this->owner_id, + 'content' => $this->content, + 'created_at' => $this->created_at->format('d-m-Y H:i'), + 'long_ago' => $this->created_at->diffForHumans() + ]; + } +} diff --git a/resources/assets/vue/components/general/elements/RemarkComponent.vue b/resources/assets/vue/components/general/elements/RemarkComponent.vue new file mode 100644 index 00000000..f2f9bf30 --- /dev/null +++ b/resources/assets/vue/components/general/elements/RemarkComponent.vue @@ -0,0 +1,32 @@ + + diff --git a/resources/assets/vue/components/general/elements/RemarkListComponent.vue b/resources/assets/vue/components/general/elements/RemarkListComponent.vue new file mode 100644 index 00000000..da218ea9 --- /dev/null +++ b/resources/assets/vue/components/general/elements/RemarkListComponent.vue @@ -0,0 +1,71 @@ + + diff --git a/resources/assets/vue/components/general/forms/DeleteRemarkFormComponent.vue b/resources/assets/vue/components/general/forms/DeleteRemarkFormComponent.vue new file mode 100644 index 00000000..4e50d8c4 --- /dev/null +++ b/resources/assets/vue/components/general/forms/DeleteRemarkFormComponent.vue @@ -0,0 +1,32 @@ + + diff --git a/resources/assets/vue/components/general/forms/RemarkCommentFormComponent.vue b/resources/assets/vue/components/general/forms/RemarkCommentFormComponent.vue new file mode 100644 index 00000000..7da26ca8 --- /dev/null +++ b/resources/assets/vue/components/general/forms/RemarkCommentFormComponent.vue @@ -0,0 +1,55 @@ + + diff --git a/resources/assets/vue/components/general/forms/RemarkFormComponent.vue b/resources/assets/vue/components/general/forms/RemarkFormComponent.vue new file mode 100644 index 00000000..73a8575f --- /dev/null +++ b/resources/assets/vue/components/general/forms/RemarkFormComponent.vue @@ -0,0 +1,73 @@ + + diff --git a/routes/remark.php b/routes/remark.php new file mode 100644 index 00000000..91ae4676 --- /dev/null +++ b/routes/remark.php @@ -0,0 +1,11 @@ + 'Remarks', 'as' => 'remark.', 'prefix' => 'remark'], function () { + Route::get('/{id}/show', 'FetchRemarkController@fetch')->name('show'); + Route::get('/list', 'ListRemarksController@list')->name('list'); + Route::post('/{id}/create', 'CreateRemarkController@create')->name('create'); + Route::put('/update/{id}', 'UpdateRemarkController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteRemarkController@delete')->name('delete'); +});