security->isGranted('ROLE_ADMIN')) { throw new AccessDeniedException('Access denied: ROLE_ADMIN required.'); } $parents = array_filter([$clientId, $prospectId, $prestataireId], static fn ($v) => null !== $v); if (1 !== count($parents)) { throw new InvalidArgumentException('Exactly one of clientId, prospectId or prestataireId must be provided.'); } $contact = new Contact(); if (null !== $clientId) { $client = $this->clientRepository->findById($clientId); if (null === $client) { throw new InvalidArgumentException(sprintf('Client with ID %d not found.', $clientId)); } $contact->setClient($client); } if (null !== $prospectId) { $prospect = $this->prospectRepository->findById($prospectId); if (null === $prospect) { throw new InvalidArgumentException(sprintf('Prospect with ID %d not found.', $prospectId)); } $contact->setProspect($prospect); } if (null !== $prestataireId) { $prestataire = $this->prestataireRepository->findById($prestataireId); if (null === $prestataire) { throw new InvalidArgumentException(sprintf('Prestataire with ID %d not found.', $prestataireId)); } $contact->setPrestataire($prestataire); } $contact->setFirstName($firstName); $contact->setLastName($lastName); $contact->setJobTitle($jobTitle); $contact->setEmail($email); $contact->setPhonePrimary($phonePrimary); $contact->setPhoneSecondary($phoneSecondary); $this->entityManager->persist($contact); $this->entityManager->flush(); return json_encode(Serializer::contact($contact)); } }