From 7a2cece1f3adeebcb4f7c6085bda9420e6267f06 Mon Sep 17 00:00:00 2001 From: MartinBraquet Date: Thu, 31 Jul 2025 15:23:43 +0200 Subject: [PATCH] Add age filtering --- app/api/profiles/route.ts | 19 +++++++++++++++++++ app/profiles/ProfileFilters.tsx | 28 +++++++++++++++++++++++++++- app/profiles/page.tsx | 4 ++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/app/api/profiles/route.ts b/app/api/profiles/route.ts index 2e5dcc64..2965fbee 100644 --- a/app/api/profiles/route.ts +++ b/app/api/profiles/route.ts @@ -6,6 +6,8 @@ export async function GET(request: Request) { const url = new URL(request.url); const page = parseInt(url.searchParams.get("page") || "1"); const gender = url.searchParams.get("gender"); + const minAge = url.searchParams.get("minAge"); + const maxAge = url.searchParams.get("maxAge"); const interests = url.searchParams.get("interests")?.split(",").filter(Boolean) || []; const causeAreas = url.searchParams.get("causeAreas")?.split(",").filter(Boolean) || []; const searchQuery = url.searchParams.get("search") || ""; @@ -28,6 +30,23 @@ export async function GET(request: Request) { }; } + // Add age filtering + const currentYear = new Date().getFullYear(); + if (minAge || maxAge) { + where.profile = { + ...where.profile, + birthYear: {} + }; + + if (minAge) { + where.profile.birthYear.lte = currentYear - parseInt(minAge); + } + + if (maxAge) { + where.profile.birthYear.gte = currentYear - parseInt(maxAge); + } + } + // OR // if (interests.length > 0) { // where.profile = { diff --git a/app/profiles/ProfileFilters.tsx b/app/profiles/ProfileFilters.tsx index cd4cdc7f..6b0d6967 100644 --- a/app/profiles/ProfileFilters.tsx +++ b/app/profiles/ProfileFilters.tsx @@ -9,6 +9,8 @@ interface FilterProps { interests: string[]; causeAreas: string[]; searchQuery: string; + minAge?: number; + maxAge?: number; }; onFilterChange: (key: string, value: any) => void; onShowFilters: (value: boolean) => void; @@ -134,11 +136,35 @@ export function ProfileFilters({filters, onFilterChange, onShowFilters, onToggle ))} +
+ + onFilterChange('minAge', e.target.value ? parseInt(e.target.value) : undefined)} + placeholder="Min" + /> +
+
+ + onFilterChange('maxAge', e.target.value ? parseInt(e.target.value) : undefined)} + placeholder="Max" + /> +
diff --git a/app/profiles/page.tsx b/app/profiles/page.tsx index e3677c2c..22422bdc 100644 --- a/app/profiles/page.tsx +++ b/app/profiles/page.tsx @@ -19,6 +19,8 @@ export default function ProfilePage() { const [images, setImages] = useState([]) const [filters, setFilters] = useState({ gender: '', + minAge: null, + maxAge: null, interests: [] as string[], causeAreas: [] as string[], searchQuery: '', @@ -43,6 +45,8 @@ export default function ProfilePage() { const params = new URLSearchParams(); if (filters.gender) params.append('gender', filters.gender); + if (filters.minAge) params.append('minAge', filters.minAge); + if (filters.maxAge) params.append('maxAge', filters.maxAge); if (filters.interests.length > 0) params.append('interests', filters.interests.join(',')); if (filters.causeAreas.length > 0) params.append('causeAreas', filters.causeAreas.join(',')); if (filters.searchQuery) params.append('search', filters.searchQuery);