我有一个以下架构
module.exports = (sequelize, DataTypes) => {
const Photo = sequelize.define(
"Photo",
{
photoURL: {
type: DataTypes.STRING,
allowNull: false
},
blurPhotoURL: {
type: DataTypes.STRING,
allowNull: false
},
userId: { //userId of user who has uploaded the photo
type: DataTypes.UUID,
allowNull: false
},
isPublic: {
type: DataTypes.BOOLEAN,
default: false
}
}
{}
);
}
我还有一个模式SubscriberInfo
module.exports = (sequelize, DataTypes) => {
const SubscriberInfo = sequelize.define(
"SubscriberInfo",
{
userId: { // subscriber userId
type: DataTypes.UUID,
allowNull: false
},
modelId: { //subscribed userId
type: DataTypes.UUID,
allowNull: false
}
},
{}
);
}
因此,请像Instagram个人资料一样思考,用户可以隐藏照片,只有他的关注者可以看到照片,并且用户的重置将看到同一照片的模糊版本。
我设法将模糊照片和原始照片保存在数据库中,并且isPublic
是一列,用于指示照片是否为私人照片。
在我的UI(个人资料部分)上,我希望根据查看个人资料的用户显示照片并模糊照片。
我可以在一个查询中实现这一点吗,在返回的JSON中,我会根据用户是blurPhotoURL
或photoURL
以及用户是否是isPublic
来获得照片。
谢谢你!
答案 0 :(得分:1)
您可能想要类似的东西:
select
case when CUR_VIEWER_USER in -- check if current user is SubscriberInfo
(select modelId SubscriberInfo SI
where p.userId = si.userId)
then photoURL
else blurPhotoURL as photo_for_user
from Photo P
where isPublic = true
or (isPublic = false and userId = CUR_VIEWER_USER) -- if curUser is owner show his unpublished photos
从该查询中,您可以获得基本的想法,如何将其更改为适合您的情况。我不确定如何将current_user插入查询中,但是您仍然有一个起点。