@@ -42,16 +42,33 @@ public function showCategoryByGender($id){
4242 //$response = CategoryResource::collection($categories);
4343 return response ()->json (['categories ' =>$ categories ],200 );
4444 }
45- public function getCategoryWithParentIdNull (){
46- $ rootCategories = Cache::remember ('root_categories ' , 60 , function () {
47- return Category::whereDoesntHave ('parent ' )->get ();
48- });
45+ public function getCategoryWithParentIdNull (Request $ request ){
46+ // Vérifier si un genre est spécifié dans la requête
47+ if ($ request ->has ('gender ' ) && $ request ->gender ) {
48+ $ genderId = $ request ->gender ;
49+
50+ $ rootCategories = Cache::remember ('root_categories_gender_ ' . $ genderId , 60 , function () use ($ genderId ) {
51+ return Category::whereDoesntHave ('parent ' )
52+ ->whereHas ('genders ' , function ($ query ) use ($ genderId ) {
53+ $ finalIds = [];
54+ if ($ genderId == 4 ){
55+ $ finalIds = [1 , 2 , 3 ];
56+ } else {
57+ $ finalIds = [$ genderId ];
58+ }
59+ $ query ->whereIn ('genders.id ' , $ finalIds );
60+ })->get ();
61+ });
62+ } else {
63+ $ rootCategories = Cache::remember ('root_categories ' , 60 , function () {
64+ return Category::whereDoesntHave ('parent ' )->get ();
65+ });
66+ }
4967
5068
5169 return CategoryResource::collection ($ rootCategories );
5270 }
53- public function getCategoriesByGender ($ parentCategoryId ) {
54- // Récupérer la catégorie parente
71+ public function getCategoriesByGender ($ parentCategoryId ,Request $ request ) {
5572 $ parentCategory = Cache::remember ('parent_category_ ' .$ parentCategoryId , 60 , function () use ($ parentCategoryId ) {
5673 return Category::find ($ parentCategoryId );
5774 });
@@ -60,16 +77,27 @@ public function getCategoriesByGender($parentCategoryId) {
6077 return response ()->json (['message ' => 'Catégorie parente non trouvée ' ], 404 );
6178 }
6279
63- // Récupérer les sous-catégories
6480 $ children = Cache::remember ('children_category_ ' .$ parentCategoryId , 60 , function () use ($ parentCategory ) {
6581 return $ parentCategory ->children ;
6682 });
6783
68- // Organiser les sous-catégories par genre
84+ if ($ request ->has ('gender ' ) && $ request ->gender ) {
85+ $ genderId = (int ) $ request ->gender ;
86+ $ finalIds = $ genderId === 4 ? [1 , 2 , 3 ] : [$ genderId ];
87+
88+ $ filtered = $ children ->filter (function ($ child ) use ($ finalIds ) {
89+ return $ child ->genders ()->whereIn ('genders.id ' , $ finalIds )->exists ();
90+ })->values ();
91+
92+ // Charger la relation genders pour la réponse
93+ $ filtered ->load ('genders ' );
94+
95+ return response ()->json (['categories ' => $ filtered ], 200 );
96+ }
97+
6998 $ categoriesByGender = [];
7099
71100 foreach ($ children as $ child ) {
72- // Vérifier si la sous-catégorie a des genres
73101 if ($ child ->genders ->isNotEmpty ()) {
74102 foreach ($ child ->genders as $ gender ) {
75103 $ genderName = $ gender ->gender_name ;
@@ -81,15 +109,11 @@ public function getCategoriesByGender($parentCategoryId) {
81109 $ categoriesByGender [$ genderName ][] = $ child ;
82110 }
83111 } else {
84- // Si pas de genre, ajouter l'enfant et vérifier pour ses enfants
85112 $ categoriesByGender ['sans_genre ' ][] = $ child ;
86113
87- // Récursion pour ajouter les enfants de cette sous-catégorie
88114 if ($ child ->children ->isNotEmpty ()) {
89- // Appel de la fonction
90- $ response = $ this ->getCategoriesByGender ($ child ->id );
115+ $ response = $ this ->getCategoriesByGender ($ child ->id , new Request ());
91116
92- // Récupérer les données de la réponse JSON
93117 $ categoriesData = $ response ->getData ();
94118 $ categoriesByGender ['sans_genre ' ] = array_merge (
95119 $ categoriesByGender ['sans_genre ' ],
0 commit comments