FoundKey/packages/backend/src/server/api/endpoints/notes/polls/update.ts

45 lines
1.2 KiB
TypeScript

import { getNote } from '@/server/api/common/getters.js';
import { ApiError } from '@/server/api/error.js';
import define from '@/server/api/define.js';
import { Resolver } from '@/remote/activitypub/resolver.js';
import { updateQuestion } from '@/remote/activitypub/models/question.js';
export const meta = {
tags: ['notes'],
description: 'Fetches an updated number of votes for a poll attached to a remote note.',
requireCredential: true,
kind: 'write:votes',
errors: ['NO_SUCH_NOTE'],
} as const;
export const paramDef = {
type: 'object',
properties: {
noteId: { type: 'string', format: 'misskey:id' },
},
required: ['noteId'],
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, user) => {
// Get votee
const note = await getNote(ps.noteId, user).catch(err => {
if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError('NO_SUCH_NOTE');
throw err;
});
if (!note.hasPoll) {
throw new ApiError('NO_SUCH_NOTE', 'The note exists but does not have a poll attached.');
}
if (note.uri == null) {
throw new ApiError('NO_SUCH_NOTE', 'Can only update polls of remote notes.');
}
await updateQuestion(note.uri, new Resolver());
});