public async Task <bool> DeleteTeamAsync(User requester, string teamId) { SanityTeam sTeam = await Sanity.DocumentSet <SanityTeam>().GetAsync(teamId); SanityOrganization sOrganization = await Sanity.DocumentSet <SanityOrganization>().GetAsync(sTeam.Organization.Ref); if (sOrganization?.Members?.Find(m => m.Player.Ref == requester.Id)?.RoleStrength() >= 3) { // var references = await Sanity.Client.FetchAsync<List<Object>>($"*[references({team.Id}]"); // if (references.Result?.Count > 0) return false; await Sanity.DocumentSet <SanityTeam>().DeleteById(teamId).CommitAsync(); return(true); } return(false); }
public async Task <Team> AddTeamAsync(User requester, Team team) { if (string.IsNullOrEmpty(team.Id)) { team.Id = Guid.NewGuid().ToString(); SanityOrganization org = await Sanity.DocumentSet <SanityOrganization>().GetAsync(team.Organization?.Id); SanityMember mem = org?.Members.Find(m => m.Player.Ref == requester.Id); if (mem?.Role == "owner" || mem?.Role == "officer") { SanityTeam sTeam = new SanityTeam() { Id = team.Id, Name = team.Name, Captain = new SanityReference <Player>() { Ref = team.Captain.Id, }, Game = new SanityReference <SanityGame>() { Ref = team.Game.Id, }, Organization = new SanityReference <SanityOrganization>() { Ref = team.Organization.Id } }; await Sanity.DocumentSet <SanityTeam>().Create(sTeam).CommitAsync(); (await GetTeamsAsync()).Add(team); return(team); } } return(null); }
public async Task <Team> UpdateTeamAsync(User requester, Team team) { SanityTeam sTeam = await Sanity.DocumentSet <SanityTeam>().GetAsync(team.Id); if (sTeam == null) { return(null); } Team cachedTeam = (await GetTeamsAsync()).FirstOrDefault(t => t.Id == team.Id); if (sTeam.Captain?.Ref == requester.Id) { List <SanityReference <Player> > pList = new List <SanityReference <Player> >(); foreach (Player player in team.Players) { if (player.Id != team.Captain.Id && pList.Find(p => p.Ref == player.Id) == null) { if (pList.FirstOrDefault(p => p.Ref == player.Id) == null) { pList.Add(new SanityReference <Player>() { Ref = player.Id, }); } } } sTeam.Name = team.Name; cachedTeam.Name = team.Name; cachedTeam.Captain = team.Captain; sTeam.Captain = new SanityReference <Player>() { Ref = team.Captain.Id, }; cachedTeam.Players = team.Players; sTeam.Players = pList; var teamSizes = await Sanity.Client.FetchAsync <List <int> >($"*[_type == 'tournament' && count(teams) > 0 && '{team.Id}' in teams[].team->_id].teamSize.min"); foreach (int teamSize in teamSizes.Result) { if (teamSize > (team.Players.Count + 1)) { return(null); } } await Sanity.DocumentSet <SanityTeam>().Update(sTeam).CommitAsync(); return(team); } // CHECKING IF PLAYER HAS PERMISSIONS IN ORGANIZATION SanityOrganization sOrganization = await Sanity.DocumentSet <SanityOrganization>().GetAsync(sTeam.Organization.Ref); if (sOrganization?.Members?.Find(m => m.Player.Ref == requester.Id)?.RoleStrength() >= 3) { List <SanityReference <Player> > pList = new List <SanityReference <Player> >(); foreach (Player player in team.Players) { pList.Add(new SanityReference <Player>() { Ref = player.Id, }); } sTeam.Name = team.Name; sTeam.Captain = new SanityReference <Player>() { Ref = team.Captain.Id, }; sTeam.Players = pList; var teamSizes = await Sanity.Client.FetchAsync <List <int> >($"*[_type == 'tournament' && count(teams) > 0 && '{team.Id}' in teams[].team->_id].teamSize.min"); foreach (int teamSize in teamSizes.Result) { if (teamSize > (team.Players.Count + 1)) { return(null); } } await Sanity.DocumentSet <SanityTeam>().Update(sTeam).CommitAsync(); return(team); } return(null); }