예제 #1
0
 public static void Delete(BlogSystemContext dataBaseContext, IHostingEnvironment hostingEnvironment,
                           IEnumerable <Guid> deleteGuid)
 {
     deleteGuid.ToList().ForEach(e =>
     {
         var template = dataBaseContext.Templates.FirstOrDefault(q => q.Guid == e);
         if (template == null)
         {
             return;
         }
         var uploadUnit = new UploadUnit(dataBaseContext, hostingEnvironment);
         //清除所有模板文件
         dataBaseContext.TemplateFiles
         .Where(t => t.TemplateGuid == template.Guid)
         .Select(o => o.Guid)
         .ToList().ForEach(d =>
         {
             var templateFile = dataBaseContext.TemplateFiles.FirstOrDefault(q => q.Guid == d);
             if (templateFile == null)
             {
                 return;
             }
             var uploadedFileGuid = templateFile.UploadedFileGuid;
             dataBaseContext.TemplateFiles.Remove(templateFile);
             uploadUnit.CheckAndDeleteFile(uploadedFileGuid);
         });
         dataBaseContext.Templates.Remove(template);
     });
 }
예제 #2
0
 public object GetService(Type serviceType)
 {
     if (serviceType == typeof(UsersController))
     {
         var context    = new BlogSystemContext();
         var repository = new EfRepository <User>(context);
         return(new UsersController(repository));
     }
     else if (serviceType == typeof(PostsController))
     {
         var context            = new BlogSystemContext();
         var postsRepository    = new EfRepository <Post>(context);
         var usersRepository    = new EfRepository <User>(context);
         var tagsRepository     = new EfRepository <Tag>(context);
         var commentsRepository = new EfRepository <Comment>(context);
         return(new PostsController(postsRepository, usersRepository, tagsRepository, commentsRepository));
     }
     else if (serviceType == typeof(TagsController))
     {
         var context         = new BlogSystemContext();
         var tagsRepository  = new EfRepository <Tag>(context);
         var usersRepository = new EfRepository <User>(context);
         var postsRepository = new EfRepository <Post>(context);
         return(new TagsController(tagsRepository, usersRepository, postsRepository));
     }
     else
     {
         return(null);
     }
 }
예제 #3
0
        /// <summary>
        /// 获取上传文件的列表。
        /// </summary>
        /// <param name="dataBaseContext">数据库上下文</param>
        /// <param name="cache">Redis缓存对象</param>
        /// <param name="templateGuid">模板Guid</param>
        /// <returns>上传文件的列表</returns>
        /// <exception cref="NotDataBaseException">数据库不存在引发的异常</exception>
        List <TemplateFile> GetUploadedFiles(BlogSystemContext dataBaseContext, IDistributedCache cache,
                                             Guid templateGuid)
        {
            var templateFilesJson = cache.GetString("TemplateFiles");
            List <TemplateFile> templateFiles;

            //如果缓存数据存在,则直接从缓存获取数据,否则从数据库获取数据并把数据保存到缓存
            if (string.IsNullOrEmpty(templateFilesJson))
            {
                //从数据库获取数据
                templateFiles = dataBaseContext.TemplateFiles
                                .Include(o => o.UploadedFile)
                                .Where(q => q.TemplateGuid == templateGuid)
                                .ToList();
                //将数据保存到缓存
                templateFilesJson = JsonConvert.SerializeObject(templateFiles.Select(q => new
                {
                    q.Name,
                    q.VirtualPath,
                    q.MIME,
                    UploadedFile = new
                    {
                        q.UploadedFile.FileName,
                        q.UploadedFile.GzipFileName,
                        q.UploadedFile.Size
                    }
                }));
                cache.SetStringAsync("TemplateFiles", templateFilesJson);
            }
            else
            {
                templateFiles = JsonConvert.DeserializeObject <List <TemplateFile> >(templateFilesJson); //从缓存获取数据
            }
            return(templateFiles);
        }
예제 #4
0
        public static List <Template> GetData(BlogSystemContext dataBaseContext, PageInfoViewModel pageInfo,
                                              string searchMessage)
        {
            var efHelper = new EFHelper(dataBaseContext);

            IQueryable <Template> q = dataBaseContext.Templates;

            // 表单搜索
            var searchText = searchMessage?.Trim();

            if (!string.IsNullOrEmpty(searchText))
            {
                q = q.Where(o => o.Name.Contains(searchText));
            }

            if (pageInfo == null)
            {
                return(q.ToList());
            }
            // 在添加条件之后,排序和分页之前获取总记录数
            pageInfo.RecordCount = q.Count();

            // 排列和数据库分页
            q = efHelper.SortAndPage(q, pageInfo);

            return(q.ToList());
        }
