问题描述
我有一个搜索方法,用于在数据库中查找用户。用户可能会隐藏一些个人信息(负责此操作的设置称为profilePrivacyPermissions
),例如电话号码,电子邮件。例如,如果用户的电子邮件是隐藏的,则在通过电子邮件进行搜索时,该用户不应出现在搜索结果中。
profilePrivacyPermissions obj是用户obj的一部分,其外观如下:
"profilePrivacyPermissions": [
{
"screenType": 1,"isEverybody": true,"isContacts": false,"isNobody": false
},{
"screenType": 2,"isEverybody": false,"isNobody": true
},{
"screenType": 4,{
"screenType": 5,{
"screenType": 3,"isNobody": false
}
]
此枚举定义了几种屏幕类型:
export enum EScreenType {
PHONE_NUMBER = 1,EMAIL = 2,PHOTO = 3,TASKS_NOTES_FOLDERS = 4,AUTO_ACCEPT_INVITES = 5,}
这是我用于此搜索的查询请求:
const users = await this.userRepository.createQueryBuilder('user')
.where(whereClause,filters)
.leftJoinAndSelect('user.subscription','subscription')
.leftJoinAndSelect('user.profilePrivacyPermissions','perms')
.limit(ESearchResponseEntityNumber.USERS)
.getMany();
whereClause
看起来像这样:
const whereClause = `
(CASE perms.isEverybody WHEN true THEN
CASE perms.screenType
WHEN ${EScreenType.PHONE_NUMBER} THEN "user".phone ILIKE :searchTerm
WHEN ${EScreenType.EMAIL} THEN "user".profile_email ILIKE :searchTerm
END
END
OR "user".username ILIKE :searchTerm
) AND "user".id != :userId
`;
现在,我需要根据以下逻辑修改此查询:
当
TASKS_NOTES_FOLDERS
(其screenType为4)为false
时,用户不应出现在 搜索结果
这是我的尝试(但不起作用):
const whereClause = `
(CASE
WHEN perms.isEverybody = true THEN
CASE perms.screenType
WHEN ${EScreenType.PHONE_NUMBER} THEN "user".phone ILIKE :searchTerm
WHEN ${EScreenType.EMAIL} THEN "user".profile_email ILIKE :searchTerm
END
WHEN perms.isNobody = true AND perms.screenType = ${EScreenType.TASKS_NOTES_FOLDERS} THEN NULL
END
OR "user".username ILIKE :searchTerm
) AND "user".id != :userId
`;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)