Beispiel #1
0
        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());
        }
Beispiel #2
0
        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
            });
        }
Beispiel #3
0
        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());
        }
Beispiel #4
0
        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()
            });
        }
Beispiel #5
0
        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());
        }