/ src / services / AdherentValidationService.php
AdherentValidationService.php
  1  <?php
  2  
  3  namespace ButA2SaeS3\services;
  4  
  5  use ButA2SaeS3\dto\AddAdherentDto;
  6  use ButA2SaeS3\dto\UpdateAdherentDto;
  7  use ButA2SaeS3\validation\ValidationResult;
  8  
  9  class AdherentValidationService
 10  {
 11      public static function validateAddAdherent(array $data): ValidationResult
 12      {
 13          return self::validateAdherent($data, null);
 14      }
 15  
 16      public static function validateUpdateAdherent(array $data, int $id): ValidationResult
 17      {
 18          return self::validateAdherent($data, $id);
 19      }
 20  
 21      private static function validateAdherent(array $data, ?int $id): ValidationResult
 22      {
 23          $result = ValidationResult::empty();
 24  
 25          $prenom = trim($data['prenom'] ?? '');
 26          $nom = trim($data['nom'] ?? '');
 27          $email = trim($data['email'] ?? '');
 28          $adresse = trim($data['adresse'] ?? '');
 29          $code_postal = trim($data['code_postal'] ?? '');
 30          $ville = trim($data['ville'] ?? '');
 31          $tel = trim($data['tel'] ?? '');
 32          $age = $data['age'] ?? '';
 33          $profession = trim($data['profession'] ?? '');
 34  
 35          if ($prenom === '') {
 36              $result->addMessage('prenom', 'Le prénom est requis');
 37          }
 38  
 39          if ($nom === '') {
 40              $result->addMessage('nom', 'Le nom est requis');
 41          }
 42  
 43          if ($email === '') {
 44              $result->addMessage('email', 'L\'email est requis');
 45          } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
 46              $result->addMessage('email', 'Veuillez entrer une adresse email valide');
 47          }
 48  
 49          if ($adresse === '') {
 50              $result->addMessage('adresse', 'L\'adresse est requise');
 51          }
 52  
 53          if ($code_postal === '') {
 54              $result->addMessage('code_postal', 'Le code postal est requis');
 55          } elseif (!preg_match('/^\d{5}$/', $code_postal)) {
 56              $result->addMessage('code_postal', 'Le code postal doit contenir 5 chiffres');
 57          }
 58  
 59          if ($ville === '') {
 60              $result->addMessage('ville', 'La ville est requise');
 61          }
 62  
 63          if ($tel === '') {
 64              $result->addMessage('tel', 'Le téléphone est requis');
 65          } elseif (!preg_match('/^(\+\d{1,3})?[\d\s\.\-\(\)]+$/', $tel)) {
 66              $result->addMessage('tel', 'Le numéro de téléphone n\'est pas valide');
 67          }
 68  
 69          if ($age === '') {
 70              $result->addMessage('age', 'L\'âge est requis');
 71          } elseif (!is_numeric($age) || $age < 0 || $age > 150) {
 72              $result->addMessage('age', 'L\'âge doit être un nombre entre 0 et 150');
 73          }
 74  
 75          if ($profession === '') {
 76              $result->addMessage('profession', 'La profession est requise');
 77          }
 78  
 79          if ($result->hasMessages()) {
 80              return $result;
 81          }
 82  
 83          if ($id === null) {
 84              $dto = new AddAdherentDto(
 85                  $prenom,
 86                  $nom,
 87                  $adresse,
 88                  $code_postal,
 89                  $ville,
 90                  $tel,
 91                  $email,
 92                  (string)$age,
 93                  $profession
 94              );
 95          } else {
 96              $dto = new UpdateAdherentDto(
 97                  $id,
 98                  $prenom,
 99                  $nom,
100                  $adresse,
101                  $code_postal,
102                  $ville,
103                  $tel,
104                  $email,
105                  (string)$age,
106                  $profession
107              );
108          }
109  
110          $result->setValue($dto);
111          return $result;
112      }
113  }