public async Task UpdateSession([FromBody] SessionChangeRequest model) { await Validate(model); AuthorizeAny( () => Actor.IsRegistrar ); var result = await PlayerService.ExtendSession(model); await Hub.Clients.Group(result.TeamId).TeamEvent( new HubEvent <TeamState>(Mapper.Map <TeamState>(result), EventAction.Updated) ); }
public async Task <Player> ExtendSession(SessionChangeRequest model) { var team = await Store.ListTeam(model.TeamId); if (team.First().IsLive.Equals(false)) { throw new SessionNotActive(); } if (team.First().SessionEnd >= model.SessionEnd) { throw new InvalidSessionWindow(); } foreach (var player in team) { player.SessionEnd = model.SessionEnd; } await Store.Update(team); // push gamespace extension var challenges = await Store.DbContext.Challenges .Where(c => c.TeamId == team.First().TeamId) .Select(c => c.Id) .ToArrayAsync() ; foreach (string id in challenges) { await Mojo.UpdateGamespaceAsync(new ChangedGamespace { Id = id, ExpirationTime = model.SessionEnd }); } return(Mapper.Map <Player>( team.FirstOrDefault(p => p.Role == PlayerRole.Manager ) )); }
private async Task _validate(SessionChangeRequest model) { await Task.CompletedTask; }