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.'); } } }