Unified search algorithm across all lists; per-section record visibility (contacts, deals, activities, leads, finance, tickets, notes, projects)
This commit is contained in:
@@ -20,6 +20,7 @@ import type {
|
||||
import ExcelJS from 'exceljs';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { PrismaService } from '../prisma/prisma.service';
|
||||
import { buildSearchWhere, ci } from '../common/search';
|
||||
import { type Actor, ownerWhere } from '../common/record-scope';
|
||||
import { SmsService } from '../common/sms.service';
|
||||
|
||||
@@ -723,22 +724,20 @@ export class LoyaltyService {
|
||||
q?: string,
|
||||
tierId?: string,
|
||||
): Prisma.PersonWhereInput {
|
||||
const query = q?.trim();
|
||||
const search = buildSearchWhere<Prisma.PersonWhereInput>(q, (t) => [
|
||||
{ firstName: ci(t) },
|
||||
{ lastName: ci(t) },
|
||||
{ mobile: { contains: t } },
|
||||
{ phone: { contains: t } },
|
||||
{ email: ci(t) },
|
||||
{ sourceRef: ci(t) },
|
||||
{ company: { name: ci(t) } },
|
||||
]);
|
||||
return {
|
||||
organizationId: actor.organizationId,
|
||||
...ownerWhere(actor),
|
||||
...(tierId ? { loyaltyTierId: tierId } : {}),
|
||||
...(query
|
||||
? {
|
||||
OR: [
|
||||
{ firstName: { contains: query, mode: 'insensitive' } },
|
||||
{ lastName: { contains: query, mode: 'insensitive' } },
|
||||
{ mobile: { contains: query } },
|
||||
{ email: { contains: query, mode: 'insensitive' } },
|
||||
{ company: { name: { contains: query, mode: 'insensitive' } } },
|
||||
],
|
||||
}
|
||||
: {}),
|
||||
...(search ? { AND: [search] } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user