Преглед изворни кода

Gestion des sort plus propre

Sangfroid пре 1 дан
родитељ
комит
6b52c19c49

+ 13 - 1
src/Dto/FiltersDTO.php

@@ -4,6 +4,7 @@ namespace App\Dto;
 
 use App\Entity\User;
 use Symfony\Component\Validator\Constraints as Assert;
+use SortDirection;
 
 class FiltersDTO
 {
@@ -34,6 +35,17 @@ class FiltersDTO
         $this->note = $this->note === '' ? null : (int)$this->note;
     }
 
+    /**
+     * L'API Doctrine attend un enum SortDirection ; le formulaire et
+     * MapQueryString livrent 'ASC'/'DESC' en string, la conversion se fait ici.
+     */
+    public function getSortDirection(): SortDirection
+    {
+        return strcasecmp($this->sortOrder, 'DESC') === 0
+            ? SortDirection::Descending
+            : SortDirection::Ascending;
+    }
+
     /**
      * @return array<string, mixed>
      */
@@ -43,7 +55,7 @@ class FiltersDTO
             'limit'     => $this->limit,
             'username'  => $this->userName,
             'sortBy'    => $this->sortBy,
-            'sortOrder' => $this->sortOrder,
+            'sortOrder' => $this->getSortDirection(),
             'note'      => (int)$this->note,
             'userWantToView' => $this->userWantToView,
             'page'      => $this->page

+ 2 - 1
src/Form/FiltersType.php

@@ -13,6 +13,7 @@ use Symfony\Component\Form\Extension\Core\Type\HiddenType;
 use Symfony\Component\Form\Extension\Core\Type\NumberType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
