public async Task <ActionResult <MeetingView> > Create(
            CancellationToken cancellationToken,
            [FromQuery] CreateMeetingBinding binding
            )
        {
            var   address = User.GetAddress();
            House house   = await _houseRepository.GetByAddress(address, cancellationToken);

            await using var ms = new MemoryStream();
            await Request.Body.CopyToAsync(ms, cancellationToken);

            var meeting = new Meeting(Guid.NewGuid(), binding.Title, binding.MeetingDate, binding.Description, ms.ToArray(), house);

            await _meetingRepository.Save(meeting, cancellationToken);

            return(Ok(new MeetingView
            {
                Id = meeting.Id,
                Title = meeting.Title,
                MeetingDate = meeting.MeetingDate,
                Description = meeting.Description,
                House = new HouseView
                {
                    Id = house.Id,
                    Address = house.Address
                }
            }));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <Page <VotingListItem> > > GetVotingsPerson(
            CancellationToken cancellationToken,
            [FromQuery] DefaultListBinding binding,
            [FromQuery] bool onlyOpened = false
            )
        {
            var house = await _houseRepository.GetByAddress(User.GetAddress(), cancellationToken);

            var person = await _personRepository.Get(User.GetId(), cancellationToken);

            var query = _context.Votings
                        .AsNoTracking()
                        .Include(o => o.Variants)
                        .ThenInclude(variant => variant.Votes)
                        .ThenInclude(vote => vote.Person)
                        .Include(o => o.House)
                        .Where(o => o.House.Id == house.Id)
                        .Where(o => onlyOpened == true ? o.IsClosed == false : true)
                        .Select(o => new VotingListItem
            {
                Id       = o.Id,
                Title    = o.Title,
                IsClosed = o.IsClosed,
                Variants = o.Variants.Select(variant => new VariantView
                {
                    Id    = variant.Id,
                    Title = variant.Title,
                    Count = variant.Votes.Count,
                    Votes = variant.Votes.Select(vote => new VoteView
                    {
                        Id     = vote.Id,
                        Person = new PersonView
                        {
                            Id      = vote.Person.Id,
                            Name    = vote.Person.Name,
                            Surname = vote.Person.Surname
                        }
                    }).ToList()
                }).ToList()
            });

            var items = await query
                        .Skip(binding.Offset)
                        .Take(binding.Limit)
                        .ToListAsync();

            foreach (var item in items)
            {
                item.IsVoted = await IsVoted(person.Id, item.Id);
            }

            return(new Page <VotingListItem>
            {
                Limit = binding.Limit,
                Offset = binding.Offset,
                Total = await query.CountAsync(),
                Items = items
            });
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <Page <NewsPostView> > > GetVotingsPerson(
            CancellationToken cancellationToken,
            [FromQuery] DateListBinding binding
            )
        {
            var house = await _houseRepository.GetByAddress(User.GetAddress(), cancellationToken);

            if (house == null)
            {
                return(NotFound($"House not found"));
            }

            var query = _context.News
                        .AsNoTracking()
                        .Include(o => o.House)
                        .Where(o => o.House.Id == house.Id)
                        .Where(o => binding.StartDate == null ? true : o.CreateDate >= binding.StartDate)
                        .Where(o => binding.EndDate == null ? true : o.CreateDate <= binding.EndDate)
                        .Select(o => new NewsPostView
            {
                Id          = o.Id,
                Title       = o.Title,
                Description = o.Description,
                CreateDate  = o.CreateDate,
                Image       = o.Image
            });

            var items = await query
                        .Skip(binding.Offset)
                        .Take(binding.Limit)
                        .ToListAsync();

            return(new Page <NewsPostView>
            {
                Limit = binding.Limit,
                Offset = binding.Offset,
                Total = await query.CountAsync(),
                Items = items
            });
        }
Ejemplo n.º 4
0
        public async Task <ActionResult <CreateHouseView> > Create(
            CancellationToken cancellationToken,
            [FromQuery] string address,
            [FromBody] CreateHouseBinding binding
            )
        {
            if (String.IsNullOrEmpty(address))
            {
                return(BadRequest(address));
            }

            if (await _houseRepository.GetByAddress(address, cancellationToken) != null)
            {
                return(Conflict($"Address already exists: {address}"));
            }

            if (await _context.Houses.SingleOrDefaultAsync(o => o.Login == binding.Login, cancellationToken) != null)
            {
                return(Conflict($"Login already exists: {binding.Login}"));
            }

            var house = new House(Guid.NewGuid(), address, binding.Login, binding.Password);

            await _houseRepository.Save(house, cancellationToken);

            var token = await _jwt.Create(house, cancellationToken);

            return(Ok(new CreateHouseView
            {
                Id = house.Id,
                Address = house.Address,
                LivesHereCounter = house.People.Count(),
                Token = new TokenView {
                    AccessToken = token.Value
                }
            }));
        }