Skip to content

Commit 4e0240b

Browse files
committed
Enhance category retrieval in ListCategoryController to support gender filtering
This commit updates the getCategoryWithParentIdNull and getCategoriesByGender methods in the ListCategoryController to allow for optional gender filtering based on request parameters. It introduces caching mechanisms for gender-specific root categories and filters child categories accordingly, improving the efficiency and flexibility of category retrieval.
1 parent 2252a09 commit 4e0240b

File tree

1 file changed

+38
-14
lines changed

1 file changed

+38
-14
lines changed

app/Http/Controllers/ListCategoryController.php

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)