From 0e4a111f81cceed275d9bec2695f6e401fb654d8 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 12 Nov 2021 02:02:25 +0900 Subject: refactoring Resolve #7779 --- .../backend/src/server/activitypub/featured.ts | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 packages/backend/src/server/activitypub/featured.ts (limited to 'packages/backend/src/server/activitypub/featured.ts') diff --git a/packages/backend/src/server/activitypub/featured.ts b/packages/backend/src/server/activitypub/featured.ts new file mode 100644 index 0000000000..1598cc680f --- /dev/null +++ b/packages/backend/src/server/activitypub/featured.ts @@ -0,0 +1,41 @@ +import * as Router from '@koa/router'; +import config from '@/config/index'; +import { renderActivity } from '@/remote/activitypub/renderer/index'; +import renderOrderedCollection from '@/remote/activitypub/renderer/ordered-collection'; +import { setResponseType } from '../activitypub'; +import renderNote from '@/remote/activitypub/renderer/note'; +import { Users, Notes, UserNotePinings } from '@/models/index'; + +export default async (ctx: Router.RouterContext) => { + const userId = ctx.params.user; + + // Verify user + const user = await Users.findOne({ + id: userId, + host: null + }); + + if (user == null) { + ctx.status = 404; + return; + } + + const pinings = await UserNotePinings.find({ + where: { userId: user.id }, + order: { id: 'DESC' } + }); + + const pinnedNotes = await Promise.all(pinings.map(pining => + Notes.findOneOrFail(pining.noteId))); + + const renderedNotes = await Promise.all(pinnedNotes.map(note => renderNote(note))); + + const rendered = renderOrderedCollection( + `${config.url}/users/${userId}/collections/featured`, + renderedNotes.length, undefined, undefined, renderedNotes + ); + + ctx.body = renderActivity(rendered); + ctx.set('Cache-Control', 'public, max-age=180'); + setResponseType(ctx); +}; -- cgit v1.2.3-freya