feat: delete member

api-v2
zijiren233 1 year ago
parent 3839d8f669
commit bbcf886922

@ -88,6 +88,11 @@ func RoomUnbanMember(roomID, userID string) error {
return HandleNotFound(err, "room or user")
}
func DeleteRoomMember(roomID, userID string) error {
err := db.Where("room_id = ? AND user_id = ?", roomID, userID).Delete(&model.RoomMember{}).Error
return HandleNotFound(err, "room or user")
}
func SetMemberPermissions(roomID string, userID string, permission model.RoomMemberPermission) error {
err := db.Model(&model.RoomMember{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", permission).Error
return HandleNotFound(err, "room or user")

@ -603,6 +603,14 @@ func (r *Room) UnbanMember(userID string) error {
return db.RoomUnbanMember(r.ID, userID)
}
func (r *Room) DeleteMember(userID string) error {
if r.IsCreator(userID) {
return errors.New("you are creator, cannot delete")
}
defer r.members.Delete(userID)
return db.DeleteRoomMember(r.ID, userID)
}
func (r *Room) ResetAdminPermissions(userID string) error {
return r.SetAdminPermissions(userID, model.DefaultAdminPermissions)
}

@ -542,6 +542,13 @@ func (u *User) UnbanRoomMember(room *Room, userID string) error {
return room.UnbanMember(userID)
}
func (u *User) DeleteRoomMember(room *Room, userID string) error {
if !u.HasRoomAdminPermission(room, model.PermissionApprovePendingMember) {
return model.ErrNoPermission
}
return room.DeleteMember(userID)
}
func (u *User) SetMemberPermissions(room *Room, userID string, permissions model.RoomMemberPermission) error {
if !u.HasRoomAdminPermission(room, model.PermissionSetUserPermission) {
return model.ErrNoPermission

@ -192,6 +192,8 @@ func initRoom(room *gin.RouterGroup, needAuthUser *gin.RouterGroup, needAuthRoom
needAuthRoomAdmin.POST("/members/approve", RoomAdminApproveMember)
needAuthRoomAdmin.POST("/members/delete", RoomAdminDeleteMember)
needAuthRoomAdmin.POST("/members/ban", RoomAdminBanMember)
needAuthRoomAdmin.POST("/members/unban", RoomAdminUnbanMember)

@ -230,6 +230,28 @@ func RoomAdminApproveMember(ctx *gin.Context) {
ctx.Status(http.StatusNoContent)
}
func RoomAdminDeleteMember(ctx *gin.Context) {
user := ctx.MustGet("user").(*op.UserEntry).Value()
room := ctx.MustGet("room").(*op.RoomEntry).Value()
log := ctx.MustGet("log").(*logrus.Entry)
var req model.RoomApproveMemberReq
if err := model.Decode(ctx, &req); err != nil {
log.Errorf("decode room delete user req failed: %v", err)
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorResp(err))
return
}
err := user.DeleteRoomMember(room, req.ID)
if err != nil {
log.Errorf("delete room user failed: %v", err)
ctx.AbortWithStatusJSON(http.StatusInternalServerError, model.NewApiErrorResp(err))
return
}
ctx.Status(http.StatusNoContent)
}
func RoomAdminBanMember(ctx *gin.Context) {
user := ctx.MustGet("user").(*op.UserEntry).Value()
room := ctx.MustGet("room").(*op.RoomEntry).Value()

Loading…
Cancel
Save