Esempio n. 1
0
        public async Task <Contracts.Models.Booking> BookAsync(int accommodationId, Contracts.Models.BookingDetails details)
        {
            var accommodation = await facilityDataSource.FindAccommodationAsync(accommodationId);

            if (accommodation == null)
            {
                throw new AccommodationNotFoundException(accommodationId);
            }

            var facility = await facilityDataSource.FindFacilityAsync(accommodation.FacilityId);

            var booking = new Contracts.Models.Booking
            {
                Id                = Guid.NewGuid(),
                User              = securityContext.GetCurrentUser(),
                AccommodationId   = accommodationId,
                Details           = details,
                AccommodationName = accommodation.Name,
                FacilityId        = facility != null ? facility.Id : 0,
                FacilityName      = facility?.Name,
                StreetAddress     = facility?.StreetAddress
            };

            await dataSource.CreateAsync(booking);

            return(booking);
        }
Esempio n. 2
0
        public static BookingRecord NewBooking(
            Accommodation accommodation,
            Facility facility,
            DateTimeOffset fromDate,
            DateTimeOffset toDate,
            ISecurityContext securityContext)
        {
            var bookingRecord = new BookingRecord
            {
                Id                = Guid.NewGuid(),
                User              = securityContext.GetCurrentUser(),
                AccommodationId   = accommodation.Id,
                AccommodationName = accommodation.Name,
                FacilityId        = facility.Id,
                FacilityName      = facility.Name,
                StreetAddress     = facility.StreetAddress,
                FromDate          = fromDate,
                ToDate            = toDate
            };

            bookingRecord.AddEvent(new BookingCreatedEvent
            {
                Id = bookingRecord.Id,
                AccommodationId = bookingRecord.AccommodationId,
                FromDate        = bookingRecord.FromDate,
                ToDate          = bookingRecord.ToDate
            });

            return(bookingRecord);
        }
Esempio n. 3
0
        public async Task <Booking> BookAsync(Guid accommodationId, BookingDetails details)
        {
            await accommodationService.CheckAccommodationAsync(accommodationId);

            var booking = new Booking
            {
                Id              = Guid.NewGuid(),
                User            = securityContext.GetCurrentUser(),
                AccommodationId = accommodationId,
                Details         = details
            };

            await dataSource.CreateAsync(booking);

            return(booking);
        }
Esempio n. 4
0
        public void Cancel(ISecurityContext securityContext)
        {
            if (!securityContext.GetCurrentUser().Equals(User, StringComparison.OrdinalIgnoreCase))
            {
                throw new UserMismatchException(Id);
            }

            CanceledOn = DateTimeOffset.Now;

            AddEvent(new BookingCanceledEvent {
                Id = Id
            });
        }
Esempio n. 5
0
 private static IEnumerable <ReliableEvent> AsReliableEvents(this IEnumerable <IntegrationEvent> events, ISecurityContext securityContext)
 {
     return(from @event in events
            select new ReliableEvent
     {
         Id = @event.EventId.ToString(),
         EventName = @event.GetType().Name,
         OccurredAt = @event.OccurredAt,
         User = securityContext.GetCurrentUser(),
         Tenant = securityContext.GetCurrentTenant(),
         Payload = JsonConvert.SerializeObject(@event)
     });
 }
        public static async Task PersistEventsAsync(this FacilityContext context, Entity <int> entity, ISecurityContext securityContext)
        {
            var events = entity.CollectEvents();

            if (events != null && events.Any())
            {
                foreach (var @event in events)
                {
                    await context.Events.AddAsync(new Models.Event
                    {
                        EventName  = @event.GetType().Name,
                        OccurredAt = @event.OccurredAt,
                        User       = securityContext.GetCurrentUser(),
                        Tenant     = securityContext.GetCurrentTenant(),
                        Payload    = JsonConvert.SerializeObject(@event)
                    });
                }
            }
        }
 private void AddSecurityContext(Message message)
 {
     message.UserProperties.Add(Constants.TenantId, securityContext.GetCurrentTenant());
     message.UserProperties.Add(Constants.ObjectId, securityContext.GetCurrentUser());
 }
Esempio n. 8
0
        public Task <IEnumerable <BookingRepresentation> > List()
        {
            FailRandom();

            return(queryDataSource.ListPendingAsync(securityContext.GetCurrentUser()));
        }