FoundKey/packages/backend/src/server/api/endpoints/notes/unrenote.ts
Johann150 6a17dcf4de
server: refactor to group deletion deliveries
The `quiet` argument has been removed from `deleteNote` (or `deleteNotes`
respectively) since it was not used anywhere and it does not seem a good
idea to not update statistics in some cases.

This should also fix an issue where cascade deletions mean that statistics
are not properly updated or streaming clients not properly informed of
deletions. This case was seemingly not considered before, even though
there was some handling for cascade deleted notes.

This is going to improve how cascade deletion impacts the delivery queue,
because cascade-deleted notes will now be grouped for delivery.

Changelog: Fixed
2023-03-12 12:37:20 +01:00

55 lines
1.2 KiB
TypeScript

import { deleteNotes } from '@/services/note/delete.js';
import { Notes, Users } from '@/models/index.js';
import { SECOND, HOUR } from '@/const.js';
import define from '@/server/api/define.js';
import { getNote } from '@/server/api/common/getters.js';
import { ApiError } from '@/server/api/error.js';
export const meta = {
tags: ['notes'],
requireCredential: true,
kind: 'write:notes',
limit: {
duration: HOUR,
max: 30,
minInterval: 10 * SECOND,
key: 'delete',
},
v2: {
method: 'delete',
alias: 'notes/:noteId/renotes',
pathParameters: ['noteId'],
},
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) => {
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;
});
const renotes = await Notes.findBy({
userId: user.id,
renoteId: note.id,
});
if (renotes.length === 0) return;
await deleteNotes(renotes, user);
});