CRM/backend/app/Http/Controllers/Api/NoteController.php

51 خطوط
1.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Company;
use App\Models\Deal;
use App\Models\Lead;
use App\Models\Note;
use App\Services\ActivityLogger;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class NoteController extends Controller
{
public function store(Request $request): JsonResponse
{
$validated = $request->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),
};
}
}