public BasicUserService(IBaseDbSettings settings, string collectionName) : base(settings.ConnectionString, settings.DatabaseName, collectionName) { createIndex: try { collection.Indexes.CreateOne(new CreateIndexModel <TUser>(Builders <TUser> .IndexKeys.Ascending(l => l.Email), new CreateIndexOptions() { Unique = true })); //Collation _caseInsensitiveCollation = new Collation("en", strength: CollationStrength.Primary); //collection.Indexes.CreateOne(new CreateIndexModel<TUser>(Builders<TUser>.IndexKeys.Ascending(l => l.KeyWords), // new CreateIndexOptions() { Collation = _caseInsensitiveCollation })); //collection.Indexes.CreateOne(new CreateIndexModel<TUser>(Builders<TUser>.IndexKeys.Ascending(l => l.Followers))); //collection.Indexes.CreateOne(new CreateIndexModel<TUser>(Builders<TUser>.IndexKeys.Ascending(l => l.Awesomes))); //collection.Indexes.CreateOne(new CreateIndexModel<TUser>(Builders<TUser>.IndexKeys.Ascending(l => l.Roles))); //collection.Indexes.CreateOne(new CreateIndexModel<TUser>(Builders<TUser>.IndexKeys.Ascending(l => l.IsEmailConfirmed))); //collection.Indexes.CreateOne(new CreateIndexModel<TUser>(Builders<TUser>.IndexKeys.Ascending(l => l.Score))); } catch (Exception) { collection.Indexes.DropAll(); goto createIndex; } }
public LogService(IBaseDbSettings settings, string collectionname, IMapper mapper, IDBQueryServicesSlim <TUser> userServices) : base(settings.ConnectionString, settings.DatabaseName, collectionname) { this.mapper = mapper; this.userServices = userServices; var client = new MongoClient(settings.ConnectionString); var database = client.GetDatabase(settings.DatabaseName); collection.Indexes.CreateOne(new CreateIndexModel <Auditlog <TUserBrief> >(Builders <Auditlog <TUserBrief> > .IndexKeys.Ascending(l => l.OperatedObjectInfo.Id))); collection.Indexes.CreateOne(new CreateIndexModel <Auditlog <TUserBrief> >(Builders <Auditlog <TUserBrief> > .IndexKeys.Ascending(l => l.Operator.Id))); collection.Indexes.CreateOne(new CreateIndexModel <Auditlog <TUserBrief> >(Builders <Auditlog <TUserBrief> > .IndexKeys.Ascending(l => l.Operation))); collection.Indexes.CreateOne(new CreateIndexModel <Auditlog <TUserBrief> >(Builders <Auditlog <TUserBrief> > .IndexKeys.Ascending(l => l.OperatedObjectInfo.OperatedUserId))); collection.Indexes.CreateOne(new CreateIndexModel <Auditlog <TUserBrief> >(Builders <Auditlog <TUserBrief> > .IndexKeys.Ascending(l => l.CreateTime))); collection.Indexes.CreateOne(new CreateIndexModel <Auditlog <TUserBrief> >(Builders <Auditlog <TUserBrief> > .IndexKeys.Ascending(l => l.OperatedObjectInfo.Infos["colname"]))); collection.Indexes.CreateOne(new CreateIndexModel <Auditlog <TUserBrief> >(Builders <Auditlog <TUserBrief> > .IndexKeys.Ascending(l => l.OperatedObjectInfo.Infos))); }
/// <summary> /// 构造方法会自动建立所需要的索引 /// </summary> /// <param name="settings"></param> /// <param name="colname">mongodb里article集合的名称</param> /// <param name="mapper"></param> /// <param name="logService">用来获取点赞、收藏信息的LogService</param> /// <param name="esClient">如果不用es,手动传入null</param> /// <param name="userService"></param> /// <param name="imageService">imageservice只有word上传用到了,不准备使用word上传功能的话可以设为null</param> /// <param name="readlogService">用来获得用户阅读信息的logservice,可以和之前的logservice相同</param> /// <param name="getSearchFromArticle">把article映射到articlesearch的函数</param> /// <param name="mapArticleToBrief">把article映射成brief的函数</param> public IntergratedArticleService(IBaseDbSettings settings, string colname, IMapper mapper, ILogService <TUserBrief> logService, IElasticClient esClient, IUserService <TUser> userService , IImageService imageService, ILogService <TUserBrief> readlogService , Func <TArticle, TArticleSearch> getSearchFromArticle, Expression <Func <TArticle, TArticleFeed> > mapArticleToBrief) : base(settings.ConnectionString, settings.DatabaseName, colname) { this.getSearchFromArticle = getSearchFromArticle; this.mapArticleToBrief = mapArticleToBrief; this.readlogService = readlogService; enableEs = esClient != null; client = esClient; allowedTags = HtmlSanitizer.DefaultAllowedTags.ToList(); allowedTags.Add("audio"); allowedTags.Add("svg"); allowedTags.Add("source"); allowedTags.Add("style"); allowedTags.Add("path"); allowedTags.Add("iframe"); allowedTags.Add("img"); allowedTags.Add("blockquote"); allowedTags.Add("span"); allowedTags.Add("center"); this.userService = userService; this.logService = logService; pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions() .UseDiagrams() .UseEmphasisExtras() .UseEmojiAndSmiley() .UseGridTables() .UsePipeTables() //.UseMathematics() .UseMediaLinks() .UseAutoLinks() .UseFigures() .UseFooters() .UseFootnotes() .Build(); Collation _caseInsensitiveCollation = new Collation("en", strength: CollationStrength.Primary); this.imageService = imageService; this.mapper = mapper; createIndex: try { collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.Stars))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.Awesomes))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.IsDraft))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.AuthorBrief.Id))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.Visibility))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.KeyWords), new CreateIndexOptions() { Collation = _caseInsensitiveCollation })); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.ProjectId))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.Saved))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.ArticleId))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.Score))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.Examined))); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.Tokens), new CreateIndexOptions() { Collation = _caseInsensitiveCollation })); collection.Indexes.CreateOne(new CreateIndexModel <TArticle>(Builders <TArticle> .IndexKeys.Ascending(l => l.ManagedId))); } catch (Exception) { collection.Indexes.DropAll(); goto createIndex; } Config config = new Config(); // 设置上传区域 config.Zone = Zone.ZONE_CN_East; // 设置 http 或者 https 上传 config.UseHttps = true; config.UseCdnDomains = true; config.ChunkSize = ChunkUnit.U512K; target = new ResumableUploader(config); var attrs = new[] { "style", "class", "href", "alt", "src", "controls", "id", "preserveAspectRatio", "d", "viewBox", "width", "height", "title", "data-formula", "aria-hidden", }; foreach (var item in attrs) { HtmlSanitizer.DefaultAllowedAttributes.Add(item); } sanitizer = new HtmlSanitizer(allowedTags, allowedAttributes: HtmlSanitizer.DefaultAllowedAttributes); //StartReportService(); //StartElastic(); }