public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var book = await _context.Books .Include(a => a.Attendees).ThenInclude(u => u.AppUser) .SingleOrDefaultAsync(x => x.Id == request.Id); if (book == null) { return(null); } var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); if (user == null) { return(null); } var hostUsername = book.Attendees.FirstOrDefault(x => x.IsHost)?.AppUser?.UserName; var attendance = book.Attendees.FirstOrDefault(x => x.AppUser.UserName == user.UserName); if (attendance != null && hostUsername == user.UserName) { book.IsCancelled = !book.IsCancelled; } if (attendance != null && hostUsername != user.UserName) { book.Attendees.Remove(attendance); } if (attendance == null) { attendance = new BookAttendee { AppUser = user, Book = book, IsHost = false }; book.Attendees.Add(attendance); } var result = await _context.SaveChangesAsync() > 0; return(result ? Result <Unit> .Success(Unit.Value) : Result <Unit> .Failure("Problem updating attendance")); }
public async Task <Result <Unit> > Handle(Command request, CancellationToken cancellationToken) { var user = await _context.Users.FirstOrDefaultAsync(x => x.UserName == _userAccessor.GetUsername()); var attendee = new BookAttendee { AppUser = user, Book = request.Book, IsHost = true }; request.Book.Attendees.Add(attendee); _context.Books.Add(request.Book); var result = await _context.SaveChangesAsync() > 0; if (!result) { return(Result <Unit> .Failure("Failed to create book")); } return(Result <Unit> .Success(Unit.Value)); }