Release 202505302029
This commit is contained in:
16
web/src/lib/findServicesBySimilarity.ts
Normal file
16
web/src/lib/findServicesBySimilarity.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { z } from 'astro/zod'
|
||||
|
||||
import { prisma } from './prisma'
|
||||
|
||||
export async function findServicesBySimilarity(value: string, similarityThreshold = 0.01) {
|
||||
const data = await prisma.$queryRaw`
|
||||
SELECT id, similarity(name, ${value}) AS similarity_score
|
||||
FROM "Service"
|
||||
WHERE similarity(name, ${value}) >= ${similarityThreshold}
|
||||
ORDER BY similarity(name, ${value}) desc`
|
||||
|
||||
const schema = z.array(z.object({ id: z.number(), similarity_score: z.number() }))
|
||||
const parsedData = schema.parse(data)
|
||||
|
||||
return parsedData.map(({ id, similarity_score }) => ({ id, similarityScore: similarity_score }))
|
||||
}
|
||||
@@ -25,24 +25,23 @@ const findManyAndCount = {
|
||||
},
|
||||
}
|
||||
|
||||
type FindManyAndCountType = typeof findManyAndCount.model.$allModels.findManyAndCount
|
||||
// NOTE: This used to be necessary to cast the prismaClientSingleton return type, but it seems not anymore. I left it, just in case we need it again
|
||||
// type FindManyAndCountType = typeof findManyAndCount.model.$allModels.findManyAndCount
|
||||
|
||||
type ModelsWithCustomMethods = {
|
||||
[Model in keyof PrismaClient]: PrismaClient[Model] extends {
|
||||
findMany: (...args: any[]) => Promise<any>
|
||||
}
|
||||
? PrismaClient[Model] & {
|
||||
findManyAndCount: FindManyAndCountType
|
||||
}
|
||||
: PrismaClient[Model]
|
||||
}
|
||||
// type ModelsWithCustomMethods = {
|
||||
// [Model in keyof PrismaClient]: PrismaClient[Model] extends {
|
||||
// findMany: (...args: any[]) => Promise<any>
|
||||
// }
|
||||
// ? PrismaClient[Model] & {
|
||||
// findManyAndCount: FindManyAndCountType
|
||||
// }
|
||||
// : PrismaClient[Model]
|
||||
// }
|
||||
|
||||
type ExtendedPrismaClient = ModelsWithCustomMethods & PrismaClient
|
||||
// type ExtendedPrismaClient = ModelsWithCustomMethods & PrismaClient
|
||||
|
||||
function prismaClientSingleton(): ExtendedPrismaClient {
|
||||
const prisma = new PrismaClient().$extends(findManyAndCount)
|
||||
|
||||
return prisma as unknown as ExtendedPrismaClient
|
||||
function prismaClientSingleton() {
|
||||
return new PrismaClient().$extends(findManyAndCount)
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
||||
Reference in New Issue
Block a user