public virtual async Task <Folder> Create(Folder folder)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    if (folder.Title == "root")
                    {
                        throw new Exception("Fig tebe, a ne root folder");
                    }

                    Folder parentFolder = await context.Folders
                                          .FirstOrDefaultAsync(x => x.Id == folder.ParentFolder.Id);

                    if (parentFolder != null)
                    {
                        folder.ParentFolder = parentFolder;
                    }

                    EntityEntry <Folder> createdResult = await context.Folders.AddAsync(folder);

                    await context.SaveChangesAsync();

                    return(createdResult.Entity);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка добавления");
                    return(null);
                }
            }
        }
示例#2
0
        public virtual async Task <MemeTagNode> Update(Guid guid, MemeTagNode entity)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    var original = await context.MemeTags.FirstOrDefaultAsync(e => e.Id == guid);

                    foreach (PropertyInfo propertyInfo in original.GetType().GetProperties())
                    {
                        if (propertyInfo.GetValue(entity, null) == null)
                        {
                            propertyInfo.SetValue(entity, propertyInfo.GetValue(original, null), null);
                        }
                    }
                    context.Entry(original).CurrentValues.SetValues(entity);
                    await context.SaveChangesAsync();

                    return(entity);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка обновления");
                    return(null);
                }
            }
        }
 private void RemoveAllData(Folder folder, MemeFolderDbContext context)
 {
     foreach (var item in folder.Folders)
     {
         RemoveAllData(item, context);
     }
     foreach (var meme in folder.Memes)
     {
         var memeEntity = context.Memes.FirstOrDefault(x => x.Id == meme.Id);
         if (memeEntity != null)
         {
             context.Memes.Remove(memeEntity);
         }
     }
     folder.Memes.Clear();
     context.SaveChanges();
     foreach (var folder1 in folder.Folders)
     {
         var folderEntity = context.Folders.FirstOrDefault(x => x.Id == folder1.Id);
         if (folderEntity != null)
         {
             context.Folders.Remove(folderEntity);
         }
     }
     folder.Folders.Clear();
     context.SaveChanges();
 }
        public virtual async Task <T> Update(Guid guid, T entity)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    var original = await context.Set <T>().FirstOrDefaultAsync(e => e.Id == guid);

                    foreach (PropertyInfo propertyInfo in original.GetType().GetProperties())
                    {
                        if (propertyInfo.GetValue(entity, null) == null)
                        {
                            propertyInfo.SetValue(entity, propertyInfo.GetValue(original, null), null);
                        }
                    }
                    context.Entry(original).CurrentValues.SetValues(entity);
                    await context.SaveChangesAsync();

                    //entity.Id = guid;
                    //T ent = context.Entry(entity);
                    //ent.State = EntityState.Modified;

                    //context.Entry(entity).State = EntityState.Modified;

                    //context.Set<T>().Update(entity);
                    //await context.SaveChangesAsync();

                    return(entity);
                }
                catch (Exception ex)
                {
                    return(null);
                }
            }
        }
        public virtual async Task <bool> Delete(Guid guid)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    var entities = await GetAll();

                    var entity = entities.ToList().FirstOrDefault(x => x.Id == guid);
                    if (entity != null)
                    {
                        RemoveAllData(entity, context);
                        context.Folders.Remove(entity);
                        await context.SaveChangesAsync();

                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка удаления");
                    return(false);
                }
            }
        }
示例#6
0
        public virtual async Task <MemeTag> Get(Guid guid)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                MemeTag entity = await context.MemeTags.FirstOrDefaultAsync(e => e.Id == guid);

                return(entity);
            }
        }
示例#7
0
        public virtual async Task <IEnumerable <Meme> > GetAll()
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                IEnumerable <Meme> entities = await context.Memes.ToListAsync();

                return(entities);
            }
        }
        public virtual async Task <T> Create(T entity)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                EntityEntry <T> createdResult = await context.Set <T>().AddAsync(entity);

                await context.SaveChangesAsync();

                return(createdResult.Entity);
            }
        }
示例#9
0
        public virtual async Task <MemeTagNode> Get(Guid guid)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                MemeTagNode entity = await context.MemeTagNodes
                                     .Include(mtn => mtn.Meme)
                                     .Include(mtn => mtn.MemeTag)
                                     .FirstOrDefaultAsync(e => e.Id == guid);

                return(entity);
            }
        }
