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 } })); }
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 }); }
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 }); }
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 } })); }