Beispiel #1
0
        public Task <bool> CompliesWithRuleAsync(CourtBooking booking)
        {
            var startHourPasses = booking.StartDateTime.Hour >= _clubConfiguration.OpenHour;
            var endHourPasses   = booking.EndDateTime.Hour <= _clubConfiguration.CloseHour;

            return(Task.FromResult(startHourPasses && endHourPasses));
        }
Beispiel #2
0
        public async Task <bool> CompliesWithRuleAsync(CourtBooking booking)
        {
            var todaysBookings = (await _courtBookingService
                                  .MemberBookingsForDayAsync(booking.StartDateTime.Date, booking.Member))
                                 .ToArray();

            if (!todaysBookings.Any())
            {
                return(true); // no bookings, so cannot be overlap
            }
            var bookingHours = Enumerable.Range(booking.StartDateTime.Hour,
                                                booking.EndDateTime.Hour - booking.StartDateTime.Hour).ToArray();

            foreach (var existingBooking in todaysBookings)
            {
                for (var hour = existingBooking.StartDateTime.Hour; hour < existingBooking.EndDateTime.Hour; hour++)
                {
                    if (bookingHours.Contains(hour))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
        public Task <bool> CompliesWithRuleAsync(CourtBooking booking)
        {
            var bookingLength = booking.EndDateTime - booking.StartDateTime;

            var compliesWithRule = bookingLength <= TimeSpan.FromHours(_bookingConfiguration.MaxRegularBookingLengthInHours);

            return(Task.FromResult(compliesWithRule));
        }
        public async Task <bool> CompliesWithRuleAsync(CourtBooking booking)
        {
            var hoursBooked = await _courtBookingService.GetBookedHoursForMemberAsync(booking.Member, booking.StartDateTime.Date);

            var hoursRequested = (booking.EndDateTime - booking.StartDateTime).Hours;

            return(hoursBooked + hoursRequested <= 5);
        }
Beispiel #5
0
        public async Task <(bool, IEnumerable <string>)> PassesAllRulesAsync(CourtBooking courtBooking)
        {
            var passedRules = true;

            var errors = new List <string>();

            foreach (var rule in _rules)
            {
                if (!await rule.CompliesWithRuleAsync(courtBooking))
                {
                    errors.Add(rule.ErrorMessage);
                    passedRules = false;
                }
            }

            return(passedRules, errors);
        }
        public Task <bool> CompliesWithRuleAsync(CourtBooking booking)
        {
            if (booking.EndDateTime.Hour < _clubConfiguration.PeakStartHour)
            {
                return(Task.FromResult(true));
            }

            var peakHours = 0;

            for (var hour = booking.StartDateTime.Hour; hour < booking.EndDateTime.Hour; hour++)
            {
                if (hour >= _clubConfiguration.PeakStartHour && hour <= _clubConfiguration.PeakEndHour)
                {
                    peakHours++;
                }
            }

            return(Task.FromResult(peakHours <= _bookingConfiguration.MaxPeakBookingLengthInHours));
        }
Beispiel #7
0
        public async Task <CourtBookingResult> MakeBookingAsync(DateTime startDateTime, DateTime endDateTime, int courtId, Member member)
        {
            var courtBooking = new CourtBooking
            {
                CourtId       = courtId,
                Member        = member,
                StartDateTime = startDateTime,
                EndDateTime   = endDateTime
            };

            var(passedRules, errors) = await _bookingRuleProcessor.PassesAllRulesAsync(courtBooking);

            if (!passedRules)
            {
                return(CourtBookingResult.Failure(errors));
            }

            await _bookingService.CreateCourtBooking(courtBooking);

            await _notificationService.SendAsync("Thank you. Your booking is confirmed", member.User.Id);

            return(CourtBookingResult.Success(courtBooking));
        }
Beispiel #8
0
        public async Task CreateCourtBooking(CourtBooking courtBooking)
        {
            _dbContext.CourtBookings.Add(courtBooking);

            await _dbContext.SaveChangesAsync();
        }
Beispiel #9
0
 private CourtBookingResult(CourtBooking booking, bool passedRules, IEnumerable <string> errors)
 {
     CourtBooking      = booking;
     BookingSuccessful = passedRules;
     Errors            = errors;
 }
Beispiel #10
0
 public static CourtBookingResult Success(CourtBooking courtBooking) => new CourtBookingResult(courtBooking, true, null);