Пример #1
0
            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"));
            }
Пример #2
0
            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));
            }