From 839c7d8e7dff4bb7ac4d32f39efc1c9302caf4ba Mon Sep 17 00:00:00 2001 From: weichien Date: Sat, 5 Jun 2021 16:28:16 +0800 Subject: [PATCH] feat: add list announcement controller logic,service,rule, resources. --- .../ListAnnouncementsLogic.php | 60 +++++++++++++++++++ .../Services/ListsAnnouncements.php | 32 ++++++++++ .../Standards/Rules/CanListAnnouncements.php | 36 +++++++++++ app/Http/Resources/AnnouncementResource.php | 29 +++++++++ 4 files changed, 157 insertions(+) create mode 100644 app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php create mode 100644 app/Classes/Modules/Announcements/Services/ListsAnnouncements.php create mode 100644 app/Classes/Modules/Announcements/Standards/Rules/CanListAnnouncements.php create mode 100644 app/Http/Resources/AnnouncementResource.php diff --git a/app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php new file mode 100644 index 00000000..0055ebeb --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php @@ -0,0 +1,60 @@ + 'Retrieve Announcements', + 'message' => 'You have successfully retrieved a list of Announcements' + ]; + } + + /** @var CanListAnnouncements */ + private $canListAnnouncements; + + /** @var ListsAnnouncements */ + private $listsAnnouncements; + + /** + * ListAnnouncementsLogic constructor. + * @param CanListAnnouncements $canListAnnouncements + * @param ListsAnnouncements $listsAnnouncements + */ + public function __construct(CanListAnnouncements $canListAnnouncements, ListsAnnouncements $listsAnnouncements) + { + $this->canListAnnouncements = $canListAnnouncements; + $this->listsAnnouncements = $listsAnnouncements; + } + + + /** + * @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 + { + + $this->canListAnnouncements->passes(); + + $annoucements = $this->listsAnnouncements->execute($this->listsAnnouncements->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(AnnouncementResource::collection($annoucements)); + } +} diff --git a/app/Classes/Modules/Announcements/Services/ListsAnnouncements.php b/app/Classes/Modules/Announcements/Services/ListsAnnouncements.php new file mode 100644 index 00000000..b821819a --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/ListsAnnouncements.php @@ -0,0 +1,32 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} diff --git a/app/Classes/Modules/Announcements/Standards/Rules/CanListAnnouncements.php b/app/Classes/Modules/Announcements/Standards/Rules/CanListAnnouncements.php new file mode 100644 index 00000000..a4c02847 --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Rules/CanListAnnouncements.php @@ -0,0 +1,36 @@ + $this->id, + 'title' => $this->title, + 'description' => $this->description, + 'segment' => $this->segments, + 'ending_on' => $this->ending_on, + 'starting_on' => $this->starting_on, + 'starting_on_date' => Carbon::parse($this->starting_on)->format('Y-m-d'), + 'ending_on_date' => Carbon::parse($this->ending_on)->format('Y-m-d'), + ]; + } +}