feat: add optional kysely in HydrateOpts interface

This commit is contained in:
P. Reis 2024-07-05 17:42:19 -03:00
parent 8e1826020c
commit 85fd7909e6

View file

@ -7,16 +7,19 @@ import { Conf } from '@/config.ts';
import { type DittoEvent } from '@/interfaces/DittoEvent.ts'; import { type DittoEvent } from '@/interfaces/DittoEvent.ts';
import { findQuoteTag } from '@/utils/tags.ts'; import { findQuoteTag } from '@/utils/tags.ts';
import { findQuoteInContent } from '@/utils/note.ts'; import { findQuoteInContent } from '@/utils/note.ts';
import { Kysely } from 'kysely';
interface HydrateOpts { interface HydrateOpts {
events: DittoEvent[]; events: DittoEvent[];
store: NStore; store: NStore;
signal?: AbortSignal; signal?: AbortSignal;
kysely?: Kysely<DittoTables>;
} }
/** Hydrate events using the provided storage. */ /** Hydrate events using the provided storage. */
async function hydrateEvents(opts: HydrateOpts): Promise<DittoEvent[]> { async function hydrateEvents(opts: HydrateOpts): Promise<DittoEvent[]> {
const { events, store, signal } = opts; const { events, store, signal, kysely = await DittoDB.getInstance() } = opts;
console.log(kysely);
if (!events.length) { if (!events.length) {
return events; return events;
@ -57,8 +60,8 @@ async function hydrateEvents(opts: HydrateOpts): Promise<DittoEvent[]> {
} }
const stats = { const stats = {
authors: await gatherAuthorStats(cache), authors: await gatherAuthorStats(cache, kysely),
events: await gatherEventStats(cache), events: await gatherEventStats(cache, kysely),
}; };
// Dedupe events. // Dedupe events.
@ -276,7 +279,10 @@ function gatherReportedProfiles({ events, store, signal }: HydrateOpts): Promise
} }
/** Collect author stats from the events. */ /** Collect author stats from the events. */
async function gatherAuthorStats(events: DittoEvent[]): Promise<DittoTables['author_stats'][]> { async function gatherAuthorStats(
events: DittoEvent[],
kysely: Kysely<DittoTables>,
): Promise<DittoTables['author_stats'][]> {
const pubkeys = new Set<string>( const pubkeys = new Set<string>(
events events
.filter((event) => event.kind === 0) .filter((event) => event.kind === 0)
@ -287,8 +293,6 @@ async function gatherAuthorStats(events: DittoEvent[]): Promise<DittoTables['aut
return Promise.resolve([]); return Promise.resolve([]);
} }
const kysely = await DittoDB.getInstance();
const rows = await kysely const rows = await kysely
.selectFrom('author_stats') .selectFrom('author_stats')
.selectAll() .selectAll()
@ -304,7 +308,10 @@ async function gatherAuthorStats(events: DittoEvent[]): Promise<DittoTables['aut
} }
/** Collect event stats from the events. */ /** Collect event stats from the events. */
async function gatherEventStats(events: DittoEvent[]): Promise<DittoTables['event_stats'][]> { async function gatherEventStats(
events: DittoEvent[],
kysely: Kysely<DittoTables>,
): Promise<DittoTables['event_stats'][]> {
const ids = new Set<string>( const ids = new Set<string>(
events events
.filter((event) => event.kind === 1) .filter((event) => event.kind === 1)
@ -315,8 +322,6 @@ async function gatherEventStats(events: DittoEvent[]): Promise<DittoTables['even
return Promise.resolve([]); return Promise.resolve([]);
} }
const kysely = await DittoDB.getInstance();
const rows = await kysely const rows = await kysely
.selectFrom('event_stats') .selectFrom('event_stats')
.selectAll() .selectAll()