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); }
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); }
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); }
public void Cancel(ISecurityContext securityContext) { if (!securityContext.GetCurrentUser().Equals(User, StringComparison.OrdinalIgnoreCase)) { throw new UserMismatchException(Id); } CanceledOn = DateTimeOffset.Now; AddEvent(new BookingCanceledEvent { Id = Id }); }
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()); }
public Task <IEnumerable <BookingRepresentation> > List() { FailRandom(); return(queryDataSource.ListPendingAsync(securityContext.GetCurrentUser())); }