public async Task <DTOs.RoundDetails> Create(DTOs.CreateRound request) { var band = await bandRepository.Get(request.Band.Id); if (band == null) { throw new NotFoundException("Band", request.Band.Id); } var sheriff = band.Members .FirstOrDefault(m => m.Bandit.Id == request.Sheriff.Id); if (sheriff == null) { throw new NotFoundException("Bandit", request.Sheriff.Id); } var members = band.Members .Where(m => request.Members.Any(r => m.Bandit.Id == r.Id)); var round = sheriff.CreateRound(request.Name, request.Place, request.DateTime, members); round = await roundRepository.Add(round); return(round.ToDtoDetails()); }
public async Task <DTOs.Notification> Invite(DTOs.RequestJoinBand request) { var guest = await banditRepository.Get(request.Guest.Id); if (guest == null) { throw new NotFoundException("Bandit", request.Guest.Id); } var band = await bandRepository.Get(request.Band.Id); if (band == null) { throw new NotFoundException("Band", request.Band.Id); } if (!band.CanRequestToJoin(guest)) { throw new InvalidOperationException(Strings.CantRequestToJoin.Format(guest.Name, band.Name)); } var invitation = Invitation.Create(guest, band, band.Boss.Bandit); await invitationRepository.Add(invitation); var message = Notifications.RequestJoinBand(guest.Name, band.Name); await notifications.Send(message, to : band.Boss.Bandit); return(new DTOs.Notification { To = band.Boss.Bandit.Name, Title = message.Title, Content = message.Body }); }
public async Task <DTOs.BandDetails> Get(int id) { var band = await bandRepository.Get(id); if (band == null) { throw new NotFoundException("Band", id); } return(band.ToDtoDetails()); }
public async Task <DTOs.BandsList> Get(string filterName = "") { var bands = await bandRepository.Get(); if (!string.IsNullOrEmpty(filterName)) { bands = bands.Where(b => b.Name.Contains(filterName)); } var DTOs = bands.Select(b => b.ToDto()); return(new DTOs.BandsList { Bands = DTOs.ToArray() }); }
public async Task <DTOs.RoundDetails> Notify(int roundId) { var round = await roundRepository.Get(roundId); if (round == null) { throw new NotFoundException("Round", roundId); } if (!round.AllScored()) { return(round.ToDtoDetails()); } var band = await bandRepository.Get(round.Sheriff.Member.Band.Id); var message = Notifications.RoundResults(band, round); band.Members.ForEach(async m => await notifications.Send(message, to: m.Bandit)); return(round.ToDtoDetails()); }