Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
        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;
     }
 }