Переглянути джерело

remove useless persist operations and review cascade options

Olivier Massot 1 рік тому
батько
коміт
f00303f800

+ 17 - 7
src/Entity/Organization/Organization.php

@@ -83,10 +83,10 @@ class Organization
     #[ORM\OneToOne(mappedBy: 'organization', cascade: ['persist', 'remove'])]
     private Settings $settings;
 
-    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: Access::class, orphanRemoval: true)]
+    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: Access::class, cascade: ['persist'], orphanRemoval: true)]
     private Collection $accesses;
 
-    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: NetworkOrganization::class, orphanRemoval: true)]
+    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: NetworkOrganization::class, cascade: ['persist'], orphanRemoval: true)]
     private Collection $networkOrganizations;
 
     #[ORM\OneToMany(mappedBy: 'parent', targetEntity: NetworkOrganization::class, orphanRemoval: true)]
@@ -95,7 +95,7 @@ class Organization
     #[ORM\OneToMany(mappedBy: 'organization', targetEntity: EducationNotationConfig::class, orphanRemoval: true)]
     private Collection $educationNotationConfigs;
 
-    #[ORM\OneToOne(inversedBy: 'organization', targetEntity: Parameters::class)]
+    #[ORM\OneToOne(inversedBy: 'organization', targetEntity: Parameters::class, cascade: ['persist'])]
     #[ORM\JoinColumn(nullable: false)]
     private Parameters $parameters;
 
@@ -218,7 +218,7 @@ class Organization
     #[ORM\Column(nullable: true)]
     private ?string $otherPractice = null;
 
-    #[ORM\ManyToMany(targetEntity: ContactPoint::class, mappedBy: 'organization')]
+    #[ORM\ManyToMany(targetEntity: ContactPoint::class, mappedBy: 'organization', cascade: ['persist'], orphanRemoval: true)]
     private Collection $contactPoints;
 
     #[ORM\ManyToMany(targetEntity: BankAccount::class, inversedBy: 'organization')]
@@ -226,7 +226,7 @@ class Organization
     #[ORM\InverseJoinColumn(name: 'bankAccount_id', referencedColumnName: 'id')]
     private Collection $bankAccounts;
 
-    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: OrganizationAddressPostal::class, orphanRemoval: true)]
+    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: OrganizationAddressPostal::class, cascade: ['persist'], orphanRemoval: true)]
     private Collection $organizationAddressPostals;
 
     #[ORM\OneToMany(mappedBy: 'organization', targetEntity: OrganizationLicence::class, orphanRemoval: true)]
@@ -235,13 +235,13 @@ class Organization
     #[ORM\OneToMany(mappedBy: 'organization', targetEntity: OrganizationArticle::class, orphanRemoval: true)]
     private Collection $organizationArticles;
 
-    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: Cycle::class, orphanRemoval: true)]
+    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: Cycle::class, cascade: ['persist'], orphanRemoval: true)]
     private Collection $cycles;
 
     #[ORM\OneToMany(mappedBy: 'organization', targetEntity: EducationTiming::class, orphanRemoval: true)]
     private Collection $educationTimings;
 
-    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: Subdomain::class)]
+    #[ORM\OneToMany(mappedBy: 'organization', targetEntity: Subdomain::class, cascade: ['persist'])]
     private Collection $subdomains;
 
     #[ORM\ManyToOne(inversedBy: 'organizationContacts')]
@@ -1198,6 +1198,16 @@ class Organization
         return $this->subdomains;
     }
 
