From ec24efc59845d48d0cb6928ad584d1ce0babdfd1 Mon Sep 17 00:00:00 2001 From: Leandro Gazoli Date: Mon, 20 May 2024 10:16:35 -0300 Subject: [PATCH] Update search-paginator.ts --- src/prisma/search-paginator.ts | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/prisma/search-paginator.ts b/src/prisma/search-paginator.ts index 46a9c45..c7cf536 100644 --- a/src/prisma/search-paginator.ts +++ b/src/prisma/search-paginator.ts @@ -5,19 +5,26 @@ export const searchPaginator = (defaultOptions: PaginatorTypes.SearchPaginateOpt let data: T & { row_count: number }[]; if (options?.searchValue) { - data = await prisma.$queryRawUnsafe(` + const { searchValue, searchColumns } = options; // Desestruturar parĂ¢metros + const whereClause = searchColumns.map((column) => `coalesce(:${column}, '')`).join(' || '); + const countQuery = ` + SELECT COUNT(*) FROM "${modelName}" + WHERE to_tsvector('english', ${whereClause}) @@ to_tsquery('english', :searchValue) + `; + + const data = await prisma.$executeRawUnsafe(` SELECT *, - (SELECT COUNT(*) FROM "${modelName}" - WHERE to_tsvector('english', - ${options.searchColumns.map((c: string) => `coalesce("${c}", '')`).join(" || ' ' || \n")} - ) @@ to_tsquery('english', '${options.searchValue}')) AS row_count + (${countQuery}) AS row_count FROM "${modelName}" - WHERE to_tsvector('english', - ${options.searchColumns.map((c: string) => `coalesce("${c}", '')`).join(" || ' ' || \n")} - ) @@ to_tsquery('english', '${options.searchValue}') - limit ${options.perPage} - offset ${options.skip}; - `); + WHERE to_tsvector('english', ${whereClause}) @@ to_tsquery('english', :searchValue) + LIMIT :perPage + OFFSET :skip + `, { + searchValue, + searchColumns, + perPage: options?.perPage || defaultOptions.perPage, + skip: options?.skip || 0, + }); } else { data = await prisma.$queryRawUnsafe(` SELECT *,