validate([ 'entity_type' => 'required|in:lead,company,deal', 'entity_id' => 'required|integer', 'content' => 'required|string', ]); $model = $this->resolve($validated['entity_type'], $validated['entity_id']); $note = $model->notes()->create([ 'user_id' => auth()->id(), 'content' => $validated['content'], ]); ActivityLogger::log('note_created', 'یادداشت جدید ثبت شد', $model); return response()->json($note->load('user:id,name'), 201); } public function destroy(Note $note): JsonResponse { abort_unless(auth()->id() === $note->user_id || auth()->user()?->hasRole('admin'), 403, 'دسترسی غیرمجاز'); $note->delete(); ActivityLogger::log('note_deleted', "Note {$note->id} deleted"); return response()->json(['message' => 'یادداشت حذف شد']); } private function resolve(string $type, int $id): Lead|Company|Deal { return match ($type) { 'lead' => Lead::findOrFail($id), 'company' => Company::findOrFail($id), 'deal' => Deal::findOrFail($id), }; } }