public async Task <ActionResult <Product> > Add( [FromServices] IRepository <Models.Product, int> productRepository, [FromServices] IEntityScrapper <Models.Product> entityScrapper, [FromBody] Uri uri) { var absoluteUrl = uri.AbsoluteUri; var storedProduct = productRepository.Find(product => product.Url == absoluteUrl).FirstOrDefault(); if (storedProduct == null) { var dateTime = DateTime.Now; var product = await entityScrapper.GetAsync(absoluteUrl); if (product != null) { product.Added = dateTime; product.Updated = dateTime; product.Read = dateTime; var transaction = PolicyHelper.WaitAndRetry().Execute( () => productRepository.BeginTransaction(IsolationLevel.Serializable)); productRepository.Add(product); await productRepository.SaveChangesAsync(); await transaction.CommitAsync(); return(product.ToDataTransferObject(true)); } } return(storedProduct?.ToDataTransferObject()); }
public async Task <ActionResult <Department> > Add( [FromServices] IRepository <Models.Department, int> departmentRepository, [FromServices] IEntityScrapper <Models.Department> departmentScrapper, [FromBody] Uri uri) { var absoluteUrl = uri.AbsoluteUri; var storedDepartment = departmentRepository.Find(department => department.Url == absoluteUrl).FirstOrDefault(); if (storedDepartment == null) { var department = await departmentScrapper.GetAsync(absoluteUrl); if (department != null) { var dateTime = DateTime.Now; department.Added = dateTime; department.Updated = dateTime; department.Read = dateTime; var transaction = PolicyHelper.WaitAndRetry().Execute( () => departmentRepository.BeginTransaction(IsolationLevel.Serializable)); departmentRepository.Add(department); await departmentRepository.SaveChangesAsync(); await transaction.CommitAsync(); return(department.ToDataTransferObject(true)); } } if (storedDepartment == null) { return(this.NotFound()); } return(storedDepartment?.ToDataTransferObject()); }