all()) ->initSearch(['title', 'body', 'severity']) ->select(['*']) ->export($query); return $query; } public function store(Request $request) { $data = $this->validatedPayload($request); $user = auth()->user(); $row = AppNotification::create([ ...$data, 'is_active' => $data['is_active'] ?? true, 'created_by' => $user?->id, ]); return response()->json($row, 201); } public function update(Request $request, int $id) { $row = AppNotification::findOrFail($id); $data = $this->validatedPayload($request, true); $row->update($data); return response()->json(true); } public function toggleActive(int $id) { $row = AppNotification::findOrFail($id); $row->is_active = ! $row->is_active; $row->save(); return response()->json([ 'is_active' => (bool) $row->is_active, ]); } public function destroy(int $id) { AppNotification::findOrFail($id)->delete(); return response()->json(true); } private function validatedPayload(Request $request, bool $partial = false): array { $rules = [ 'title' => ($partial ? 'sometimes|' : '') . 'required|string|max:191', 'body' => ($partial ? 'sometimes|' : '') . 'required|string|max:5000', 'severity' => ($partial ? 'sometimes|' : '') . 'required|in:info,success,warning,danger', 'is_active' => 'sometimes|boolean', ]; return $request->validate($rules); } }