import { Blockings } from "../../../models/index.js"; import { Brackets } from "typeorm"; // ここでいうBlockedは被Blockedの意 export function generateBlockedUserQuery(q, me) { const blockingQuery = Blockings.createQueryBuilder("blocking").select("blocking.blockerId").where("blocking.blockeeId = :blockeeId", { blockeeId: me.id }).andWhere("blocking.groupId IS NULL"); const groupBlockingQuery = Blockings.createQueryBuilder("blocking").select("blocking.groupId").where("blocking.blockeeId = :groupBlockeeId", { groupBlockeeId: me.id }).andWhere("blocking.groupId IS NOT NULL"); // 投稿の作者にブロックされていない かつ // 投稿の返信先の作者にブロックされていない かつ // 投稿の引用元の作者にブロックされていない q.andWhere(`note.userId NOT IN (${blockingQuery.getQuery()})`).andWhere(new Brackets((qb)=>{ qb.where("note.groupId IS NULL").orWhere(`note.groupId NOT IN (${groupBlockingQuery.getQuery()})`); })).andWhere(new Brackets((qb)=>{ qb.where("note.replyUserId IS NULL").orWhere(`note.replyUserId NOT IN (${blockingQuery.getQuery()})`); })).andWhere(new Brackets((qb)=>{ qb.where("note.renoteUserId IS NULL").orWhere(`note.renoteUserId NOT IN (${blockingQuery.getQuery()})`); })); q.setParameters(blockingQuery.getParameters()); q.setParameters(groupBlockingQuery.getParameters()); } export function generateBlockQueryForUsers(q, me) { const blockingQuery = Blockings.createQueryBuilder("blocking").select("blocking.blockeeId").where("blocking.blockerId = :blockerId", { blockerId: me.id }); const blockedQuery = Blockings.createQueryBuilder("blocking").select("blocking.blockerId").where("blocking.blockeeId = :blockeeId", { blockeeId: me.id }); q.andWhere(`user.id NOT IN (${blockingQuery.getQuery()})`); q.setParameters(blockingQuery.getParameters()); q.andWhere(`user.id NOT IN (${blockedQuery.getQuery()})`); q.setParameters(blockedQuery.getParameters()); }