private void Merge(DataModel.Introduction dbItem, IEnumerable <ExternalUrl> newExternalUrls)
        {
            if (newExternalUrls == null)
            {
                newExternalUrls = new List <ExternalUrl>();
            }

            var toRemove = dbItem.ExternalUrls.Where(eu => !newExternalUrls.Any(x => eu.ExternalUrlId == x.Id)).ToList();

            foreach (var item in toRemove)
            {
                dbItem.ExternalUrls.Remove(item);

                _context.ExternalUrls.Remove(item.ExternalUrl);
                _context.IntroductionExternalUrls.Remove(item);
            }

            var toAdd = newExternalUrls.Where(x => x.Id == null);

            foreach (var item in toAdd)
            {
                dbItem.ExternalUrls.Add(AbstractionsConverter.ToIntroductionExternalUrl(item));
            }

            var toUpdate = newExternalUrls.Where(x => x.Id.HasValue);

            foreach (var item in toUpdate)
            {
                var upd = dbItem.ExternalUrls.FirstOrDefault(x => x.ExternalUrlId == item.Id.Value);

                upd.ExternalUrl.DisplayName = item.DisplayName;
                upd.ExternalUrl.Url         = item.Url;
                upd.ExternalUrl.Version++;
            }
        }
Exemplo n.º 2
0
        private async Task <Account> CreateAsync(Account item)
        {
            CheckBeforeCreate(item);

            var hashedPassword = _hashManager.Hash(item.Password);

            var account = AbstractionsConverter.ToAccount(item, hashedPassword);

            await _context.Accounts.AddAsync(account);

            await _context.SaveChangesAsync();

            return(DataConverter.ToAccount(account));
        }
Exemplo n.º 3
0
        private async Task <Category> CreateAsync(Category category)
        {
            CheckBeforeCreate(category);

            var dbItem = AbstractionsConverter.ToCategory(category);

            await _context.Categories.AddAsync(dbItem);

            await _context.SaveChangesAsync();

            var categoryWithProject = await _context.CategoriesWithTotalProjects.FirstOrDefaultAsync(x => x.Id == dbItem.Id);

            return(DataConverter.ToCategory(categoryWithProject));
        }
Exemplo n.º 4
0
        private void Merge(DataModel.Project dbProject, IEnumerable <ExternalUrl> externalUrls)
        {
            foreach (var item in dbProject.ExternalUrls ?? new List <DataModel.ProjectExternalUrl>())
            {
                var remoteItem = externalUrls?.FirstOrDefault(x => x.Id.HasValue && x.Id == item.ExternalUrlId);
                if (remoteItem == null)
                {
                    _context.ExternalUrls.Remove(item.ExternalUrl);
                }
                else
                {
                    item.ExternalUrl.DisplayName = remoteItem.DisplayName;
                    item.ExternalUrl.Url         = remoteItem.Url;
                    item.ExternalUrl.Version++;
                }
            }

            foreach (var item in externalUrls?.Where(x => x.Id == null) ?? new List <ExternalUrl>())
            {
                dbProject.ExternalUrls.Add(AbstractionsConverter.ToProjectExternalUrl(item));
            }
        }
Exemplo n.º 5
0
        private void Merge(DataModel.Project dbProject, IEnumerable <GalleryImage> galleryImages)
        {
            foreach (var item in dbProject.GalleryImages ?? new List <DataModel.GalleryImage>())
            {
                var remoteItem = galleryImages?.FirstOrDefault(x => x.Id.HasValue && x.Id == item.Id);

                if (remoteItem == null)
                {
                    _context.GalleryImages.Remove(item);
                }
                else
                {
                    item.ExtraUrl = remoteItem.ExtraUrl;
                    item.ImageUrl = remoteItem.ImageUrl;
                    item.Version++;
                }
            }

            foreach (var item in galleryImages?.Where(x => x.Id == null) ?? new List <GalleryImage>())
            {
                dbProject.GalleryImages.Add(AbstractionsConverter.ToGalleryImage(item));
            }
        }
Exemplo n.º 6
0
        private async Task <Project> CreateAsync(Project project)
        {
            CheckBeforeCreate(project);

            var dbItem = AbstractionsConverter.ToProject(project);
            await _context.Projects.AddAsync(dbItem);

            await _context.SaveChangesAsync();

            var result = await _context.Projects
                         .AsNoTracking()
                         .Include(x => x.Category)
                         .Include(x => x.GalleryImages)
                         .Include(x => x.ExternalUrls)
                         .ThenInclude(x => x.ExternalUrl)
                         .FirstOrDefaultAsync(x => x.Id == dbItem.Id);

            if (result == null)
            {
                throw new InconsistencyException(Resources.TextMessages.ProjectDoesNotExist);
            }

            return(DataConverter.ToProject(result));
        }