+    public function addSubdomain(Subdomain $subdomain): self
+    {
+        if (!$this->subdomains->contains($subdomain)) {
+            $this->subdomains[] = $subdomain;
+            $subdomain->setOrganization($this);
+        }
+
+        return $this;
+    }
+
     public function addAccess(Access $access): self
     {
         if (!$this->accesses->contains($access)) {

+ 1 - 1
src/Entity/Organization/OrganizationAddressPostal.php

@@ -43,7 +43,7 @@ class OrganizationAddressPostal
     #[ORM\JoinColumn(nullable: false)]
     private Organization $organization;
 
-    #[ORM\OneToOne(inversedBy: 'organizationAddressPostal', cascade: ['persist', 'remove'])]
+    #[ORM\OneToOne(inversedBy: 'organizationAddressPostal', cascade: ['persist', 'remove'], orphanRemoval: true)]
     #[ORM\JoinColumn(nullable: false)]
     #[Assert\Valid]
     #[Groups('address')]

+ 1 - 1
src/Entity/Person/PersonAddressPostal.php

@@ -29,7 +29,7 @@ class PersonAddressPostal
     #[ORM\JoinColumn(nullable: false)]
     private Person $person;
 
-    #[ORM\OneToOne(inversedBy: 'personAddressPostal', cascade: ['persist', 'remove'])]
+    #[ORM\OneToOne(inversedBy: 'personAddressPostal', cascade: ['persist', 'remove'], orphanRemoval: true)]
     #[ORM\JoinColumn(nullable: false)]
     #[Groups('access_address')]
     private AddressPostal $addressPostal;

+ 9 - 30
src/Service/Organization/OrganizationFactory.php

@@ -98,17 +98,10 @@ class OrganizationFactory
             $organization = $this->makeOrganizationWithRelations($organizationCreationRequest);
             $this->logger->info("Organization created with all its relations");
 
-            // On persiste et on commit
+            // On persiste et on commit, les objets liés seront persistés en cascade
             $this->entityManager->persist($organization);
             $this->entityManager->flush();
 
-            // Création de la société Dolibarr
-            $dolibarrId = $this->dolibarrApiService->createSociety(
-                $organization,
-                $organizationCreationRequest->isClient()
-            );
-            $this->logger->info("New dolibarr structure created (uid : " . $dolibarrId . ")");
-
             $this->entityManager->commit();
             $this->logger->debug(" - New entities committed in DB");
 
@@ -120,6 +113,13 @@ class OrganizationFactory
             throw $e;
         }
 
+        // Création de la société Dolibarr
+        $dolibarrId = $this->dolibarrApiService->createSociety(
+            $organization,
+            $organizationCreationRequest->isClient()
+        );
+        $this->logger->info("New dolibarr structure created (uid : " . $dolibarrId . ")");
+
         // Register the subdomain into the BindFile (takes up to 5min to take effect)
         $this->bindFileService->registerSubdomain($organizationCreationRequest->getSubdomain());
         $this->logger->info("Subdomain registered");
@@ -243,13 +243,12 @@ class OrganizationFactory
 
         // Création du sous-domaine
         $subdomain = $this->makeSubdomain($organizationCreationRequest);
-        $subdomain->setOrganization($organization);
+        $organization->addSubdomain($subdomain);
 
         // <--- Pour la rétrocompatibilité avec la v1 ; pourra être supprimé lorsque la migration sera achevée
         $parameters = $organization->getParameters();
         $parameters->setSubDomain($organizationCreationRequest->getSubdomain());
         $parameters->setOtherWebsite('https://' . $organizationCreationRequest->getSubdomain() . '.opentalent.fr');
-        $this->entityManager->persist($parameters);
         // --->
         $this->logger->debug(" - Subdomain created");
 
@@ -270,9 +269,6 @@ class OrganizationFactory
         $organization->setLegalStatus($organizationCreationRequest->getLegalStatus());
         $organization->setPrincipalType($organizationCreationRequest->getPrincipalType());
         $organization->setIdentifier($organizationCreationRequest->getIdentifier());
-
-        $this->entityManager->persist($organization);
-
         return $organization;
     }
 
@@ -286,7 +282,6 @@ class OrganizationFactory
     protected function makeParameters(OrganizationCreationRequest $organizationCreationRequest): Parameters
     {
         $parameters = new Parameters();
-        $this->entityManager->persist($parameters);
         return $parameters;
     }
 
