From 295b16e943db3901b6ab13d7b3bce98b0b21cedb Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 8 Aug 2023 15:35:37 -0500 Subject: [PATCH] Add a very nice getFilter function --- src/db/events.ts | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/db/events.ts b/src/db/events.ts index 560df7f4..9e1edc34 100644 --- a/src/db/events.ts +++ b/src/db/events.ts @@ -34,8 +34,37 @@ function insertEvent(event: SignedEvent): Promise { }); } -function getFilter(_filter: Filter) { - // TODO +async function getFilter(filter: Filter): Promise[]> { + let query = db.selectFrom('events').selectAll(); + + for (const key of Object.keys(filter)) { + switch (key as keyof Filter) { + case 'ids': + query = query.where('id', 'in', filter.ids!); + break; + case 'kinds': + query = query.where('kind', 'in', filter.kinds!); + break; + case 'authors': + query = query.where('pubkey', 'in', filter.authors!); + break; + case 'since': + query = query.where('created_at', '>=', filter.since!); + break; + case 'until': + query = query.where('created_at', '<=', filter.until!); + break; + case 'limit': + query = query.limit(filter.limit!); + break; + } + } + + const events = await query.execute(); + + return events.map((event) => ( + { ...event, tags: JSON.parse(event.tags) } as SignedEvent + )); } export { getFilter, insertEvent };