From 80d08a677cbc62e483ecef5fc1c91a58186cbde4 Mon Sep 17 00:00:00 2001 From: pradeepkumar Date: Thu, 19 Mar 2026 11:34:27 +0530 Subject: [PATCH] fix --- src/agents/agents.service.ts | 37 +++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/src/agents/agents.service.ts b/src/agents/agents.service.ts index a156a7e..ebe5a2a 100644 --- a/src/agents/agents.service.ts +++ b/src/agents/agents.service.ts @@ -202,13 +202,36 @@ export class AgentsService { }; if (search) { - where.OR = [ - { firstName: { contains: search, mode: 'insensitive' } }, - { lastName: { contains: search, mode: 'insensitive' } }, - { bio: { contains: search, mode: 'insensitive' } }, - { headline: { contains: search, mode: 'insensitive' } }, - { companyName: { contains: search, mode: 'insensitive' } }, - ]; + const searchParts = search.trim().split(/\s+/); + + if (searchParts.length > 1) { + // Multi-word search (e.g. "John Smith") — match first+last name combination + // plus still try the full string against other fields + where.OR = [ + // Match firstName + lastName across parts + { + AND: searchParts.map((part) => ({ + OR: [ + { firstName: { contains: part, mode: 'insensitive' as const } }, + { lastName: { contains: part, mode: 'insensitive' as const } }, + ], + })), + }, + // Also match the full search string against other fields + { bio: { contains: search, mode: 'insensitive' } }, + { headline: { contains: search, mode: 'insensitive' } }, + { companyName: { contains: search, mode: 'insensitive' } }, + ]; + } else { + // Single word search — match against any field + where.OR = [ + { firstName: { contains: search, mode: 'insensitive' } }, + { lastName: { contains: search, mode: 'insensitive' } }, + { bio: { contains: search, mode: 'insensitive' } }, + { headline: { contains: search, mode: 'insensitive' } }, + { companyName: { contains: search, mode: 'insensitive' } }, + ]; + } } // General location search - searches across legacy columns AND dynamic field values