diff --git a/app/Classes/Modules/Announcements/ControllersLogic/AssignAnnouncementToSegmentLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/AssignAnnouncementToSegmentLogic.php new file mode 100644 index 00000000..18552989 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/AssignAnnouncementToSegmentLogic.php @@ -0,0 +1,61 @@ + 'Assign Announcement To Segment', + 'message' => 'You have successfully assigned Announcement to segment' + ]; + } + + /** @var FetchesAnnouncement */ + private $fetchesAnnouncement; + + /** @var AssignAnnouncementToSegmentProcessor */ + private $assignAnnouncementToSegmentProcessor; + + /** + * AssignAnnouncementToSegmentLogic constructor. + * @param FetchesAnnouncement $fetchesAnnouncement + * @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor + */ + public function __construct(FetchesAnnouncement $fetchesAnnouncement, AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor) + { + $this->fetchesAnnouncement = $fetchesAnnouncement; + $this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor; + } + + /** + * @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 + { + $announcement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]); + + $this->assignAnnouncementToSegmentProcessor->execute($announcement, $request->input('segment_id')); + + return $this->resourceResponse(new AnnouncementResource($announcement)); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php new file mode 100644 index 00000000..9c740601 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php @@ -0,0 +1,82 @@ + 'Created Annoucement', + 'message' => 'You have successfully created a new Annoucements' + ]; + } + + /** @var CanCreateAnnouncement */ + private $canCreateAnnouncement; + + /** @var CreatesAnnoucement */ + private $createsAnnoucement; + + /** @var AssignAnnouncementToSegmentProcessor */ + private $assignAnnouncementToSegmentProcessor; + + + /** + * CreateAnnouncementLogic constructor. + * @param CanCreateAnnoucement $canCreateAnnoucement + * @param CreatesAnnoucement $createsAnnoucement + * @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor + */ + public function __construct( + CanCreateAnnouncement $canCreateAnnouncement, + CreatesAnnouncement $createsAnnoucement, + AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor + ) { + $this->canCreateAnnouncement = $canCreateAnnouncement; + $this->createsAnnoucement = $createsAnnoucement; + $this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor; + } + + /** + * @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') + ); + + $this->canCreateAnnouncement->passes($annoucement_object); + + $announcement = $this->createsAnnoucement->execute($annoucement_object); + + $this->assignAnnouncementToSegmentProcessor->execute($announcement); + + return $this->resourceResponse(new AnnouncementResource($announcement)); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/DeleteAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/DeleteAnnouncementLogic.php new file mode 100644 index 00000000..55dc710c --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/DeleteAnnouncementLogic.php @@ -0,0 +1,71 @@ + 'Delete Announcement', + 'message' => 'You have successfully deleted the Announcement' + ]; + } + + /** @var CanDeleteAnnouncement */ + private $canDeleteAnnouncement; + + /** @var FetchesAnnouncement */ + private $fetchesAnnouncement; + + /** @var DeletesAnnouncement */ + private $deletesAnnouncement; + + /** + * DeleteAnnouncementLogic constructor. + * @param CanDeleteAnnouncement $canDeleteAnnouncement + * @param FetchesAnnouncement $fetchesAnnouncement + * @param DeletesAnnouncement $deletesAnnouncement + */ + public function __construct( + CanDeleteAnnouncement $canDeleteAnnoucement, + FetchesAnnouncement $fetchesAnnoucement, + DeletesAnnouncement $deletesAnnoucement + ) { + $this->canDeleteAnnoucement = $canDeleteAnnoucement; + $this->fetchesAnnoucement = $fetchesAnnoucement; + $this->deletesAnnoucement = $deletesAnnoucement; + } + + /** + * @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->canDeleteAnnoucement->passes(); + + $annoucement = $this->fetchesAnnoucement->execute(['id' => $request->route('id')]); + + $this->deletesAnnoucement->execute($annoucement); + + return $this->response([]); + } +} 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/ControllersLogic/RemoveSegmentFromAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/RemoveSegmentFromAnnouncementLogic.php new file mode 100644 index 00000000..284d20b9 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/RemoveSegmentFromAnnouncementLogic.php @@ -0,0 +1,68 @@ + 'Detach Announcement From Segment', + 'message' => 'You have successfully detached Announcement from segment' + ]; + } + + /** @var FetchesAnnouncement */ + private $fetchesAnnnouncement; + + /** @var FetchesSegment */ + private $fetchesSegment; + + /** @var RemovesAnnouncementFromSegment */ + private $removesAnnouncementFromSegment; + + /** + * RemoveSegmentFromAnnouncementLogic constructor. + * @param FetchesAnnouncement $fetchesAnnnouncement + * @param FetchesSegment $fetchesSegment + * @param RemovesAnnouncementFromSegment $removesAnnouncementFromSegment + */ + public function __construct(FetchesAnnouncement $fetchesAnnnouncement, FetchesSegment $fetchesSegment, RemovesAnnouncementFromSegment $removesAnnouncementFromSegment) + { + $this->fetchesAnnnouncement = $fetchesAnnnouncement; + $this->fetchesSegment = $fetchesSegment; + $this->removesAnnouncementFromSegment = $removesAnnouncementFromSegment; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request): JsonResponse + { + + $announcement = $this->fetchesAnnnouncement->execute(['id' => $request->route('id')]); + + $segment = $this->fetchesSegment->execute(['id' => $request->route('segment_id')]); + + $this->removesAnnouncementFromSegment->execute($announcement, $segment); + + return $this->resourceResponse(new AnnouncementResource($announcement)); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php new file mode 100644 index 00000000..4fac4144 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php @@ -0,0 +1,83 @@ + 'Update Announcement', + 'message' => 'You have successfully updated the Announcement' + ]; + } + + /** @var CanUpdateAnnouncement */ + private $canUpdateAnnouncement; + + /** @var FetchesAnnouncement */ + private $fetchesAnnouncement; + + /** @var UpdatesAnnouncement */ + private $updatesAnnouncement; + + /** + * UpdateAnnouncementLogic constructor. + * @param CanUpdateAnnouncement $canUpdateAnnouncement + * @param FetchesAnnouncement $fetchesAnnouncement + * @param UpdatesAnnouncement $updatesAnnouncement + */ + public function __construct( + CanUpdateAnnouncement $canUpdateAnnouncement, + FetchesAnnouncement $fetchesAnnouncement, + UpdatesAnnouncement $updatesAnnouncement + ) { + $this->canUpdateAnnouncement = $canUpdateAnnouncement; + $this->fetchesAnnouncement = $fetchesAnnouncement; + $this->updatesAnnouncement = $updatesAnnouncement; + } + + /** + * @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') + ); + + $this->canUpdateAnnouncement->passes($annoucement_object); + + $annoucement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]); + + $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/DataTransferObjects/AnnouncementObject.php b/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php new file mode 100644 index 00000000..6493811d --- /dev/null +++ b/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php @@ -0,0 +1,73 @@ +title = $title; + $this->description = $description; + $this->starting_on = $starting_on; + $this->ending_on = $ending_on; + } + + /** + * @return string + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * @return string + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * @return Carbon + */ + public function getStartingOn(): Carbon + { +// return $this->starting_on; + return Carbon::parse($this->starting_on); + } + + /** + * @return Carbon + */ + public function getEndingOn(): Carbon + { +// return $this->ending_on; + return Carbon::parse($this->ending_on); + } +} diff --git a/app/Classes/Modules/Announcements/Processors/AssignAnnouncementToSegmentProcessor.php b/app/Classes/Modules/Announcements/Processors/AssignAnnouncementToSegmentProcessor.php new file mode 100644 index 00000000..f5468a80 --- /dev/null +++ b/app/Classes/Modules/Announcements/Processors/AssignAnnouncementToSegmentProcessor.php @@ -0,0 +1,56 @@ +canAssignSegment = $canAssignSegment; + $this->assignsAnnouncementToSegment = $assignsAnnouncementToSegment; + $this->fetchesSegment = $fetchesSegment; + } + + + /** + * @param Announcement $announcement + * @param int|null $segmentId + * @return Model + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function execute(Announcement $announcement, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model + { + $this->canAssignSegment->passes(); + + $segment = $this->fetchesSegment->execute(['id' => $segmentId]); + + return $this->assignsAnnouncementToSegment->execute($announcement, $segment); + } +} diff --git a/app/Classes/Modules/Announcements/Services/AssignsAnnouncementToSegment.php b/app/Classes/Modules/Announcements/Services/AssignsAnnouncementToSegment.php new file mode 100644 index 00000000..5cc459b1 --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/AssignsAnnouncementToSegment.php @@ -0,0 +1,33 @@ +segments()->attach($segment); + + return $announcement; + + } catch (QueryException $exception){ + throw new MalformedRequestException($exception); + } + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Services/CreatesAnnouncement.php b/app/Classes/Modules/Announcements/Services/CreatesAnnouncement.php new file mode 100644 index 00000000..4a43bac8 --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/CreatesAnnouncement.php @@ -0,0 +1,26 @@ +title = $object->getTitle(); + $model->description = $object->getDescription(); + $model->starting_on = $object->getStartingOn(); + $model->ending_on = $object->getEndingOn(); + + return $this->handler($model); + } +} diff --git a/app/Classes/Modules/Announcements/Services/DeletesAnnouncement.php b/app/Classes/Modules/Announcements/Services/DeletesAnnouncement.php new file mode 100644 index 00000000..82e312cc --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/DeletesAnnouncement.php @@ -0,0 +1,19 @@ +handler($model); + } +} \ No newline at end of file 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/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/Services/RemovesAnnouncementFromSegment.php b/app/Classes/Modules/Announcements/Services/RemovesAnnouncementFromSegment.php new file mode 100644 index 00000000..bd34d52f --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/RemovesAnnouncementFromSegment.php @@ -0,0 +1,33 @@ +segments()->detach($segment); + + return $announcement; + + } catch (QueryException $exception){ + throw new MalformedRequestException($exception); + } + + + } +} \ 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..98d5da7a --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php @@ -0,0 +1,27 @@ +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/CanAssignSegment.php b/app/Classes/Modules/Announcements/Standards/Rules/CanAssignSegment.php new file mode 100644 index 00000000..625a07a1 --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Rules/CanAssignSegment.php @@ -0,0 +1,40 @@ +AnnouncementValidation = $AnnouncementValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + 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/Classes/Modules/Announcements/Standards/Rules/CanDeleteAnnouncement.php b/app/Classes/Modules/Announcements/Standards/Rules/CanDeleteAnnouncement.php new file mode 100644 index 00000000..8a41deab --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Rules/CanDeleteAnnouncement.php @@ -0,0 +1,40 @@ +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/Classes/Modules/Announcements/Standards/Validators/AnnouncementValidation.php b/app/Classes/Modules/Announcements/Standards/Validators/AnnouncementValidation.php new file mode 100644 index 00000000..f094b8aa --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Validators/AnnouncementValidation.php @@ -0,0 +1,44 @@ + $object->getTitle(), + 'description' => $object->getDescription(), + 'starting_on' => $object->getStartingOn(), + 'ending_on' => $object->getEndingOn() + ]; + } + + /** + * @return array + */ + protected function rules(): array + { + return [ + 'title' => 'required', + 'description' => 'required', + 'starting_on' => 'required', + 'ending_on' => 'required' + ]; + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php b/app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php new file mode 100644 index 00000000..508d929f --- /dev/null +++ b/app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Announcements/CreateAnnouncementController.php b/app/Http/Controllers/Announcements/CreateAnnouncementController.php new file mode 100644 index 00000000..84da07cf --- /dev/null +++ b/app/Http/Controllers/Announcements/CreateAnnouncementController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Announcements/DeleteAnnouncementController.php b/app/Http/Controllers/Announcements/DeleteAnnouncementController.php new file mode 100644 index 00000000..257640d3 --- /dev/null +++ b/app/Http/Controllers/Announcements/DeleteAnnouncementController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Announcements/ListAnnouncementsController.php b/app/Http/Controllers/Announcements/ListAnnouncementsController.php new file mode 100644 index 00000000..a69dff50 --- /dev/null +++ b/app/Http/Controllers/Announcements/ListAnnouncementsController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php b/app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php new file mode 100644 index 00000000..86e15877 --- /dev/null +++ b/app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Announcements/UpdateAnnouncementController.php b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php new file mode 100644 index 00000000..72431980 --- /dev/null +++ b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php @@ -0,0 +1,21 @@ +execute($request); + } +} + diff --git a/app/Http/Resources/AnnouncementResource.php b/app/Http/Resources/AnnouncementResource.php new file mode 100644 index 00000000..26e1c2f9 --- /dev/null +++ b/app/Http/Resources/AnnouncementResource.php @@ -0,0 +1,28 @@ + $this->id, + 'title' => $this->title, + 'description' => $this->description, + 'segments' => $this->segments, + 'starting_on' => Carbon::parse($this->starting_on)->format('Y-m-d'), + 'ending_on' => Carbon::parse($this->ending_on)->format('Y-m-d'), + 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y'), + ]; + } +} diff --git a/app/Models/Announcement.php b/app/Models/Announcement.php new file mode 100644 index 00000000..b0094a6c --- /dev/null +++ b/app/Models/Announcement.php @@ -0,0 +1,26 @@ +BelongsToMany(Segment::class); + } +} diff --git a/database/migrations/2021_10_17_201021_create_announcements_table.php b/database/migrations/2021_10_17_201021_create_announcements_table.php new file mode 100644 index 00000000..35508479 --- /dev/null +++ b/database/migrations/2021_10_17_201021_create_announcements_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('title', 50); + $table->longText('description'); + $table->timestamp('starting_on')->nullable(); + $table->timestamp('ending_on')->nullable(); + $table->boolean('is_all_day')->default(false); + $table->integer('duration')->default(0); + $table->boolean('is_recurring')->default(false); + $table->string('recurrence_pattern')->nullable(); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('announcements'); + } +} diff --git a/database/migrations/2021_10_17_201244_create_announcement_segment_table.php b/database/migrations/2021_10_17_201244_create_announcement_segment_table.php new file mode 100644 index 00000000..c2777abf --- /dev/null +++ b/database/migrations/2021_10_17_201244_create_announcement_segment_table.php @@ -0,0 +1,40 @@ +primary(['announcement_id', 'segment_id']); + $table->bigInteger('announcement_id')->unsigned(); + $table->bigInteger('segment_id')->unsigned(); + $table->timestamps(); + $table->foreign('announcement_id') + ->references('id') + ->on('announcements')->onDelete('cascade'); + $table->foreign('segment_id') + ->references('id') + ->on('segments')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('announcement_segment'); + } +} diff --git a/routes/announcement.php b/routes/announcement.php new file mode 100644 index 00000000..6b460a01 --- /dev/null +++ b/routes/announcement.php @@ -0,0 +1,16 @@ + 'announcement', 'as' => 'announcement.', 'namespace' => 'Announcements'], function () { + Route::get('/list', 'ListAnnouncementsController@list')->name('list'); + Route::post('/create', 'CreateAnnouncementController@create')->name('create'); + Route::put('/update/{id}', 'UpdateAnnouncementController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteAnnouncementController@delete')->name('delete'); + + Route::group(['prefix' => '/{id}/segment', 'as' => 'segment.'], function () { + Route::post('/assign', 'AssignAnnouncementToSegmentController@assign')->name('assign'); + Route::delete('/detach/{segment_id}', 'RemoveSegmentFromAnnouncementController@detach')->name('detach'); + }); + +}); \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 7af38f07..eafbb856 100644 --- a/routes/api.php +++ b/routes/api.php @@ -59,4 +59,6 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function Route::get('/report/service', 'Reports\MonthlyReportController@serviceReport')->name('report.service'); }); + + require __DIR__ . '/announcement.php'; });