Skip to content

Commit 2a043db

Browse files
committed
Add AND multi keyword search
1 parent 4aa23cf commit 2a043db

File tree

2 files changed

+79
-74
lines changed

2 files changed

+79
-74
lines changed

app/api/profiles/route.ts

Lines changed: 78 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export async function GET(request: Request) {
1414
const coreValues = url.searchParams.get("coreValues")?.split(",").filter(Boolean) || [];
1515
const causeAreas = url.searchParams.get("causeAreas")?.split(",").filter(Boolean) || [];
1616
const connections = url.searchParams.get("connections")?.split(",").filter(Boolean) || [];
17-
const searchQuery = url.searchParams.get("searchQuery") || "";
17+
const searchQueries = url.searchParams.get("searchQuery")?.split(",").map(q => q.trim()).filter(Boolean) || [];
1818

1919
const profilesPerPage = 100;
2020
const offset = (page - 1) * profilesPerPage;
@@ -145,94 +145,99 @@ export async function GET(request: Request) {
145145
};
146146
}
147147

148-
if (searchQuery) {
149-
where.OR = [
150-
...(where.OR ?? []),
151-
{name: {contains: searchQuery, mode: 'insensitive'}},
152-
// {email: {contains: searchQuery, mode: 'insensitive'}},
153-
{
154-
profile: {
155-
description: {contains: searchQuery, mode: 'insensitive'},
156-
},
157-
},
158-
{
159-
profile: {
160-
occupation: {contains: searchQuery, mode: 'insensitive'},
161-
},
162-
},
163-
{
164-
profile: {
165-
location: {contains: searchQuery, mode: 'insensitive'},
166-
},
167-
},
168-
{
169-
profile: {
170-
contactInfo: {contains: searchQuery, mode: 'insensitive'},
171-
},
172-
},
173-
{
174-
profile: {
175-
intellectualInterests: {
176-
some: {
177-
interest: {
178-
name: {contains: searchQuery, mode: "insensitive"},
148+
if (searchQueries.length > 0) {
149+
where.AND = [
150+
...(where.AND ?? []),
151+
...searchQueries.map(query => ({
152+
OR: [
153+
{name: {contains: query, mode: 'insensitive'}},
154+
// {email: {contains: searchQuery, mode: 'insensitive'}},
155+
{
156+
profile: {
157+
description: {contains: query, mode: 'insensitive'},
158+
},
159+
},
160+
{
161+
profile: {
162+
occupation: {contains: query, mode: 'insensitive'},
163+
},
164+
},
165+
{
166+
profile: {
167+
location: {contains: query, mode: 'insensitive'},
168+
},
169+
},
170+
{
171+
profile: {
172+
contactInfo: {contains: query, mode: 'insensitive'},
173+
},
174+
},
175+
{
176+
profile: {
177+
intellectualInterests: {
178+
some: {
179+
interest: {
180+
name: {contains: query, mode: "insensitive"},
181+
},
182+
},
179183
},
180184
},
181185
},
182-
},
183-
},
184-
{
185-
profile: {
186-
coreValues: {
187-
some: {
188-
value: {
189-
name: {contains: searchQuery, mode: "insensitive"},
186+
{
187+
profile: {
188+
coreValues: {
189+
some: {
190+
value: {
191+
name: {contains: query, mode: "insensitive"},
192+
},
193+
},
190194
},
191195
},
192196
},
193-
},
194-
},
195-
{
196-
profile: {
197-
causeAreas: {
198-
some: {
199-
causeArea: {
200-
name: {contains: searchQuery, mode: "insensitive"},
197+
{
198+
profile: {
199+
causeAreas: {
200+
some: {
201+
causeArea: {
202+
name: {contains: query, mode: "insensitive"},
203+
},
204+
},
201205
},
202206
},
203207
},
204-
},
205-
},
206-
{
207-
profile: {
208-
desiredConnections: {
209-
some: {
210-
connection: {
211-
name: {contains: searchQuery, mode: "insensitive"},
208+
{
209+
profile: {
210+
desiredConnections: {
211+
some: {
212+
connection: {
213+
name: {contains: query, mode: "insensitive"},
214+
},
215+
},
212216
},
213217
},
214218
},
215-
},
216-
},
217-
{
218-
profile: {
219-
promptAnswers: {
220-
some: {
221-
answer: {contains: searchQuery, mode: "insensitive"},
219+
{
220+
profile: {
221+
promptAnswers: {
222+
some: {
223+
answer: {contains: query, mode: "insensitive"},
224+
},
225+
},
222226
},
223227
},
224-
},
225-
},
226-
{
227-
profile: {
228-
promptAnswers: {
229-
some: {
230-
prompt: {contains: searchQuery, mode: "insensitive"},
228+
{
229+
profile: {
230+
promptAnswers: {
231+
some: {
232+
prompt: {contains: query, mode: "insensitive"},
233+
},
234+
},
231235
},
232236
},
233-
},
234-
},
235-
];
237+
]
238+
}))
239+
]
240+
236241
}
237242

238243
console.log(where.profile);

app/profiles/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ export default function ProfilePage() {
201201
<div className="relative">
202202
<input
203203
type="text"
204-
placeholder='Try "meditation", "hiking", or "chess"'
204+
placeholder='Try "meditation", "hiking", or multiple words like "writing, nature"'
205205
className="w-full pl-10 pr-10 py-2 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
206206
value={text}
207207
onChange={(e) => setText(e.target.value)}

0 commit comments

Comments
 (0)