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 }