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