17 lines
623 B
TypeScript
17 lines
623 B
TypeScript
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 }))
|
|
}
|