From 577c524ca2f14de115fead8f704d44bf70e127f3 Mon Sep 17 00:00:00 2001 From: pluja Date: Fri, 30 May 2025 20:29:01 +0000 Subject: [PATCH] Release 202505302029 --- web/src/actions/serviceSuggestion.ts | 12 ++-- web/src/components/ServicesFilters.astro | 9 ++- .../components/ServicesSearchResults.astro | 4 +- web/src/lib/findServicesBySimilarity.ts | 16 +++++ web/src/lib/prisma.ts | 29 +++++---- web/src/pages/index.astro | 60 +++++++++++-------- 6 files changed, 81 insertions(+), 49 deletions(-) create mode 100644 web/src/lib/findServicesBySimilarity.ts diff --git a/web/src/actions/serviceSuggestion.ts b/web/src/actions/serviceSuggestion.ts index d3833fb..74b0e62 100644 --- a/web/src/actions/serviceSuggestion.ts +++ b/web/src/actions/serviceSuggestion.ts @@ -12,6 +12,7 @@ import { formatDistanceStrict } from 'date-fns' import { captchaFormSchemaProperties, captchaFormSchemaSuperRefine } from '../lib/captchaValidation' import { defineProtectedAction } from '../lib/defineProtectedAction' import { saveFileLocally } from '../lib/fileStorage' +import { findServicesBySimilarity } from '../lib/findServicesBySimilarity' import { handleHoneypotTrap } from '../lib/honeypot' import { prisma } from '../lib/prisma' import { separateServiceUrlsByType } from '../lib/urls' @@ -29,11 +30,12 @@ export const SUGGESTION_DESCRIPTION_MAX_LENGTH = 100 export const SUGGESTION_MESSAGE_CONTENT_MAX_LENGTH = 1000 const findPossibleDuplicates = async (input: { name: string }) => { - const possibleDuplicates = await prisma.service.findMany({ + const matches = await findServicesBySimilarity(input.name, 0.3) + + return await prisma.service.findMany({ where: { - name: { - contains: input.name, - mode: 'insensitive', + id: { + in: matches.map(({ id }) => id), }, }, select: { @@ -43,8 +45,6 @@ const findPossibleDuplicates = async (input: { name: string }) => { description: true, }, }) - - return possibleDuplicates } const serializeExtraNotes = >( diff --git a/web/src/components/ServicesFilters.astro b/web/src/components/ServicesFilters.astro index 0e1992f..8b49f23 100644 --- a/web/src/components/ServicesFilters.astro +++ b/web/src/components/ServicesFilters.astro @@ -49,6 +49,7 @@ const { class={cn( // Check the scam filter when there is a text quey and the user has checked verified and approved 'has-[input[name=q]:not(:placeholder-shown)]:has-[&_input[name=verification][value=verified]:checked]:has-[&_input[name=verification][value=approved]:checked]:[&_input[name=verification][value=scam]]:checkbox-force-checked', + 'has-[input[name=q]:placeholder-shown]:[&_[data-hide-if-q-is-empty]]:hidden has-[input[name=q]:not(:placeholder-shown)]:[&_[data-hide-if-q-is-filled]]:hidden', className )} > @@ -80,16 +81,20 @@ const { )) } -

+

Ties randomly sorted

+

+ + Sorted by match first +

- + { - countCommunityOnly && ( + !!countCommunityOnly && ( <>