Пример #1
0
        private async Task <Result> RefreshStatus(Booking booking, ApiCaller apiCaller, BookingStatusRefreshState state)
        {
            return(await ValidateBooking()
                   .Bind(CheckIsRefreshStatusNeeded)
                   .Bind(RefreshBookingStatus));


            Result ValidateBooking()
            {
                if (!BookingStatusesForRefresh.Contains(booking.Status))
                {
                    return(Result.Failure <BookingStatusRefreshState>(
                               $"Cannot refresh booking status for booking {booking.ReferenceCode} with status {booking.Status}"));
                }

                return(Result.Success());
            }

            Result CheckIsRefreshStatusNeeded()
            {
                if (state == default)
                {
                    return(Result.Success());
                }

                return(RefreshCondition(state, _dateTimeProvider.UtcNow())
                    ? Result.Success()
                    : Result.Failure($"Booking {booking.ReferenceCode} status is recently updated"));
            }

            Task <Result> RefreshBookingStatus()
            => _supplierBookingManagement.RefreshStatus(booking, apiCaller, BookingChangeEvents.Refresh);
        }
Пример #2
0
        public async Task <List <int> > GetBookingsToRefresh()
        {
            var states = await GetStates();

            var disabledSuppliers = _statusUpdateOptionsMonitor.CurrentValue.DisabledSuppliers.Select(d => (int)d);
            var now = _dateTimeProvider.UtcNow();

            var excludedIds = states
                              .Where(s => !RefreshCondition(s, now))
                              .Select(s => s.BookingId)
                              .ToList();

            return(await _context.Bookings
                   .Where(b =>
                          !excludedIds.Contains(b.Id) &&
                          b.CheckInDate > now &&
                          BookingStatusesForRefresh.Contains(b.Status) &&
                          !disabledSuppliers.Contains(b.Supplier))
                   .Select(b => b.Id)
                   .ToListAsync());
        }