hippofish/packages/backend/src/services/blocking/delete.ts
ThatOneCalculator 6b00abf05c
refactor: 🎨 rome
2023-01-12 20:40:33 -08:00

37 lines
1.3 KiB
TypeScript

import { renderActivity } from "@/remote/activitypub/renderer/index.js";
import { renderBlock } from "@/remote/activitypub/renderer/block.js";
import renderUndo from "@/remote/activitypub/renderer/undo.js";
import { deliver } from "@/queue/index.js";
import Logger from "../logger.js";
import type { CacheableUser } from "@/models/entities/user.js";
import { User } from "@/models/entities/user.js";
import { Blockings, Users } from "@/models/index.js";
const logger = new Logger("blocking/delete");
export default async function (blocker: CacheableUser, blockee: CacheableUser) {
const blocking = await Blockings.findOneBy({
blockerId: blocker.id,
blockeeId: blockee.id,
});
if (blocking == null) {
logger.warn(
"ブロック解除がリクエストされましたがブロックしていませんでした",
);
return;
}
// Since we already have the blocker and blockee, we do not need to fetch
// them in the query above and can just manually insert them here.
blocking.blocker = blocker;
blocking.blockee = blockee;
Blockings.delete(blocking.id);
// deliver if remote bloking
if (Users.isLocalUser(blocker) && Users.isRemoteUser(blockee)) {
const content = renderActivity(renderUndo(renderBlock(blocking), blocker));
deliver(blocker, content, blockee.inbox);
}
}