예제 #5
0
        public IEnumerable <PostModel> GetAllPostOfAllBlogsExplicitly()
        {
            using (var context = new BlogSystemContext())
            {
                var result = new List <PostModel>();
                var blogs  = context.Blogs.ToList();

                foreach (var blog in blogs)
                {
                    context.Entry(blog).Collection(b => b.Posts).Load();

                    foreach (var post in blog.Posts)
                    {
                        result.Add(new PostModel()
                        {
                            Id            = post.Id,
                            Content       = post.Content,
                            NumberOfLikes = post.NumberOfLikes
                        });
                    }
                }

                return(result);
            }
        }
예제 #6
0
 public BlogSystemSeedData(BlogSystemContext context,
                           UserManager <User> userManager,
                           RoleManager <IdentityRole> roleManager)
 {
     _context     = context;
     _userManager = userManager;
     _roleManager = roleManager;
 }
예제 #7
0
 public static void AddItem(BlogSystemContext dataBaseContext, string name)
 {
     FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.ArticleLabelName,
                                                 new ParametersFormatErrorException("标签格式错误。"));
     dataBaseContext.ArticleLabels.AddRange(new ArticleLabel()
     {
         Name = name
     });
 }
예제 #8
0
 public static void AddItem(BlogSystemContext dataBaseContext, string name)
 {
     FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.TemplateName,
                                                 new ParametersFormatErrorException("模板名称格式错误。"));
     dataBaseContext.Templates.Add(new Template()
     {
         Guid = Guid.NewGuid(),
         Name = name
     });
 }
예제 #9
0
        public static void EditItem(BlogSystemContext dataBaseContext, Guid guid, string name)
        {
            FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.ArticleLabelName,
                                                        new ParametersFormatErrorException("标签格式错误。"));
            var articleLabel = dataBaseContext.ArticleLabels.FirstOrDefault(q => q.Guid == guid);

            if (articleLabel != null)
            {
                articleLabel.Name = name;
            }
        }
예제 #10
0
        public static List <Article> GetData(BlogSystemContext dataBaseContext, PageInfoViewModel pageInfo,
                                             string searchMessage, Guid?articleTypeGuid = null, Guid?articleLabelGuid = null,
                                             bool getArticleType = true, bool getArticleLabels = true, bool getText = true)
        {
            var efHelper = new EFHelper(dataBaseContext);

            IQueryable <Article> q;

            if (articleLabelGuid.HasValue)
            {
                q = dataBaseContext.ArticleLabelArticles.Where(
                    o => o.ArticleLabelGuid == articleLabelGuid).Select(o => o.Article);
            }
            else
            {
                q = dataBaseContext.Articles;
            }

            IQueryable <ArticleLabelArticle> m = dataBaseContext.ArticleLabelArticles;

            m = m.Include(o => o.Article)
                .Include(o => o.ArticleLabel);

            q = q.Include(o => o.ArticleType);

            if (articleTypeGuid.HasValue)
            {
                var selectedArticleTypeGuids = ArticleType.GetVirtualTree(dataBaseContext, articleTypeGuid.Value);
                q = q.Join(selectedArticleTypeGuids, l => l.ArticleType, r => r, (l, r) => l);
            }

            // 表单搜索
            var searchText = searchMessage?.Trim();

            if (!string.IsNullOrEmpty(searchText))
            {
                q = q.Where(o => o.Name.Contains(searchText));
            }

            if (pageInfo != null)
            {
                // 在添加条件之后,排序和分页之前获取总记录数
                pageInfo.RecordCount = q.Count();

                // 排列和数据库分页
                q = efHelper.SortAndPage(q, pageInfo);
            }

            var articles = q.ToList();

            articles.ForEach(o => o.ArticleLabelArticles = m.Where(p => p.Article == o).ToList());

            return(articles);
        }
예제 #11
0
        public static void EditItem(BlogSystemContext dataBaseContext, Guid guid, string name)
        {
            FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.TemplateName,
                                                        new ParametersFormatErrorException("模板名称格式错误。"));
            var template = dataBaseContext.Templates.FirstOrDefault(q => q.Guid == guid);

            if (template != null)
            {
                template.Name = name;
            }
        }
