Exemplo n.º 1
0
        GetApartmentByIdAsync(string apartmentId, CancellationToken cancellationToken = default(CancellationToken))
        {
            Guid id = Guid.Parse(apartmentId);

            try
            {
                var apartment = await _db.Apartments.Where(_ => _.Id == id)
                                .Include(_ => _.Address.Country).Include(_ => _.Address)
                                .AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                if (apartment is null)
                {
                    return((Result <ApartmentView>) Result <ApartmentView>
                           .NotOk <ApartmentView>(null, "Apartment is not exist"));
                }

                ApartmentView view = MakeApartmentView(apartment);

                return((Result <ApartmentView>) Result <ApartmentView>
                       .Ok(view));
            }
            catch (ArgumentNullException ex)
            {
                return((Result <ApartmentView>) Result <ApartmentView>
                       .Fail <ApartmentView>($"Source is null. {ex.Message}"));
            }
        }
Exemplo n.º 2
0
        private ApartmentView MakeApartmentView(Apartment apartment)
        {
            ApartmentView view = new ApartmentView()
            {
                Apartment = _mapper.Map <ApartmentDTO>(apartment),

                Address = _mapper.Map <AddressDTO>(apartment.Address),

                Country = _mapper.Map <CountryDTO>(apartment.Address?.Country)
            };

            return(view);
        }
Exemplo n.º 3
0
        UpdateApartmentAsync(ApartmentView apartment, CancellationToken cancellationToken = default(CancellationToken))
        {
            apartment.Address.CountryId = apartment.Country.Id;

            Apartment apartmentForUpdate = _mapper.Map <Apartment>(apartment.Apartment);
            Address   addressForUpdate   = _mapper.Map <Address>(apartment.Address);

            apartmentForUpdate.Update = DateTime.UtcNow;

            _db.Entry(apartmentForUpdate).Property(c => c.Title).IsModified         = true;
            _db.Entry(apartmentForUpdate).Property(c => c.Text).IsModified          = true;
            _db.Entry(apartmentForUpdate).Property(c => c.Area).IsModified          = true;
            _db.Entry(apartmentForUpdate).Property(c => c.IsOpen).IsModified        = true;
            _db.Entry(apartmentForUpdate).Property(c => c.Price).IsModified         = true;
            _db.Entry(apartmentForUpdate).Property(c => c.NumberOfRooms).IsModified = true;
            _db.Entry(apartmentForUpdate).Property(c => c.Update).IsModified        = true;

            _db.Entry(addressForUpdate).Property(c => c.CountryId).IsModified         = true;
            _db.Entry(addressForUpdate).Property(c => c.City).IsModified              = true;
            _db.Entry(addressForUpdate).Property(c => c.Street).IsModified            = true;
            _db.Entry(addressForUpdate).Property(c => c.Home).IsModified              = true;
            _db.Entry(addressForUpdate).Property(c => c.NumberOfApartment).IsModified = true;

            try
            {
                await _db.SaveChangesAsync(cancellationToken);

                return((Result <ApartmentView>) Result <ApartmentView>
                       .Ok(apartment));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return((Result <ApartmentView>) Result <ApartmentView>
                       .Fail <ApartmentView>($"Cannot update model. {ex.Message}"));
            }
            catch (DbUpdateException ex)
            {
                return((Result <ApartmentView>) Result <ApartmentView>
                       .Fail <ApartmentView>($"Cannot update model. {ex.Message}"));
            }
        }
Exemplo n.º 4
0
        CreateApartmentAsync(AddApartment apartment, string ownerId, CancellationToken cancellationToken = default(CancellationToken))
        {
            var addedApartment = _mapper.Map <Apartment>(apartment);

            addedApartment.OwnerId = Guid.Parse(ownerId);

            _db.Apartments.Add(addedApartment);

            try
            {
                await _db.SaveChangesAsync(cancellationToken);

                Apartment apartmentAfterAdding = await _db.Apartments.Where(_ => _.Title == addedApartment.Title)
                                                 .Select(_ => _).Include(_ => _.Address.Country).Include(_ => _.Address)
                                                 .AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                ApartmentView view = MakeApartmentView(apartmentAfterAdding);

                return((Result <ApartmentView>) Result <ApartmentView>
                       .Ok(view));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return((Result <ApartmentView>) Result <ApartmentView>
                       .Fail <ApartmentView>($"Cannot save model. {ex.Message}"));
            }
            catch (DbUpdateException ex)
            {
                return((Result <ApartmentView>) Result <ApartmentView>
                       .Fail <ApartmentView>($"Cannot save model. {ex.Message}"));
            }
            catch (ArgumentNullException ex)
            {
                return((Result <ApartmentView>) Result <ApartmentView>
                       .Fail <ApartmentView>($"Source is null. {ex.Message}"));
            }
        }
Exemplo n.º 5
0
        public async void UpdateApartmentAsync_Positive_TestAsync()
        {
            var options = new DbContextOptionsBuilder <ApartmentContext>()
                          .UseInMemoryDatabase(databaseName: "UpdateApartmentAsync_PositiveAndNegative_TestAsync")
                          .Options;

            using (var context = new ApartmentContext(options))
            {
                await context.AddRangeAsync(_users);

                await context.SaveChangesAsync();

                var userWithApartments = context.Users.AsNoTracking().FirstOrDefault();

                foreach (var item in _addresses)
                {
                    item.CountryId = context.Countries.FirstOrDefault().Id;
                }

                for (int i = 0; i < 2; i++)
                {
                    _apartments[i].OwnerId = userWithApartments.Id;
                    _apartments[i].Address = _addresses[i];
                }

                await context.AddRangeAsync(_apartments);

                await context.SaveChangesAsync();
            }

            using (var context = new ApartmentContext(options))
            {
                var apartment = await context.Apartments
                                .Include(_ => _.Address.Country).Include(_ => _.Address)
                                .AsNoTracking().FirstOrDefaultAsync();

                var newCountry = await context.Countries.Where(_ => _.Id != apartment.Address.CountryId).FirstOrDefaultAsync();

                ApartmentView view = new ApartmentView()
                {
                    Apartment = _mapper.Map <ApartmentDTO>(apartment),

                    Address = _mapper.Map <AddressDTO>(apartment.Address),

                    Country = _mapper.Map <CountryDTO>(apartment.Address.Country)
                };

                view.Address.City    = "Updated";
                view.Apartment.Title = "Updated";
                view.Country         = _mapper.Map <CountryDTO>(newCountry);

                var service = new ApartmentUserService(context, _mapper);

                var resultPositive = await service.UpdateApartmentAsync(view);

                resultPositive.IsSuccess.Should().BeTrue();
                resultPositive.Data.Apartment.Title.Should().BeEquivalentTo("Updated");
                resultPositive.Data.Address.City.Should().BeEquivalentTo("Updated");
                resultPositive.Data.Country.Name.Should().BeEquivalentTo(newCountry.Name);
            }
        }