From b5913b163cf63068029415403c14058b6ac909c3 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Sat, 2 Dec 2023 18:45:01 -1000 Subject: [PATCH] feat: Auto add new users and statuses to Meilisearch --- database/entities/Status.ts | 5 ++++- database/entities/User.ts | 7 +++++++ utils/meilisearch.ts | 27 +++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/database/entities/Status.ts b/database/entities/Status.ts index d743e715..d025f4ea 100644 --- a/database/entities/Status.ts +++ b/database/entities/Status.ts @@ -28,6 +28,7 @@ import { sanitizeHtml } from "@sanitization"; import { parse } from "marked"; import linkifyStr from "linkify-string"; import linkifyHtml from "linkify-html"; +import { addStausToMeilisearch } from "@meilisearch"; const config = getConfig(); @@ -415,7 +416,6 @@ export const createNewStatus = async (data: { }); // Create notification - if (status.inReplyToPost) { await client.notification.create({ data: { @@ -427,6 +427,9 @@ export const createNewStatus = async (data: { }); } + // Add to search index + await addStausToMeilisearch(status); + return status; }; diff --git a/database/entities/User.ts b/database/entities/User.ts index 6c781fb6..f257756e 100644 --- a/database/entities/User.ts +++ b/database/entities/User.ts @@ -9,6 +9,7 @@ import { client } from "~database/datasource"; import { addEmojiIfNotExists, emojiToAPI, emojiToLysand } from "./Emoji"; import { addInstanceIfNotExists } from "./Instance"; import type { APISource } from "~types/entities/source"; +import { addUserToMeilisearch } from "@meilisearch"; export interface AuthData { user: UserWithRelations | null; @@ -151,6 +152,9 @@ export const fetchRemoteUser = async (uri: string) => { }, }); + // Add to Meilisearch + await addUserToMeilisearch(user); + const emojis = []; for (const emoji of userEmojis) { @@ -224,6 +228,9 @@ export const createNewLocalUser = async (data: { }, }); + // Add to Meilisearch + await addUserToMeilisearch(user); + return await client.user.update({ where: { id: user.id, diff --git a/utils/meilisearch.ts b/utils/meilisearch.ts index 1a50ff8d..af4f4141 100644 --- a/utils/meilisearch.ts +++ b/utils/meilisearch.ts @@ -2,6 +2,7 @@ import { getConfig } from "@config"; import chalk from "chalk"; import { client } from "~database/datasource"; import { Meilisearch } from "meilisearch"; +import type { Status, User } from "@prisma/client"; const config = getConfig(); @@ -48,6 +49,32 @@ export enum MeiliIndexType { Statuses = "statuses", } +export const addStausToMeilisearch = async (status: Status) => { + if (!config.meilisearch.enabled) return; + + await meilisearch.index(MeiliIndexType.Statuses).addDocuments([ + { + id: status.id, + content: status.content, + createdAt: status.createdAt, + }, + ]); +}; + +export const addUserToMeilisearch = async (user: User) => { + if (!config.meilisearch.enabled) return; + + await meilisearch.index(MeiliIndexType.Accounts).addDocuments([ + { + id: user.id, + username: user.username, + displayName: user.displayName, + note: user.note, + createdAt: user.createdAt, + }, + ]); +}; + export const getNthDatabaseAccountBatch = ( n: number, batchSize = 1000