Unified search algorithm across all lists; per-section record visibility (contacts, deals, activities, leads, finance, tickets, notes, projects)

This commit is contained in:
2026-10-06 15:04:46 +03:30
parent 43717392b2
commit e08f1452ef
38 changed files with 699 additions and 420 deletions
+10 -20
View File
@@ -10,6 +10,7 @@ import type {
} from '@mento/shared';
import { Prisma } from '@prisma/client';
import { PrismaService } from '../prisma/prisma.service';
import { buildSearchWhere, ci } from '../common/search';
import { InventoryService } from '../inventory/inventory.service';
type ProductRow = {
@@ -56,26 +57,15 @@ export class ProductsService {
? { category: opts.category.trim() }
: {}),
...(opts?.kind ? { kind: opts.kind } : {}),
...(opts?.q?.trim()
? {
OR: [
{ name: { contains: opts.q.trim(), mode: 'insensitive' } },
{ sku: { contains: opts.q.trim(), mode: 'insensitive' } },
{
description: {
contains: opts.q.trim(),
mode: 'insensitive',
},
},
{
category: {
contains: opts.q.trim(),
mode: 'insensitive',
},
},
],
}
: {}),
...(() => {
const search = buildSearchWhere<Prisma.ProductWhereInput>(opts?.q, (t) => [
{ name: ci(t) },
{ sku: ci(t) },
{ description: ci(t) },
{ category: ci(t) },
]);
return search ? { AND: [search] } : {};
})(),
},
orderBy: [{ isActive: 'desc' }, { name: 'asc' }],
});