feat: add reminder per package

This commit is contained in:
2025-12-12 18:37:09 +03:30
parent 81c8b90a58
commit 2e9117cb48
2 changed files with 81 additions and 0 deletions
@@ -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);
}
}
+12
View File
@@ -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');
});
});