예제 #12
0
        public static List <ArticleType> GetVirtualTree(BlogSystemContext dataBaseContext, Guid?articleTypeGuid = null)
        {
            var articleTypes = new List <ArticleType>();

            AddChildArticleTypes(dataBaseContext, articleTypeGuid, articleTypes, string.Empty);
            if (articleTypeGuid != null)
            {
                articleTypes.Add(dataBaseContext.ArticleTypes.FirstOrDefault(q => q.Guid == articleTypeGuid));
            }
            return(articleTypes);
        }
예제 #13
0
 public static void AddItem(BlogSystemContext dataBaseContext, string name, Guid?parentArticleTypeGuid,
                            uint sequence)
 {
     FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.ArticleTypeName,
                                                 new ParametersFormatErrorException("类别格式错误。"));
     dataBaseContext.ArticleTypes.AddRange(new ArticleType()
     {
         Name = name,
         ParentArticleTypeGuid = parentArticleTypeGuid,
         Sequence = sequence
     });
 }
예제 #14
0
        static void AddChildArticleTypes(BlogSystemContext dataBaseContext, Guid?articleTypeGuid,
                                         ICollection <ArticleType> articleTypes, string prefix)
        {
            var _articleTypes = dataBaseContext.ArticleTypes.Where(q => q.ParentArticleTypeGuid == articleTypeGuid)
                                .OrderBy(o => o.Sequence).ToList();

            _articleTypes.ForEach(a => a.Name = $"{prefix}{a.Name}");
            _articleTypes.ForEach(a =>
            {
                articleTypes.Add(a);
                AddChildArticleTypes(dataBaseContext, a.Guid, articleTypes, $"{prefix} ");
            });
        }
예제 #15
0
        public static Article GetArticle(BlogSystemContext dataBaseContext, Guid guid, bool addUpClickTraffic = false)
        {
            var article = dataBaseContext.Articles.Include(o => o.ArticleType).FirstOrDefault(o => o.Guid == guid);

            if (!addUpClickTraffic)
            {
                return(article);
            }
            if (article != null)
            {
                article.ClickTraffic++;
            }
            return(article);
        }
예제 #16
0
        public static void EditItem(BlogSystemContext dataBaseContext, Guid guid, string name,
                                    Guid?parentArticleTypeGuid, uint sequence)
        {
            FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.ArticleTypeName,
                                                        new ParametersFormatErrorException("类别格式错误。"));
            var articleType = dataBaseContext.ArticleTypes.FirstOrDefault(q => q.Guid == guid);

            if (articleType == null)
            {
                return;
            }
            articleType.Name = name;
            articleType.ParentArticleTypeGuid = parentArticleTypeGuid;
            articleType.Sequence = sequence;
        }
예제 #17
0
        public static void Delete(BlogSystemContext dataBaseContext, IHostingEnvironment hostingEnvironment,
                                  IEnumerable <Guid> deleteGuid)
        {
            var uploadUnit = new UploadUnit(dataBaseContext, hostingEnvironment);

            deleteGuid.ToList().ForEach(d =>
            {
                var article = dataBaseContext.Articles.FirstOrDefault(q => q.Guid == d);
                if (article == null)
                {
                    return;
                }
                dataBaseContext.Articles.Remove(article);
            });
        }
예제 #18
0
        public static Guid?EditItem(BlogSystemContext dataBaseContext, Guid guid, string virtualPath)
        {
            FormatVerificationHelper.FormatVerification(virtualPath, FormatVerificationHelper.FormatType.VirtualPath,
                                                        new ParametersFormatErrorException("虚拟路径格式错误。"));
            if (dataBaseContext.TemplateFiles.Any(q => q.VirtualPath == virtualPath))
            {
                throw new TemplateFileAddItemVirtualPathIsExistException("此虚拟路径已经存在。");
            }
            var templateFile = dataBaseContext.TemplateFiles.FirstOrDefault(q => q.Guid == guid);

            if (templateFile == null)
            {
                return(null);
            }
            templateFile.VirtualPath = virtualPath;
            return(templateFile.TemplateGuid);
        }
        public object GetService(Type serviceType)
        {
            if (serviceType == typeof(UsersController))
            {
                return(new UsersController(this.UsersRepository as IRepository <User>));
            }
            else if (serviceType == typeof(PostsController))
            {
                var context = new BlogSystemContext();
                this.postsRepository = new EfRepository <Post>(context);
                this.usersRepository = new EfRepository <User>(context);
                this.tagsRepository  = new EfRepository <Tag>(context);
                return(new PostsController(postsRepository, usersRepository, tagsRepository, commentsRepository));
            }

            return(null);
        }
