private ApartmentModel MapToQueryModel(Domain.Entities.Apartment dbApartment) { var amenities = dbApartment.Amenities.Where(a => !a.IsDeleted).Select(MapAmenity).ToArray(); var availableDates = dbApartment.GetAvailableDates(); var forRentalDates = dbApartment.ForRentalDates.Where(frd => !frd.IsDeleted).Select(d => d.Date).ToArray(); var images = dbApartment.Images.Where(i => !i.IsDeleted).Select(MapImage).ToArray(); var location = MapLocation(dbApartment.Location); var comments = dbApartment.Comments.Where(c => !c.IsDeleted).Select(MapComment).ToArray(); var rating = comments.DefaultIfEmpty(new CommentModel { Rating = 0 }).Average(c => (double)c.Rating); return(new ApartmentModel { Id = dbApartment.Id, HostId = dbApartment.HostId, IsHostBanned = dbApartment.Host.User.IsBanned, ActivityState = dbApartment.ActivityState, ApartmentType = dbApartment.ApartmentType, CheckInTime = dbApartment.CheckInTime, CheckOutTime = dbApartment.CheckOutTime, NumberOfGuests = dbApartment.NumberOfGuests, NumberOfRooms = dbApartment.NumberOfRooms, PricePerNight = dbApartment.PricePerNight, Title = dbApartment.Title, Amenities = amenities, Comments = comments, AvailableDates = availableDates, ForRentalDates = forRentalDates, Images = images, Location = location, Rating = rating }); }
private Task SyncApartmentAsync(IQueryDbContext queryDb, Domain.Entities.Apartment dbApartment, CancellationToken stoppingToken) { var filter = Builders <ApartmentModel> .Filter.Eq(u => u.Id, dbApartment.Id); if (dbApartment.IsDeleted) { return(queryDb.Apartments.DeleteOneAsync(filter, stoppingToken)); } var replacement = MapToQueryModel(dbApartment); var options = new ReplaceOptions() { IsUpsert = true }; return(queryDb.Apartments.ReplaceOneAsync(filter, replacement, options, stoppingToken)); }
private static void CascadeLogicalDelete(Domain.Entities.Apartment apartment) { foreach (var item in apartment.Images) { item.IsDeleted = true; } foreach (var item in apartment.Reservations) { item.IsDeleted = true; } foreach (var item in apartment.Comments) { item.IsDeleted = true; } foreach (var item in apartment.ApartmentAmenities) { item.IsDeleted = true; } foreach (var item in apartment.ForRentalDates) { item.IsDeleted = true; } }