Johann150
934ee82b8f
The UUIDs are no longer used for errors and all errors should now have a descriptive message attached to them. Also, all errors should now have the proper HTTP status code for a reply instead of the generic 400 and 500 response codes. Because the errors all have more specific error codes, the "kind" of client or server is also abolished.
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import deleteNote from '@/services/note/delete.js';
|
|
import { Users } from '@/models/index.js';
|
|
import { SECOND, HOUR } from '@/const.js';
|
|
import define from '../../define.js';
|
|
import { getNote } from '../../common/getters.js';
|
|
import { ApiError } from '../../error.js';
|
|
|
|
export const meta = {
|
|
tags: ['notes'],
|
|
|
|
requireCredential: true,
|
|
|
|
kind: 'write:notes',
|
|
|
|
limit: {
|
|
duration: HOUR,
|
|
max: 300,
|
|
minInterval: SECOND,
|
|
},
|
|
|
|
errors: ['ACCESS_DENIED', '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) => {
|
|
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 ((!user.isAdmin && !user.isModerator) && (note.userId !== user.id)) {
|
|
throw new ApiError('ACCESS_DENIED');
|
|
}
|
|
|
|
// この操作を行うのが投稿者とは限らない(例えばモデレーター)ため
|
|
await deleteNote(await Users.findOneByOrFail({ id: note.userId }), note);
|
|
});
|