//users - должна быть копия! тут без локов private List <PlanitUser> ClearHideData(RoomSatus roomStatus, string currentUserConnectionId, List <PlanitUser> users) { if (users == null) { return(null); } users = users.Where(x => !string.IsNullOrWhiteSpace(x.UserConnectionId)).ToList(); users.ForEach(x => { if (x.Vote != null) { x.HasVote = true; //todo хорошо бы вытащить из модели } }); if (roomStatus != RoomSatus.AllCanVote) { return(users); } var user = users.FirstOrDefault(x => x.UserConnectionId == currentUserConnectionId); if (user == null) { return(new List <PlanitUser>()); } if (!user.IsAdmin) { users.ForEach(x => { if (x.UserConnectionId != currentUserConnectionId) { x.Vote = null; } }); } return(users); }
public async Task <bool> ChangeStatusIfCan(Room room, string userConnectionIdRequest, RoomSatus newStatus) { if (room == null) { throw new SomeCustomException(Consts.PlanitPokerErrorConsts.RoomNotFound); } if (string.IsNullOrWhiteSpace(userConnectionIdRequest)) { throw new SomeCustomException(Consts.PlanitPokerErrorConsts.PlanitUserNotFound); } return(await UpdateIfCan(room, userConnectionIdRequest, rm => { rm.Status = newStatus; return Task.FromResult(true); })); }
public async Task <bool> ChangeStatusIfCan(string roomName, string userConnectionIdRequest, RoomSatus newStatus) { var room = await TryGetRoom(roomName); return(await ChangeStatusIfCan(room, userConnectionIdRequest, newStatus)); }