예제 #20
0
        public static void AddItem(BlogSystemContext dataBaseContext, string name, Guid articleTypeGuid,
                                   IEnumerable <Guid> articleLabelGuids, string content)
        {
            FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.ArticleName,
                                                        new ParametersFormatErrorException("文章名格式错误。"));
            var article = new Article()
            {
                Name            = name,
                ArticleTypeGuid = articleTypeGuid,
                Content         = content
            };

            dataBaseContext.Articles.Add(article);
            dataBaseContext.ArticleLabelArticles.AddRange(articleLabelGuids.Select(o => new ArticleLabelArticle
            {
                ArticleLabelGuid = o,
                Article          = article
            }));
        }
예제 #21
0
        /// <summary>
        /// 初始化 <see cref="T:Scottxu.Blog.Models.Units.ConfigHelper"/> 的实例。
        /// </summary>
        /// <param name="dataBaseContext">数据库上下文</param>
        /// <param name="cache">Redis缓存</param>
        public ConfigUnit(BlogSystemContext dataBaseContext, IDistributedCache cache)
        {
            var configsJson = cache.GetString("Configs");

            if (string.IsNullOrEmpty(configsJson))
            {
                if (!dataBaseContext.DataBaseIsExist)
                {
                    throw new NotDataBaseException();
                }
                Configs = dataBaseContext.Configs.ToList();
                cache.SetString("Configs", JsonConvert.SerializeObject(Configs));
            }
            else
            {
                Configs = JsonConvert.DeserializeObject <List <Config> >(configsJson);
            }
            this.dataBaseContext = dataBaseContext;
            this.cache           = cache;
        }
예제 #22
0
        public static List <Guid> Delete(BlogSystemContext dataBaseContext, IHostingEnvironment hostingEnvironment,
                                         IEnumerable <Guid> deleteGuid)
        {
            var templateGuids = new List <Guid>();
            var uploadUnit    = new UploadUnit(dataBaseContext, hostingEnvironment);

            deleteGuid.ToList().ForEach(d =>
            {
                var templateFile = dataBaseContext.TemplateFiles.FirstOrDefault(q => q.Guid == d);
                if (templateFile == null)
                {
                    return;
                }
                var uploadedFileGuid = templateFile.UploadedFileGuid;
                dataBaseContext.TemplateFiles.Remove(templateFile);
                uploadUnit.CheckAndDeleteFile(uploadedFileGuid);
                templateGuids.Add(templateFile.Guid);
            });
            return(templateGuids);
        }
예제 #23
0
        public static void AddItem(BlogSystemContext dataBaseContext, IHostingEnvironment hostingEnvironment,
                                   string virtualPath, Guid templateGuid, AddItemSaveFilesDelegate saveFiles)
        {
            FormatVerificationHelper.FormatVerification(virtualPath, FormatVerificationHelper.FormatType.VirtualPath,
                                                        new ParametersFormatErrorException("虚拟路径格式错误。"));
            if (dataBaseContext.TemplateFiles.Any(q => q.VirtualPath == virtualPath))
            {
                throw new TemplateFileAddItemVirtualPathIsExistException("此虚拟路径已经存在。");
            }
            var formFileInfos = saveFiles(dataBaseContext, hostingEnvironment);

            dataBaseContext.TemplateFiles.AddRange(formFileInfos.Select(formFile => new TemplateFile()
            {
                MIME         = formFile.MIME,
                Name         = formFile.FileName,
                UploadedFile = formFile.UploadedFile,
                TemplateGuid = templateGuid,
                VirtualPath  = virtualPath
            }));
        }
예제 #24
0
        public BlogModel GetBlogWithPostsEagerly(int blogId)
        {
            using (var context = new BlogSystemContext())
            {
                var blog = context.Blogs
                           .Include("Posts")
                           .Where(b => b.Id == blogId)
                           .FirstOrDefault();

                return(new BlogModel()
                {
                    Id = blog.Id,
                    Title = blog.Title,
                    Posts = blog.Posts.Select(p => new PostModel()
                    {
                        Id = p.Id, Content = p.Content, NumberOfLikes = p.NumberOfLikes
                    }).ToList()
                });
            }
        }
