mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-12-03 07:07:54 -07:00
35 lines
1,010 B
TypeScript
35 lines
1,010 B
TypeScript
import type { User } from "@/models/entities/user.js";
|
|
import { ChannelFollowings } from "@/models/index.js";
|
|
import type { SelectQueryBuilder } from "typeorm";
|
|
import { Brackets } from "typeorm";
|
|
|
|
export function generateChannelQuery(
|
|
q: SelectQueryBuilder<any>,
|
|
me?: { id: User["id"] } | null,
|
|
) {
|
|
if (me == null) {
|
|
q.andWhere("note.channelId IS NULL");
|
|
} else {
|
|
q.leftJoinAndSelect("note.channel", "channel");
|
|
|
|
const channelFollowingQuery = ChannelFollowings.createQueryBuilder(
|
|
"channelFollowing",
|
|
)
|
|
.select("channelFollowing.followeeId")
|
|
.where("channelFollowing.followerId = :followerId", {
|
|
followerId: me.id,
|
|
});
|
|
|
|
q.andWhere(
|
|
new Brackets((qb) => {
|
|
qb
|
|
// チャンネルのノートではない
|
|
.where("note.channelId IS NULL")
|
|
// または自分がフォローしているチャンネルのノート
|
|
.orWhere(`note.channelId IN (${channelFollowingQuery.getQuery()})`);
|
|
}),
|
|
);
|
|
|
|
q.setParameters(channelFollowingQuery.getParameters());
|
|
}
|
|
}
|