From 2e9117cb48c3ac3f5d7e50adfb2dfc54b302b02a Mon Sep 17 00:00:00 2001 From: AmirmahdiNourkazemi Date: Fri, 12 Dec 2025 18:37:09 +0330 Subject: [PATCH] feat: add reminder per package --- app/Http/Controllers/ReminderController.php | 69 +++++++++++++++++++++ routes/api.php | 12 ++++ 2 files changed, 81 insertions(+) diff --git a/app/Http/Controllers/ReminderController.php b/app/Http/Controllers/ReminderController.php index 06488c6..0c28d39 100644 --- a/app/Http/Controllers/ReminderController.php +++ b/app/Http/Controllers/ReminderController.php @@ -92,4 +92,73 @@ private function authorizeReminder(Reminder $reminder) abort(403, 'Unauthorized action.'); } } + + + + + public function packageIndex(PackageName $packageName) +{ + $reminders = Reminder::where('user_id', Auth::id()) + ->where('package_name_id', $packageName->id) + ->orderBy('time') + ->get(); + + return response()->json($reminders); +} + +public function packageStore(Request $request, PackageName $packageName) +{ + $data = $request->validate([ + 'title' => 'required|string|max:255', + 'description' => 'nullable|string|max:500', + 'time' => 'required|date', + 'repeatable' => 'boolean', + 'repeat_days' => 'nullable|integer|min:1', + 'data' => 'nullable|array', + ]); + + $reminder = Reminder::create([ + ...$data, + 'package_name_id' => $packageName->id, + 'user_id' => Auth::id() + ]); + + return response()->json($reminder, 201); +} + +public function packageUpdate(Request $request, PackageName $packageName, Reminder $reminder) +{ + $this->authorizeReminder($reminder); + + if ($reminder->package_name_id !== $packageName->id) { + return response()->json(['message' => 'This reminder does not belong to this package'], 403); + } + + $data = $request->validate([ + 'title' => 'sometimes|string|max:255', + 'description' => 'nullable|string|max:500', + 'time' => 'sometimes|date', + 'repeatable' => 'boolean', + 'repeat_days' => 'nullable|integer|min:1', + 'data' => 'nullable|array', + ]); + + $reminder->update($data); + + return response()->json($reminder); +} + +public function packageDestroy(PackageName $packageName, Reminder $reminder) +{ + $this->authorizeReminder($reminder); + + if ($reminder->package_name_id !== $packageName->id) { + return response()->json(['message' => 'This reminder does not belong to this package'], 403); + } + + $reminder->delete(); + + return response()->json(null, 204); +} + } diff --git a/routes/api.php b/routes/api.php index 3b6116b..2e57578 100644 --- a/routes/api.php +++ b/routes/api.php @@ -102,4 +102,16 @@ Route::delete('/promotions/{promotion}', [PromotionController::class, 'destroy']); Route::get('/asanpardakht/pay', [AsanPardakhtController::class, 'pay']); + + + Route::middleware('abilities:admin')->prefix('package-names/{package_name}/reminders') + ->middleware('auth:sanctum') + ->controller(ReminderController::class) + ->group(function () { + Route::get('/', 'packageIndex'); + Route::post('/', 'packageStore'); + Route::put('/{reminder}', 'packageUpdate'); + Route::delete('/{reminder}', 'packageDestroy'); + }); + });