orderBy('time') ->get(); return response()->json($reminders); } public function store(Request $request) { $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', ]); $packageNameData = $request->validate([ 'package_name' => 'required|exists:package_names,name', ]); if (!$packageName = PackageName::with('products')->where('name', $packageNameData['package_name'])->first()) { return response()->json([ 'message' => 'package name not found' ], 404); } $reminder = Reminder::create([...$data, 'package_name_id' => $packageName->id, 'user_id' => auth()->user()->id]); return $reminder; } public function show(Reminder $reminder) { $this->authorizeReminder($reminder); return response()->json($reminder); } public function update(Request $request, Reminder $reminder) { $this->authorizeReminder($reminder); $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', ]); $packageNameData = $request->validate([ 'package_name' => 'required|exists:package_names,name', ]); if (!$packageName = PackageName::with('products')->where('name', $packageNameData['package_name'])->first()) { return response()->json([ 'message' => 'package name not found' ], 404); } $reminder->update([...$data, 'package_name_id' => $packageName->id]); return response()->json($reminder); } public function destroy(Reminder $reminder) { $this->authorizeReminder($reminder); $reminder->delete(); return response()->json(null, 204); } private function authorizeReminder(Reminder $reminder) { if ($reminder->user_id !== Auth::id()) { 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' => null ]); 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); } }