Exemplo n.º 1
0
        public async Task <bool> Handle(ReserveBookCommand request, CancellationToken cancellationToken)
        {
            var reservation = await _db.Reservations
                              .Include(x => x.Loans)
                              .Include(x => x.Member)
                              .FirstOrDefaultAsync(x => x.Number == request.Number, cancellationToken);

            if (reservation == null)
            {
                reservation = new Reservation
                {
                    RequestDate = _dateTimeService.Now(),
                    Status      = StatusReservation.Opened,
                    Number      = request.Number,
                    Member      = await _db.Members.FirstOrDefaultAsync(x => x.DocumentId == request.MemberId, cancellationToken)
                };

                if (reservation.Member == null)
                {
                    reservation.Member = new Member
                    {
                        DocumentId = request.MemberId,
                        Name       = request.MemberName
                    };
                }

                await _db.AddAsync(reservation, cancellationToken);
            }

            reservation.Loans = new List <Loan>();

            foreach (var item in request.Items)
            {
                var loan = new Loan
                {
                    Copy    = await _db.Copies.FirstOrDefaultAsync(x => x.Number == item.Number, cancellationToken),
                    DueDate = reservation.RequestDate.AddDays(7)
                };

                reservation.Loans.Add(loan);
            }

            await _db.SaveChangesAsync(cancellationToken);

            var message = new PublishReservationEventCommand
            {
                ReservationId = reservation.Id
            };

            await _bus.SendAsync(ContextNames.Queue.Library, message);

            return(true);
        }
Exemplo n.º 2
0
        private bool Handle(PublishReservationEventCommand command)
        {
            var provider = DependencyInjectorStub.Get((s, c) =>
            {
                BootStrapper.RegisterServices(s, c);
                s.AddScoped(x => MockRepository.GetContext());
                s.AddScoped <IBusPublisher>(x => Bus);
            });
            var handler = provider.GetRequiredService <IRequestHandler <PublishReservationEventCommand, bool> >();

            return(handler.Handle(command, CancellationToken.None).GetAwaiter().GetResult());
        }
Exemplo n.º 3
0
        public async Task <bool> Handle(ExpireReservationCommand request, CancellationToken cancellationToken)
        {
            var reservation = await _db.Reservations.FirstOrDefaultAsync(x => x.Id == request.ReservationId, cancellationToken);

            reservation.Status = StatusReservation.Expired;

            await _db.SaveChangesAsync(cancellationToken);

            var message = new PublishReservationEventCommand
            {
                ReservationId = reservation.Id
            };

            await _bus.SendAsync(ContextNames.Queue.Library, message);

            return(true);
        }
Exemplo n.º 4
0
        protected override async Task RunAsync(IServiceProvider provider)
        {
            List <Reservation> reservations = null;

            using (var context = provider.GetService <DbLibrary>())
            {
                reservations = await context.Reservations.ToListAsync();
            }

            foreach (var reservation in reservations)
            {
                var message = new PublishReservationEventCommand()
                {
                    ReservationId = reservation.Id
                };

                var bus = provider.GetService <IBusPublisher>();
                await bus.SendAsync(ContextNames.Queue.Library, message);
            }
        }