import type { LocalMessage, MessageResponse, ReactionResponse } from 'stream-chat'; import { mapReactionToStorable } from '../mappers/mapReactionToStorable'; import { createUpdateQuery } from '../sqlite-utils/createUpdateQuery'; import { createUpsertQuery } from '../sqlite-utils/createUpsertQuery'; import { SqliteClient } from '../SqliteClient'; import type { PreparedQueries } from '../types'; export const insertReaction = async ({ execute = true, message, reaction, }: { message: MessageResponse | LocalMessage; reaction: ReactionResponse; execute?: boolean; }) => { const queries: PreparedQueries[] = []; const storableReaction = mapReactionToStorable(reaction); queries.push(createUpsertQuery('reactions', storableReaction)); const stringifiedNewReactionGroups = JSON.stringify(message.reaction_groups); queries.push( createUpdateQuery( 'messages', { reactionGroups: stringifiedNewReactionGroups, }, { id: reaction.message_id }, ), ); SqliteClient.logger?.('info', 'insertReaction', { execute, reaction: storableReaction, }); if (execute) { await SqliteClient.executeSqlBatch(queries); } return queries; };