protected override async Task HandleCore(BookingEvent request) { var projection = new BookingRm() { BookingId = request.Booking.Id, Rooms = request.Booking.Rooms, ActiveBooking = request.Booking.BookingStatus == Domain.BookingStatus.Started, NumberOfOccupents = request.Booking.NumberOfOccupents, DaysBooked = request.Booking.DaysBooked, BookingStartDate = request.Booking.CheckInDate, BookingEndDate = request.Booking.CheckInDate.AddDays(request.Booking.DaysBooked) }; await this.dao.StoreBooking(projection); }
public async Task StoreBooking(BookingRm booking) { using (var conn = new SqlConnection(this.connectionString)) { await conn.OpenAsync(); using (var transaction = conn.BeginTransaction()) { var deleteSql = "Delete FROM [dbo].[Rm_Bookings] WHERE BookingId = @bookingId; DELETE FROM [dbo].[Rm_BookedRooms] WHERE BookingId = @bookingId"; await conn.ExecuteAsync(deleteSql, new { bookingId = booking.BookingId }, transaction); using (var bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, transaction)) { bulkCopy.DestinationTableName = "dbo.Rm_BookedRooms"; bulkCopy.ColumnMappings.Add("RoomId", "RoomId"); bulkCopy.ColumnMappings.Add("BookingId", "BookingId"); var table = new DataTable(); table.Columns.Add("RoomId"); table.Columns.Add("BookingId"); foreach (var roomId in booking.Rooms) { var row = table.NewRow(); row["RoomId"] = roomId; row["BookingId"] = booking.BookingId; table.Rows.Add(row); } DataTableReader reader = table.CreateDataReader(); await bulkCopy.WriteToServerAsync(reader); var insertBookingSql = @" INSERT INTO [dbo].[Rm_Bookings] ( [BookingId] ,[ActiveBooking] ,[NumberOfOccupents] ,[DaysBooked] ,[BookingStartDate] ,[BookingEndDate]) VALUES ( @bookingId, @activeBooking, @numberOfOccupents, @daysBooked, @bookingStartDate, @bookingEndDate )"; var sqlParams = new { bookingId = booking.BookingId, activeBooking = booking.ActiveBooking, numberOfOccupents = booking.NumberOfOccupents, daysBooked = booking.DaysBooked, bookingStartDate = booking.BookingStartDate, bookingEndDate = booking.BookingEndDate }; await conn.ExecuteAsync(insertBookingSql, sqlParams, transaction); } transaction.Commit(); } } }