@@ -301,7 +296,6 @@ class OrganizationFactory
     {
         $settings = new Settings();
         $settings->setProduct($organizationCreationRequest->getProduct());
-        $this->entityManager->persist($settings);
         return $settings;
     }
 
@@ -326,12 +320,10 @@ class OrganizationFactory
         $addressPostal->setPostalCode($organizationCreationRequest->getPostalCode());
         $addressPostal->setAddressCity($organizationCreationRequest->getCity());
         $addressPostal->setAddressCountry($country);
-        $this->entityManager->persist($addressPostal);
 
         $organizationAddressPostal = new OrganizationAddressPostal();
         $organizationAddressPostal->setAddressPostal($addressPostal);
         $organizationAddressPostal->setType(AddressPostalOrganizationTypeEnum::ADDRESS_HEAD_OFFICE);
-        $this->entityManager->persist($organizationAddressPostal);
 
         return $organizationAddressPostal;
     }
@@ -356,7 +348,6 @@ class OrganizationFactory
         $contactPoint->setContactType(ContactPointTypeEnum::PRINCIPAL);
         $contactPoint->setEmail($organizationCreationRequest->getEmail());
         $contactPoint->setTelphone($phoneNumber);
-        $this->entityManager->persist($contactPoint);
 
         return $contactPoint;
     }
@@ -409,7 +400,6 @@ class OrganizationFactory
         $networkOrganization->setParent($parent);
         $networkOrganization->setNetwork($network);
         $networkOrganization->setStartDate(DatesUtils::new());
-        $this->entityManager->persist($networkOrganization);
 
         return $networkOrganization;
     }
@@ -427,12 +417,10 @@ class OrganizationFactory
         $admin->setUsername('admin' . strtolower($organizationCreationRequest->getSubdomain()));
         $randomString = ByteString::fromRandom(32)->toString();
         $admin->setPassword($randomString);
-        $this->entityManager->persist($admin);
 
         $adminAccess = new Access();
         $adminAccess->setAdminAccess(true);
         $adminAccess->setPerson($admin);
-        $this->entityManager->persist($adminAccess);
 
         return $adminAccess;
     }
@@ -461,7 +449,6 @@ class OrganizationFactory
             $cycle->setOrder($cycleData[1]);
             $cycle->setCycleEnum($cycleData[2]);
             $cycle->setIsSystem(false);
-            $this->entityManager->persist($cycle);
             $cycles[] = $cycle;
         }
 
@@ -501,13 +488,10 @@ class OrganizationFactory
 
             $contactPoint = $this->makePersonContactPoint($creationRequestData);
             $person->addContactPoint($contactPoint);
-
-            $this->entityManager->persist($person);
         }
 
         $access = new Access();
         $access->setPerson($person);
-        $this->entityManager->persist($access);
 
         return $access;
     }
@@ -531,12 +515,10 @@ class OrganizationFactory
 
         $country = $this->countryRepository->find($organizationMemberCreationRequest->getCountryId());
         $addressPostal->setAddressCountry($country);
-        $this->entityManager->persist($addressPostal);
 
         $personAddressPostal = new PersonAddressPostal();
         $personAddressPostal->setAddressPostal($addressPostal);
         $personAddressPostal->setType(AddressPostalPersonTypeEnum::ADDRESS_PRINCIPAL);
-        $this->entityManager->persist($personAddressPostal);
 
         return $personAddressPostal;
     }
@@ -564,7 +546,6 @@ class OrganizationFactory
             $contactPoint->setMobilPhone($mobileNumber);
         }
 
-        $this->entityManager->persist($contactPoint);
         return $contactPoint;
     }
 
@@ -573,8 +554,6 @@ class OrganizationFactory
         $subdomain = new Subdomain();
         $subdomain->setSubdomain($organizationCreationRequest->getSubdomain());
         $subdomain->setActive(true);
-        $this->entityManager->persist($subdomain);
-
         return $subdomain;
     }