FoundKey/packages/backend/src/remote/activitypub/kernel/delete/note.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

39 lines
1.1 KiB
TypeScript

import { CacheableRemoteUser } from '@/models/entities/user.js';
import { deleteNotes } from '@/services/note/delete.js';
import { getApLock } from '@/misc/app-lock.js';
import { deleteMessage } from '@/services/messages/delete.js';
import { DbResolver } from '@/remote/activitypub/db-resolver.js';
import { apLogger } from '@/remote/activitypub/logger.js';
export default async function(actor: CacheableRemoteUser, uri: string): Promise<string> {
apLogger.info(`Deleting the Note: ${uri}`);
const unlock = await getApLock(uri);
try {
const dbResolver = new DbResolver();
const note = await dbResolver.getNoteFromApId(uri);
if (note == null) {
const message = await dbResolver.getMessageFromApId(uri);
if (message == null) return 'skip: message not found';
if (message.userId !== actor.id) {
return 'skip: cant delete other actors message';
}
await deleteMessage(message);
return 'ok: message deleted';
} else {
if (note.userId !== actor.id) {
return 'skip: cant delete other actors note';
}
await deleteNotes([note], actor);
return 'ok: note deleted';
}
} finally {
unlock();
}
}