summaryrefslogtreecommitdiff
path: root/src/server/api/common/generate-replies-query.ts
blob: 8ebe93f20a361f2a78bb38aa8c9d89121ee453c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { User } from '../../../models/entities/user';
import { Brackets, SelectQueryBuilder } from 'typeorm';

export function generateRepliesQuery(q: SelectQueryBuilder<any>, me?: User | null) {
	if (me == null) {
		q.andWhere(new Brackets(qb => { qb
			.where(`note.replyId IS NULL`) // 返信ではない
			.orWhere(new Brackets(qb => { qb // 返信だけど投稿者自身への返信
				.where(`note.replyId IS NOT NULL`)
				.andWhere('note.replyUserId = note.userId');
			}));
		}));
	} else {
		q.andWhere(new Brackets(qb => { qb
			.where(`note.replyId IS NULL`) // 返信ではない
			.orWhere('note.replyUserId = :meId', { meId: me.id }) // 返信だけど自分のノートへの返信
			.orWhere(new Brackets(qb => { qb // 返信だけど自分の行った返信
				.where(`note.replyId IS NOT NULL`)
				.andWhere('note.userId = :meId', { meId: me.id });
			}))
			.orWhere(new Brackets(qb => { qb // 返信だけど投稿者自身への返信
				.where(`note.replyId IS NOT NULL`)
				.andWhere('note.replyUserId = note.userId');
			}));
		}));
	}
}