From 86573a579bf69ce74e1c621c7531f0af3790c52d Mon Sep 17 00:00:00 2001 From: "P. Reis" Date: Sat, 27 Apr 2024 20:59:35 -0300 Subject: [PATCH] refactor: store middleware --- src/app.ts | 10 +++++----- src/controllers/api/timelines.ts | 6 +----- src/middleware/store.ts | 18 ++++++++++++++++++ src/middleware/userStore.ts | 22 ---------------------- 4 files changed, 24 insertions(+), 32 deletions(-) create mode 100644 src/middleware/store.ts delete mode 100644 src/middleware/userStore.ts diff --git a/src/app.ts b/src/app.ts index 30abc797..abdec32a 100644 --- a/src/app.ts +++ b/src/app.ts @@ -78,7 +78,7 @@ import { auth98, requireProof, requireRole } from '@/middleware/auth98.ts'; import { cache } from '@/middleware/cache.ts'; import { csp } from '@/middleware/csp.ts'; import { adminRelaysController } from '@/controllers/api/ditto.ts'; -import { setUserStore } from '@/middleware/userStore.ts'; +import { storeMiddleware } from '@/middleware/store.ts'; interface AppEnv extends HonoEnv { Variables: { @@ -90,8 +90,8 @@ interface AppEnv extends HonoEnv { proof?: NostrEvent; /** User associated with the pubkey, if any. */ user?: User; - /** User Store (pubkey has to be set to use it). */ - userStore?: NStore; + /** Store */ + store?: NStore; }; } @@ -173,8 +173,8 @@ app.delete('/api/v1/statuses/:id{[0-9a-f]{64}}', requirePubkey, deleteStatusCont app.post('/api/v1/media', mediaController); app.post('/api/v2/media', mediaController); -app.get('/api/v1/timelines/home', requirePubkey, setUserStore, homeTimelineController); -app.get('/api/v1/timelines/public', publicTimelineController); +app.get('/api/v1/timelines/home', requirePubkey, storeMiddleware, homeTimelineController); +app.get('/api/v1/timelines/public', storeMiddleware, publicTimelineController); app.get('/api/v1/timelines/tag/:hashtag', hashtagTimelineController); app.get('/api/v1/preferences', preferencesController); diff --git a/src/controllers/api/timelines.ts b/src/controllers/api/timelines.ts index 0903062c..191fce74 100644 --- a/src/controllers/api/timelines.ts +++ b/src/controllers/api/timelines.ts @@ -5,7 +5,6 @@ import { type AppContext, type AppController } from '@/app.ts'; import { Conf } from '@/config.ts'; import { getFeedPubkeys } from '@/queries.ts'; import { booleanParamSchema } from '@/schema.ts'; -import { eventsDB } from '@/storages.ts'; import { hydrateEvents } from '@/storages/hydrate.ts'; import { paginated, paginationSchema } from '@/utils/api.ts'; import { renderReblog, renderStatus } from '@/views/mastodon/statuses.ts'; @@ -46,10 +45,7 @@ const hashtagTimelineController: AppController = (c) => { /** Render statuses for timelines. */ async function renderStatuses(c: AppContext, filters: NostrFilter[]) { const { signal } = c.req.raw; - const userStore = c.get('userStore'); - - let store: NStore = eventsDB; - if (userStore) store = userStore; + const store = c.get('store') as NStore; const events = await store .query(filters, { signal }) diff --git a/src/middleware/store.ts b/src/middleware/store.ts new file mode 100644 index 00000000..8bb595cb --- /dev/null +++ b/src/middleware/store.ts @@ -0,0 +1,18 @@ +import { AppMiddleware } from '@/app.ts'; +import { UserStore } from '@/storages/UserStore.ts'; +import { eventsDB } from '@/storages.ts'; + +/** Store middleware. */ +const storeMiddleware: AppMiddleware = async (c, next) => { + const pubkey = c.get('pubkey') as string; + + if (pubkey) { + const store = new UserStore(pubkey, eventsDB); + c.set('store', store); + } else { + c.set('store', eventsDB); + } + await next(); +}; + +export { storeMiddleware }; diff --git a/src/middleware/userStore.ts b/src/middleware/userStore.ts deleted file mode 100644 index bd3a4029..00000000 --- a/src/middleware/userStore.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AppMiddleware } from '@/app.ts'; -import { UserStore } from '@/storages/UserStore.ts'; -import { eventsDB } from '@/storages.ts'; -import { HTTPException } from 'hono'; - -/** User Store middleware. - * Throw a 500 if can't set the `userStore` */ -const setUserStore: AppMiddleware = async (c, next) => { - const pubkey = c.get('pubkey') as string; - - try { - const store = new UserStore(pubkey, eventsDB); - c.set('userStore', store); - } catch (e) { - console.log(e); - throw new HTTPException(500); - } - - await next(); -}; - -export { setUserStore };