예제 #25
0
        public static (IEnumerable <object>, int) GetTree(BlogSystemContext dataBaseContext,
                                                          Guid?parentArticleTypeGuid = null)
        {
            IQueryable <ArticleType> q = dataBaseContext.ArticleTypes;

            q = q.Include(o => o.Articles);

            q = q.Where(o => o.ParentArticleTypeGuid == parentArticleTypeGuid);

            q = q.OrderBy(o => o.Sequence);

            var list = q.Select(o => new { o.Guid, o.Name, ArticlesCount = o.Articles.Count }).ToList()
                       .Select(o =>
            {
                (object childArticleTypes, int articlesCount) = GetTree(dataBaseContext, o.Guid);
                articlesCount += o.ArticlesCount;
                return(new { o.Guid, o.Name, ArticlesCount = articlesCount, ChildArticleTypes = childArticleTypes });
            });

            return(list, list.Sum(s => s.ArticlesCount));
        }
예제 #26
0
        public static void EditItem(BlogSystemContext dataBaseContext, Guid guid, string name, Guid articleTypeGuid,
                                    IEnumerable <Guid> articleLabelGuids, string content)
        {
            FormatVerificationHelper.FormatVerification(name, FormatVerificationHelper.FormatType.ArticleName,
                                                        new ParametersFormatErrorException("文章名格式错误。"));
            var article = dataBaseContext.Articles.FirstOrDefault(q => q.Guid == guid);

            if (article == null)
            {
                return;
            }
            article.Name            = name;
            article.ArticleTypeGuid = articleTypeGuid;
            article.Content         = content;
            dataBaseContext.ArticleLabelArticles.RemoveRange(
                dataBaseContext.ArticleLabelArticles.Where(o => o.Article == article));
            dataBaseContext.ArticleLabelArticles.AddRange(articleLabelGuids.Select(o => new ArticleLabelArticle
            {
                ArticleLabelGuid = o,
                Article          = article
            }));
        }
예제 #27
0
 public static void AddZipFile(BlogSystemContext dataBaseContext, IHostingEnvironment hostingEnvironment,
                               AddZipFileSaveFileDelegate saveFile)
 {
     var(template, formFileInfos) = saveFile(dataBaseContext, hostingEnvironment);
     if (dataBaseContext.Templates.Any(q => q.Guid == template.Guid))
     {
         Delete(dataBaseContext, hostingEnvironment, new List <Guid> {
             template.Guid
         });
     }
     else
     {
         dataBaseContext.Templates.Add(template);
     }
     dataBaseContext.TemplateFiles.AddRange(formFileInfos.Select(formFile => new TemplateFile()
     {
         MIME         = formFile.MIME,
         Name         = formFile.FileName,
         UploadedFile = formFile.UploadedFile,
         Template     = template,
         VirtualPath  = formFile.VirtualPath
     }));
 }
예제 #28
0
        public static List <ArticleType> GetData(BlogSystemContext dataBaseContext, PageInfoViewModel pageInfo,
                                                 string searchMessage, out List <ArticleType> articleTypes)
        {
            articleTypes = GetVirtualTree(dataBaseContext);

            // 表单搜索
            var searchText         = searchMessage?.Trim();
            var searchArticleTypes = !string.IsNullOrEmpty(searchText)
                ? articleTypes.Where(o => o.Name.Contains(searchText)).ToList()
                : articleTypes;

            if (pageInfo == null)
            {
                return(searchArticleTypes);
            }
            // 在添加条件之后,排序和分页之前获取总记录数
            pageInfo.RecordCount = searchArticleTypes.Count();

            // 排列和分页
            searchArticleTypes = searchArticleTypes.Skip(pageInfo.PageIndex * pageInfo.PageSize)
                                 .Take(pageInfo.PageSize).ToList();

            return(searchArticleTypes);
        }
예제 #29
0
 public FileController(BlogSystemContext context, IOptions <SiteOptions> options,
                       IHostingEnvironment hostingEnvironment)
     : base(context, options) => HostingEnvironment = hostingEnvironment;
예제 #30
0
 public AdminController(BlogSystemContext context, IOptions <SiteOptions> options,
                        IHostingEnvironment hostingEnvironment, IDistributedCache cache) :
     base(context, options) => (HostingEnvironment, Cache) = (hostingEnvironment, cache);