diff options
Diffstat (limited to 'packages/backend/src/server/activitypub.ts')
| -rw-r--r-- | packages/backend/src/server/activitypub.ts | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/packages/backend/src/server/activitypub.ts b/packages/backend/src/server/activitypub.ts index 21be0a2517..f2d320bb68 100644 --- a/packages/backend/src/server/activitypub.ts +++ b/packages/backend/src/server/activitypub.ts @@ -18,6 +18,7 @@ import { ILocalUser, User } from '@/models/entities/user.js'; import { In } from 'typeorm'; import { renderLike } from '@/remote/activitypub/renderer/like.js'; import { getUserKeypair } from '@/misc/keypair-store.js'; +import { noteCache, userCache } from './activitypub/cache.js'; // Init router const router = new Router(); @@ -65,11 +66,12 @@ router.post('/users/:user/inbox', json(), inbox); router.get('/notes/:note', async (ctx, next) => { if (!isActivityPubReq(ctx)) return await next(); - const note = await Notes.findOne({ + // TODO: typeorm 3.0にしたら .then(x => x || null) は消せる + const note = await noteCache.fetch(ctx.params.note, () => Notes.findOne({ id: ctx.params.note, visibility: In(['public' as const, 'home' as const]), localOnly: false, - }); + }).then(x => x || null)); if (note == null) { ctx.status = 404; @@ -148,7 +150,7 @@ router.get('/users/:user/publickey', async ctx => { }); // user -async function userInfo(ctx: Router.RouterContext, user: User | undefined) { +async function userInfo(ctx: Router.RouterContext, user: User | undefined | null) { if (user == null) { ctx.status = 404; return; @@ -164,11 +166,12 @@ router.get('/users/:user', async (ctx, next) => { const userId = ctx.params.user; - const user = await Users.findOne({ + // TODO: typeorm 3.0にしたら .then(x => x || null) は消せる + const user = await userCache.fetch(userId, () => Users.findOne({ id: userId, host: null, isSuspended: false, - }); + }).then(x => x || null)); await userInfo(ctx, user); }); |