+use SortDirection;
 
 class FiltersType extends AbstractType
 {
@@ -40,7 +41,7 @@ class FiltersType extends AbstractType
                 },
                 'query_builder' => function (UserRepository $er): QueryBuilder {
                     return $er->createQueryBuilder('u')
-                        ->orderBy('u.username', 'ASC');
+                        ->orderBy('u.username', SortDirection::Ascending);
                 }
             ])
             ->add('sortBy', ChoiceType::class, [

+ 4 - 3
src/Repository/CommentaireRepository.php

@@ -5,6 +5,7 @@ namespace App\Repository;
 use App\Entity\Commentaire;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\Persistence\ManagerRegistry;
+use SortDirection;
 
 /**
  * @extends ServiceEntityRepository<Commentaire>
@@ -29,7 +30,7 @@ class CommentaireRepository extends ServiceEntityRepository
             ->innerJoin("c.user", "usr")
             ->addSelect("usr")
             ->setMaxResults($limit)
-            ->orderBy("c.id", "DESC")
+            ->orderBy("c.id", SortDirection::Descending)
             ->getQuery()
             ->getResult();
     }
@@ -42,7 +43,7 @@ class CommentaireRepository extends ServiceEntityRepository
             )
             ->where("c.dateSubmitted IS NOT NULL")
             ->groupBy("month")
-            ->orderBy("month", "ASC")
+            ->orderBy("month", SortDirection::Ascending)
             ->getQuery()
             ->getResult();
     }
@@ -52,7 +53,7 @@ class CommentaireRepository extends ServiceEntityRepository
         // Construire une requête pour obtenir la première date d'ajout
         return $this->createQueryBuilder("c")
             ->select("c.dateSubmitted")
-            ->orderBy("c.dateSubmitted", "ASC") // Trier par date croissante
+            ->orderBy("c.dateSubmitted", SortDirection::Ascending) // Trier par date croissante
             ->setMaxResults(1) // Limiter à 1 résultat (la première date)
             ->getQuery()
             ->getOneOrNullResult(); // Récupérer le premier résultat ou null

+ 18 - 12
src/Repository/FilmRepository.php

@@ -7,6 +7,7 @@ use App\Entity\User;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\ORM\QueryBuilder;
 use Doctrine\Persistence\ManagerRegistry;
+use SortDirection;
 
 /**
  * @extends ServiceEntityRepository<Film>
@@ -37,7 +38,7 @@ class FilmRepository extends ServiceEntityRepository
 
     /**
      * @param array<int, string> $genreNames
-     * @param array<string, string> $filters
+     * @param array<string, SortDirection|string> $filters
      */
     public function queryFilmWithGenre(
         array $genreNames,
@@ -65,7 +66,7 @@ class FilmRepository extends ServiceEntityRepository
 
     /**
      * @param array<int, string> $realisateursNames
-     * @param array<string, string> $filters
+     * @param array<string, SortDirection|string> $filters
      */
     public function queryFilmWithReal(
         array $realisateursNames,
@@ -118,24 +119,29 @@ class FilmRepository extends ServiceEntityRepository
     }
 
     /**
-     * @param array<string, string> $filters
+     * @param array<string, SortDirection|string> $filters
      */
     public function queryFilter(
         int $page = 1,
         array $filters = [],
     ): QueryBuilder {
         $qb = $this->createQueryBuilder("f");
-        
+
         $sortBy = $filters["sortBy"] ?? "dateSubmited";
-        $sortOrder = $filters["sortOrder"] ?? "DESC";
-        
+        $sortOrder = $filters["sortOrder"] ?? SortDirection::Descending;
+        $direction = $sortOrder instanceof SortDirection
+            ? $sortOrder
+            : (strcasecmp((string) $sortOrder, "DESC") === 0
+                ? SortDirection::Descending
+                : SortDirection::Ascending);
+
         if ($sortBy === "note") {
             $qb->orderBy(
                 "(SELECT AVG(c.note) FROM App\\Entity\\Commentaire c WHERE c.film = f AND c.note IS NOT NULL)",
-                $sortOrder
+                $direction
             );
         } else {
-            $qb->orderBy("f." . $sortBy, $sortOrder);
+            $qb->orderBy("f." . $sortBy, $direction);
         }
 
         if (!empty($filters["userWantToView"])) {
@@ -166,7 +172,7 @@ class FilmRepository extends ServiceEntityRepository
     }
 
     /**
-     * @param array<string, string> $filters
+     * @param array<string, SortDirection|string> $filters
      */
     public function queryTous(int $page = 1, array $filters = []): QueryBuilder
     {
@@ -195,7 +201,7 @@ class FilmRepository extends ServiceEntityRepository
             ->addSelect("rea")
             ->where("f.dateSortie > :date")
             ->setParameter("date", $date)
-            ->orderBy("f.dateSortie", "ASC");
+            ->orderBy("f.dateSortie", SortDirection::Ascending);
         return $qb->getQuery()->getResult();
     }
 
@@ -274,7 +280,7 @@ class FilmRepository extends ServiceEntityRepository
                 "DATE_FORMAT(f.dateSubmited, '%Y-%m') as month, COUNT(f.id) as entryCount",
             )
             ->groupBy("month")
-            ->orderBy("month", "ASC")
+            ->orderBy("month", SortDirection::Ascending)
             ->getQuery()
             ->getResult();
     }
@@ -306,7 +312,7 @@ class FilmRepository extends ServiceEntityRepository
         // Construire une requête pour obtenir la première date d'ajout
         return $this->createQueryBuilder("f")
             ->select("f.dateSubmited")
-            ->orderBy("f.dateSubmited", "ASC") // Trier par date croissante
+            ->orderBy("f.dateSubmited", SortDirection::Ascending) // Trier par date croissante
             ->setMaxResults(1) // Limiter à 1 résultat (la première date)
             ->getQuery()
             ->getOneOrNullResult(); // Récupérer le premier résultat ou null

+ 1 - 1
src/Repository/ProfileRepository.php

@@ -39,7 +39,7 @@ class ProfileRepository extends ServiceEntityRepository
         return $this->createQueryBuilder('p')
             ->andWhere('p.exampleField = :val')
             ->setParameter('val', $value)
-            ->orderBy('p.id', 'ASC')
+            ->orderBy('p.id', SortDirection::Ascending)
             ->setMaxResults(10)
             ->getQuery()
             ->getResult()