public async Task <DomainProjectProcessedScreenshot> AddAsync(DomainProjectProcessedScreenshot entity) { ProjectEntity project = await _projectRepository.SingleOrDefaultAsync(p => p.Id == entity.ProjectId); if (project == null) { throw new NotFoundException(string.Format("Project {0} was not found", entity.ProjectId)); } ProjectEntity.EncodedScreenshot screenshot = project.EncodedScreenshots.FirstOrDefault(s => s.ContentType == entity.ContentType && s.Width == entity.Width); if (screenshot == null) { // if does not exist // adding to the project screenshot = new ProjectEntity.EncodedScreenshot { FileId = entity.FileId, ContentType = entity.ContentType, Width = entity.Width, Height = entity.Height }; List <ProjectEntity.EncodedScreenshot> encodedScreenshots = project.EncodedScreenshots.ToList(); encodedScreenshots.Add(screenshot); project.EncodedScreenshots = encodedScreenshots.ToArray(); await _projectRepository.UpdateAsync(project); } // building result return(BuildDomainObject(project, screenshot)); }
public async Task <List <DomainProjectProcessedScreenshot> > AddAsync(IList <DomainProjectProcessedScreenshot> entities) { IEnumerable <IGrouping <string, DomainProjectProcessedScreenshot> > entitiesByProject = entities.GroupBy(p => p.ProjectId); var projectTasks = new List <Task>(); var results = new List <DomainProjectProcessedScreenshot>(); foreach (var projectEntities in entitiesByProject) { string projectId = projectEntities.Key; IGrouping <string, DomainProjectProcessedScreenshot> groupedEntities = projectEntities; // adding entities to project projectTasks.Add(Task.Run(async() => { ProjectEntity project = await _projectRepository.SingleOrDefaultAsync(p => p.Id == projectId); if (project == null) { throw new NotFoundException(string.Format("Project {0} was not found", projectId)); } List <ProjectEntity.EncodedScreenshot> projectScreenshots = project.EncodedScreenshots.ToList(); foreach (DomainProjectProcessedScreenshot entity in groupedEntities) { ProjectEntity.EncodedScreenshot screenshot = project.EncodedScreenshots.FirstOrDefault(v => v.ContentType == entity.ContentType && v.Width == entity.Width); if (screenshot == null) { // if does not exist // adding to the project screenshot = new ProjectEntity.EncodedScreenshot { FileId = entity.FileId, ContentType = entity.ContentType, Width = entity.Width, Height = entity.Height }; projectScreenshots.Add(screenshot); } // building result results.Add(BuildDomainObject(project, screenshot)); } // updating project project.EncodedScreenshots = projectScreenshots.ToArray(); await _projectRepository.UpdateAsync(project); })); } await Task.WhenAll(projectTasks); return(results); }
public async Task <DomainProjectProcessedScreenshot> GetAsync(DomainProjectProcessedScreenshot entity) { ProjectEntity project = await _projectRepository.SingleOrDefaultAsync(p => p.Id == entity.ProjectId); if (project == null) { throw new NotFoundException(string.Format("Project {0} was not found", entity.ProjectId)); } ProjectEntity.EncodedScreenshot screenshot = project.EncodedScreenshots.Single(s => s.FileId == entity.FileId); // building result return(BuildDomainObject(project, screenshot)); }
private DomainProjectProcessedScreenshot BuildDomainObject(ProjectEntity project, ProjectEntity.EncodedScreenshot entity) { return(new DomainProjectProcessedScreenshot { FileId = entity.FileId, ContentType = entity.ContentType, Width = entity.Width, Height = entity.Height, FileUri = _uriProvider.CreateUri(entity.FileId), ProjectId = project.Id, UserId = project.UserId }); }