diff --git a/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php new file mode 100644 index 00000000..f23c9d73 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php @@ -0,0 +1,84 @@ + 'Update Announcement', + 'message' => 'You have successfully updated the Annoucement' + ]; + } + + /** @var CanUpdateAnnouncement */ + private $canUpdateAnnouncement; + + /** @var UpdatesAnnouncement */ + private $updatesAnnouncement; + + /** @var FetchesAnnouncement */ + private $fetchesAnnouncement; + + + /** + * UpdateAnnouncementLogic constructor. + * @param CanUpdateAnnouncement $canUpdateAnnouncement + * @param UpdatesAnnouncement $updatesAnnouncement + * @param FetchesAnnouncement $fetchesAnnouncement + */ + public function __construct( + CanUpdateAnnouncement $canUpdateAnnouncement, + UpdatesAnnouncement $updatesAnnouncement, + FetchesAnnouncement $fetchesAnnouncement + ) { + $this->canUpdateAnnouncement = $canUpdateAnnouncement; + $this->updatesAnnouncement = $updatesAnnouncement; + $this->fetchesAnnouncement = $fetchesAnnouncement; + } + + /** + * @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 + { + $annoucement_object = new AnnouncementObject( + $request->input('title'), + $request->input('description'), + $request->input('starting_on'), + $request->input('ending_on') + ); + + $annoucement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]); + + $this->canUpdateAnnouncement->passes($annoucement_object); + + $announcement_query = $this->updatesAnnouncement->execute($annoucement, $annoucement_object); + + $announcement_query->segments()->sync($request->input('segment_id')); + + return $this->resourceResponse(new AnnouncementResource($announcement_query)); + } +} diff --git a/app/Classes/Modules/Announcements/Services/FetchesAnnouncement.php b/app/Classes/Modules/Announcements/Services/FetchesAnnouncement.php new file mode 100644 index 00000000..f43b9e46 --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/FetchesAnnouncement.php @@ -0,0 +1,34 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php b/app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php new file mode 100644 index 00000000..319691d7 --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php @@ -0,0 +1,28 @@ +title = $object->getTitle(); + $model->description = $object->getDescription(); + $model->starting_on = $object->getStartingOn(); + $model->ending_on = $object->getEndingOn(); + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Standards/Rules/CanUpdateAnnouncement.php b/app/Classes/Modules/Announcements/Standards/Rules/CanUpdateAnnouncement.php new file mode 100644 index 00000000..d861d255 --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Rules/CanUpdateAnnouncement.php @@ -0,0 +1,54 @@ +AnnouncementValidation = $AnnouncementValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + } + + /** + * @param AnnouncementObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->AnnouncementValidation->validate($object); + } + + /** + * @param AnnouncementObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Announcements/UpdateAnnouncementController.php b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php index 25e024c1..8d406632 100644 --- a/app/Http/Controllers/Announcements/UpdateAnnouncementController.php +++ b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php @@ -2,18 +2,18 @@ namespace App\Http\Controllers\Announcements; -use App\Classes\Modules\Announcements\ControllersLogic\UpdateAnnouncementsLogic; +use App\Classes\Modules\Announcements\ControllersLogic\UpdateAnnouncementLogic; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -class UpdateAnnoucementController +class UpdateAnnouncementController { /** * @param Request $request - * @param UpdateAnnouncementsLogic $logic + * @param UpdateAnnouncementLogic $logic * @return JsonResponse */ - public function update(Request $request, UpdateAnnouncementsLogic $logic): JsonResponse + public function update(Request $request, UpdateAnnouncementLogic $logic): JsonResponse { return $logic->execute($request); }