import $ from 'cafy'; import { ID } from '@/misc/cafy-id'; import define from '../../define'; import { NoteFavorites, Notes, NoteThreadMutings, NoteWatchings } from '@/models/index'; export const meta = { tags: ['notes'], requireCredential: true, params: { noteId: { validator: $.type(ID), }, }, res: { type: 'object', optional: false, nullable: false, properties: { isFavorited: { type: 'boolean', optional: false, nullable: false, }, isWatching: { type: 'boolean', optional: false, nullable: false, }, isMutedThread: { type: 'boolean', optional: false, nullable: false, }, }, }, } as const; // eslint-disable-next-line import/no-default-export export default define(meta, async (ps, user) => { const note = await Notes.findOneOrFail(ps.noteId); const [favorite, watching, threadMuting] = await Promise.all([ NoteFavorites.count({ where: { userId: user.id, noteId: note.id, }, take: 1, }), NoteWatchings.count({ where: { userId: user.id, noteId: note.id, }, take: 1, }), NoteThreadMutings.count({ where: { userId: user.id, threadId: note.threadId || note.id, }, take: 1, }), ]); return { isFavorited: favorite !== 0, isWatching: watching !== 0, isMutedThread: threadMuting !== 0, }; });