/ src / services / ArticleValidationService.php
ArticleValidationService.php
 1  <?php
 2  
 3  namespace ButA2SaeS3\services;
 4  
 5  use ButA2SaeS3\dto\AddArticleDto;
 6  use ButA2SaeS3\validation\ValidationResult;
 7  
 8  class ArticleValidationService
 9  {
10      public static function validateAddArticle(array $data): ValidationResult
11      {
12          $result = ValidationResult::empty();
13  
14          $title = trim($data['title'] ?? '');
15          $content = trim($data['content'] ?? '');
16          $status = $data['status'] ?? 'draft';
17  
18          if ($title === '') {
19              $result->addMessage('title', 'Le titre est requis');
20          }
21  
22          if ($content === '') {
23              $result->addMessage('content', 'Le contenu est requis');
24          }
25  
26          if ($status !== 'draft' && $status !== 'published') {
27              $result->addMessage('status', 'Statut invalide');
28          }
29  
30          if ($result->hasMessages()) {
31              return $result;
32          }
33  
34          $result->setValue(new AddArticleDto($title, $content, $status));
35          return $result;
36      }
37  
38      public static function validateUpdateArticle(array $data, int $id): ValidationResult
39      {
40          $result = self::validateAddArticle($data);
41          if ($result->hasMessages()) {
42              return $result;
43          }
44  
45          /** @var AddArticleDto $addDto */
46          $addDto = $result->value();
47          $result->setValue(new \ButA2SaeS3\dto\UpdateArticleDto($id, $addDto->title, $addDto->content, $addDto->status));
48          return $result;
49      }
50  }