fix: safe delete room member when delete creator member record

pull/242/head
zijiren233 2 years ago
parent 83a03d0759
commit bfff86d4ef

@ -51,7 +51,7 @@ func FirstOrCreateRoomMemberRelation(roomID, userID string, conf ...CreateRoomMe
func GetRoomMember(roomID, userID string) (*model.RoomMember, error) {
roomMemberRelation := &model.RoomMember{}
err := db.Where("room_id = ? AND user_id = ?", roomID, userID).First(roomMemberRelation).Error
return roomMemberRelation, HandleNotFound(err, "room or user")
return roomMemberRelation, HandleNotFound(err, "room or member")
}
func RoomApprovePendingMember(roomID, userID string) error {
@ -66,32 +66,40 @@ func RoomBanMember(roomID, userID string) error {
result := db.Model(&model.RoomMember{}).
Where("room_id = ? AND user_id = ?", roomID, userID).
Update("status", model.RoomMemberStatusBanned)
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func RoomUnbanMember(roomID, userID string) error {
result := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("status", model.RoomMemberStatusActive)
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func DeleteRoomMember(roomID, userID string) error {
result := db.Where("room_id = ? AND user_id = ?", roomID, userID).Delete(&model.RoomMember{})
return HandleUpdateResult(result, "room or user")
result := db.
Where("NOT EXISTS (?)",
db.Table("rooms").
Select("1").
Where("rooms.id = room_members.room_id AND rooms.creator_id = room_members.user_id"),
).
Where("room_id = ? AND user_id = ?", roomID, userID).
Delete(&model.RoomMember{})
return HandleUpdateResult(result, "room or member")
}
func SetMemberPermissions(roomID string, userID string, permission model.RoomMemberPermission) error {
result := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", permission)
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func AddMemberPermissions(roomID string, userID string, permission model.RoomMemberPermission) error {
result := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", db.Raw("permissions | ?", permission))
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func RemoveMemberPermissions(roomID string, userID string, permission model.RoomMemberPermission) error {
result := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", db.Raw("permissions & ?", ^permission))
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
// func GetAllRoomMembersRelationCount(roomID string, scopes ...func(*gorm.DB) *gorm.DB) (int64, error) {
@ -102,17 +110,17 @@ func RemoveMemberPermissions(roomID string, userID string, permission model.Room
func RoomSetAdminPermissions(roomID, userID string, permissions model.RoomAdminPermission) error {
result := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("admin_permissions", permissions)
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func RoomAddAdminPermissions(roomID, userID string, permissions model.RoomAdminPermission) error {
result := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("admin_permissions", db.Raw("admin_permissions | ?", permissions))
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func RoomRemoveAdminPermissions(roomID, userID string, permissions model.RoomAdminPermission) error {
result := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("admin_permissions", db.Raw("admin_permissions & ?", ^permissions))
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func RoomSetAdmin(roomID, userID string, permissions model.RoomAdminPermission) error {
@ -121,7 +129,7 @@ func RoomSetAdmin(roomID, userID string, permissions model.RoomAdminPermission)
"permissions": model.AllPermissions,
"admin_permissions": permissions,
})
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func RoomSetMember(roomID, userID string, permissions model.RoomMemberPermission) error {
@ -130,7 +138,7 @@ func RoomSetMember(roomID, userID string, permissions model.RoomMemberPermission
"permissions": permissions,
"admin_permissions": model.NoAdminPermission,
})
return HandleUpdateResult(result, "room or user")
return HandleUpdateResult(result, "room or member")
}
func GetRoomMembers(roomID string, scopes ...func(*gorm.DB) *gorm.DB) ([]*model.RoomMember, error) {

@ -142,6 +142,7 @@ type RoomMember struct {
UpdatedAt time.Time
UserID string `gorm:"primarykey;type:char(32)"`
RoomID string `gorm:"primarykey;type:char(32)"`
Room *Room `gorm:"foreignKey:RoomID;references:ID"`
Status RoomMemberStatus `gorm:"not null;default:2"`
Role RoomMemberRole `gorm:"not null;default:1"`
Permissions RoomMemberPermission

Loading…
Cancel
Save