diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-11-12 02:02:25 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-11-12 02:02:25 +0900 |
| commit | 0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch) | |
| tree | 40874799472fa07416f17b50a398ac33b7771905 /packages/backend/src/server/activitypub/featured.ts | |
| parent | update deps (diff) | |
| download | sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2 sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip | |
refactoring
Resolve #7779
Diffstat (limited to 'packages/backend/src/server/activitypub/featured.ts')
| -rw-r--r-- | packages/backend/src/server/activitypub/featured.ts | 41 |
1 files changed, 41 insertions, 0 deletions
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); +}; |