示例#10
0
        public virtual async Task <bool> Delete(Guid guid)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                MemeTagNode entity = await context.MemeTagNodes.FirstOrDefaultAsync(e => e.Id == guid);

                context.MemeTagNodes.Remove(entity);

                await context.SaveChangesAsync();

                return(true);
            }
        }
示例#11
0
        public virtual async Task <Folder> Get(Guid guid)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                Folder entity = await Task.FromResult(context.Folders
                                                      .Include(f => f.Memes)
                                                      .Include(f => f.Folders)
                                                      .ThenInclude(f => f.Folders)
                                                      .FirstOrDefault(e => e.Id == guid));

                return(entity);
            }
        }
示例#12
0
        public virtual async Task <IEnumerable <MemeTag> > GetAll()
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    IEnumerable <MemeTag> entities = await Task.FromResult(context.MemeTags
                                                                           .ToList());

                    return(entities);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка получения");
                    return(null);
                }
            }
        }
示例#13
0
        public virtual async Task <MemeTag> Create(MemeTag meme)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    EntityEntry <MemeTag> createdResult = await context.MemeTags.AddAsync(meme);

                    await context.SaveChangesAsync();

                    return(createdResult.Entity);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка создания");
                    return(null);
                }
            }
        }
示例#14
0
        public async Task <Folder> CreateRootFolder(Folder folder)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    EntityEntry <Folder> createdResult = await context.Folders.AddAsync(folder);

                    context.SaveChanges();

                    return(createdResult.Entity);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка созданиея");
                    return(null);
                }
            }
        }
示例#15
0
        public virtual async Task <MemeTagNode> Create(MemeTagNode memeTagNode)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    Meme meme = await context.Memes.FirstOrDefaultAsync(m => m.Id == memeTagNode.Meme.Id);

                    if (meme != null)
                    {
                        memeTagNode.Meme = meme;
                    }
                    else
                    {
                        throw new ArgumentNullException("Meme can not be null");
                    }

                    MemeTag memeTag = await context.MemeTags.FirstOrDefaultAsync(mt => mt.Id == memeTagNode.MemeTag.Id);

                    if (memeTag != null)
                    {
                        memeTagNode.MemeTag = memeTag;
                    }
                    else
                    {
                        throw new ArgumentNullException("MemeTag can not be null");
                    }

                    EntityEntry <MemeTagNode> createdResult = await context.MemeTagNodes.AddAsync(memeTagNode);

                    await context.SaveChangesAsync();

                    return(createdResult.Entity);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка создания");
                    return(null);
                }
            }
        }
示例#16
0
        public async Task <ObservableCollection <Folder> > GetFoldersByTitle(string Title)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    IEnumerable <Folder> entities = await Task.FromResult(context.Folders
                                                                          .Include(x => x.Memes)
                                                                          .ThenInclude(m => m.Tags)
                                                                          .ThenInclude(m => m.MemeTag)
                                                                          .ToList()
                                                                          .Where(x => x.Title == Title));

                    return(new ObservableCollection <Folder>(entities));
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка получения");
                    return(null);
                }
            }
        }
示例#17
0
        public virtual async Task <Meme> Create(Meme meme)
        {
            using (MemeFolderDbContext context = _contextFactory.CreateDbContext(null))
            {
                try
                {
                    if (string.IsNullOrEmpty(meme.ImagePath))
                    {
                        throw new Exception("No image path");
                    }

                    if (string.IsNullOrEmpty(meme.Title))
                    {
                        meme.Title = Path.GetFileNameWithoutExtension(meme.ImagePath);
                    }

                    //if (meme.ImageData == null)
                    //    meme.ImageData = MemeExtentions.ConvertImageToByteArray(meme.ImagePath);

                    Folder parentFolderEntity = await context.Folders.FirstOrDefaultAsync(x => x.Id == meme.Folder.Id);

                    if (parentFolderEntity != null)
                    {
                        meme.Folder = parentFolderEntity;
                    }

                    EntityEntry <Meme> createdResult = await context.Memes.AddAsync(meme);

                    await context.SaveChangesAsync();

                    return(createdResult.Entity);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка создания");
                    return(null);
                }
            }
        }