fix: réduire returns de applyNextNumber (4→2) + exclure templates email SonarQube

OrderNumberController :
- Extraction validateNumber() avec les 3 validations (format, existence, minimum)
- applyNextNumber réduit à 2 returns (erreur validation ou null succès)

sonar-project.properties :
- Ajout templates/email/** et templates/emails/** dans sonar.exclusions
  (templates HTML email non analysables par SonarQube)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-04-03 11:09:23 +02:00
parent 22cfefc900
commit b299b7d781
2 changed files with 26 additions and 14 deletions

View File

@@ -10,7 +10,7 @@ sonar.sourceEncoding=UTF-8
sonar.php.version=8.4
# Exclusions
sonar.exclusions=vendor/**,var/**,public/bundles/**,node_modules/**,assets/vendor/**,migrations/**,src/Repository/**,src/Controller/WebhookDocuSealController.php,src/Controller/DnsReportController.php,src/Command/CheckDnsCommand.php,src/Command/CloudflareDnsCleanCommand.php,src/Service/AwsSesService.php,src/Service/CloudflareService.php,src/Service/DnsInfraHelper.php,src/Service/DnsCheckService.php,src/Service/StripePriceService.php,src/Service/StripeWebhookService.php,src/Service/MailcowService.php
sonar.exclusions=vendor/**,var/**,public/bundles/**,node_modules/**,assets/vendor/**,migrations/**,src/Repository/**,templates/email/**,templates/emails/**,src/Controller/WebhookDocuSealController.php,src/Controller/DnsReportController.php,src/Command/CheckDnsCommand.php,src/Command/CloudflareDnsCleanCommand.php,src/Service/AwsSesService.php,src/Service/CloudflareService.php,src/Service/DnsInfraHelper.php,src/Service/DnsCheckService.php,src/Service/StripePriceService.php,src/Service/StripeWebhookService.php,src/Service/MailcowService.php
# Coverage
sonar.php.coverage.reportPaths=var/reports/coverage.xml

View File

@@ -47,24 +47,16 @@ class OrderNumberController extends AbstractController
private function applyNextNumber(Request $request, OrderNumberRepository $repository, EntityManagerInterface $em): ?string
{
$error = $this->validateNumber($request->request->getString('next_number'), $repository);
if (null !== $error) {
return $error;
}
$newNumber = trim($request->request->getString('next_number'));
if ('' === $newNumber || !preg_match('/^\d{2}\/\d{4}-\d{5}$/', $newNumber)) {
return 'Format invalide. Utilisez le format MM/YYYY-XXXXX (ex: 04/2026-00042).';
}
if (null !== $repository->findOneBy(['numOrder' => $newNumber])) {
return 'Le numero '.$newNumber.' existe deja.';
}
$parts = explode('-', $newNumber);
$prefix = $parts[0].'-';
$previousNum = (int) $parts[1] - 1;
if ($previousNum < 0) {
return 'Le numero doit etre au minimum 00001.';
}
$previousNumOrder = $prefix.str_pad((string) $previousNum, 5, '0', \STR_PAD_LEFT);
if (null === $repository->findOneBy(['numOrder' => $previousNumOrder]) && $previousNum > 0) {
@@ -78,4 +70,24 @@ class OrderNumberController extends AbstractController
return null;
}
private function validateNumber(string $rawNumber, OrderNumberRepository $repository): ?string
{
$newNumber = trim($rawNumber);
if ('' === $newNumber || !preg_match('/^\d{2}\/\d{4}-\d{5}$/', $newNumber)) {
return 'Format invalide. Utilisez le format MM/YYYY-XXXXX (ex: 04/2026-00042).';
}
if (null !== $repository->findOneBy(['numOrder' => $newNumber])) {
return 'Le numero '.$newNumber.' existe deja.';
}
$counter = (int) explode('-', $newNumber)[1];
if ($counter < 1) {
return 'Le numero doit etre au minimum 00001.';
}
return null;
}
}