contactService = $contactService; $this->memberService = $memberService; $this->middleware('auth:sanctum'); } public function index() { $contacts = $this->contactService->getAll(); return response()->json($contacts, 201); } public function store(ContactStore $request) { $member = $this->memberService->get($request->member_id); if (!$member) { return response()->json(['message' => 'Member not found.'], 404); } $isSuperAdmin = auth()->user()->hasRole('super_admin'); $isAdmin = auth()->user()->hasRole('admin'); $isSuperAdminOrAdmin = $isSuperAdmin || $isAdmin; $isUserDelegated = $member->user_id === auth()->user()->id; if ( !$isSuperAdmin && !$isAdmin && !$isUserDelegated ) { return response()->json(['message' => 'You have no rights to do this'], 401); } $request_data = $request->validated(); // if is an user delegated to work with that member, remove approved_by and approved_at $request_data['revisor_id'] = $isSuperAdminOrAdmin ? auth()->user()->id : null; $request_data['approved_at'] = $isSuperAdminOrAdmin ? now() : null; $contact = $this->contactService->save($request_data); return response()->json($contact, 201); } public function show($id) { $contact = $this->contactService->get($id); return response()->json($contact); } public function destroy($id) { $isSuperAdmin = auth()->user()->hasRole('super_admin'); $isAdmin = auth()->user()->hasRole('admin'); $isSuperAdminOrAdmin = $isSuperAdmin || $isAdmin; if (!$isSuperAdminOrAdmin) { return response()->json(['message' => 'You have no rights to do this'], 401); } $this->contactService->delete($id); return response()->json(null, 204); } }