perf: make up to 5 calls to database in hydrateEvents & remove old hydrate functions

This commit is contained in:
P. Reis
2024-04-22 19:51:29 -03:00
parent ed08ac7c17
commit b77c8a00cd
11 changed files with 71 additions and 156 deletions

View File

@@ -95,7 +95,6 @@ const accountSearchController: AppController = async (c) => {
const results = await hydrateEvents({
events: event ? [event, ...events] : events,
relations: ['author_stats'],
storage: eventsDB,
signal: c.req.raw.signal,
});
@@ -164,9 +163,7 @@ const accountStatusesController: AppController = async (c) => {
}
const events = await eventsDB.query([filter], { signal })
.then((events) =>
hydrateEvents({ events, relations: ['author', 'event_stats', 'author_stats'], storage: eventsDB, signal })
)
.then((events) => hydrateEvents({ events, storage: eventsDB, signal }))
.then((events) => {
if (exclude_replies) {
return events.filter((event) => !findReplyTag(event.tags));
@@ -317,9 +314,7 @@ const favouritesController: AppController = async (c) => {
.filter((id): id is string => !!id);
const events1 = await eventsDB.query([{ kinds: [1], ids }], { signal })
.then((events) =>
hydrateEvents({ events, relations: ['author', 'event_stats', 'author_stats'], storage: eventsDB, signal })
);
.then((events) => hydrateEvents({ events, storage: eventsDB, signal }));
const statuses = await Promise.all(events1.map((event) => renderStatus(event, { viewerPubkey: c.get('pubkey') })));
return paginated(c, events1, statuses);

View File

@@ -90,9 +90,7 @@ function searchEvents({ q, type, limit, account_id }: SearchQuery, signal: Abort
}
return searchStore.query([filter], { signal })
.then((events) =>
hydrateEvents({ events, relations: ['author', 'event_stats', 'author_stats'], storage: searchStore, signal })
);
.then((events) => hydrateEvents({ events, storage: searchStore, signal }));
}
/** Get event kinds to search from `type` query param. */
@@ -112,9 +110,7 @@ async function lookupEvent(query: SearchQuery, signal: AbortSignal): Promise<Nos
const filters = await getLookupFilters(query, signal);
return searchStore.query(filters, { limit: 1, signal })
.then((events) =>
hydrateEvents({ events, relations: ['author', 'event_stats', 'author_stats'], storage: searchStore, signal })
)
.then((events) => hydrateEvents({ events, storage: searchStore, signal }))
.then(([event]) => event);
}

View File

@@ -41,7 +41,6 @@ const statusController: AppController = async (c) => {
const event = await getEvent(id, {
kind: 1,
relations: ['author', 'event_stats', 'author_stats', 'quote_repost'],
signal: AbortSignal.timeout(1500),
});
@@ -135,7 +134,6 @@ const createStatusController: AppController = async (c) => {
if (data.quote_id) {
await hydrateEvents({
events: [event],
relations: ['quote_repost'],
storage: eventsDB,
signal: c.req.raw.signal,
});
@@ -241,7 +239,6 @@ const reblogStatusController: AppController = async (c) => {
await hydrateEvents({
events: [reblogEvent],
relations: ['repost', 'author'],
storage: eventsDB,
signal: signal,
});

View File

@@ -68,7 +68,6 @@ const streamingController: AppController = (c) => {
if (event.kind === 6) {
await hydrateEvents({
events: [event],
relations: ['repost', 'author'],
storage: eventsDB,
signal: AbortSignal.timeout(1000),
});

View File

@@ -51,7 +51,6 @@ async function renderStatuses(c: AppContext, filters: NostrFilter[]) {
.then((events) =>
hydrateEvents({
events,
relations: ['author', 'author_stats', 'event_stats', 'repost', 'quote_repost'],
storage: eventsDB,
signal,
})