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}")); } }
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); }
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}")); } }
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}")); } }
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); } }