// ========================================================================== // MongoRepositoryBase.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== using System.Globalization; using System.Threading.Tasks; using MongoDB.Driver; using Squidex.Infrastructure; namespace Squidex.Store.MongoDb.Utils { public abstract class MongoRepositoryBase { private const string CollectionFormat = "{0}Set"; private readonly IMongoCollection mongoCollection; private readonly IMongoDatabase mongoDatabase; private readonly string typeName; protected string TypeName { get { return typeName; } } protected ProjectionDefinitionBuilder Projection { get { return Builders.Projection; } } protected SortDefinitionBuilder Sort { get { return Builders.Sort; } } protected UpdateDefinitionBuilder Update { get { return Builders.Update; } } protected FilterDefinitionBuilder Filter { get { return Builders.Filter; } } protected IndexKeysDefinitionBuilder IndexKeys { get { return Builders.IndexKeys; } } protected IMongoCollection Collection { get { return mongoCollection; } } protected IMongoDatabase Database { get { return mongoDatabase; } } protected MongoRepositoryBase(IMongoDatabase database) { Guard.NotNull(database, nameof(database)); mongoDatabase = database; mongoCollection = CreateCollection(); typeName = GetType().Name; } protected virtual MongoCollectionSettings CollectionSettings() { return new MongoCollectionSettings(); } protected virtual string CollectionName() { return string.Format(CultureInfo.InvariantCulture, CollectionFormat, typeof(TEntity).Name); } private IMongoCollection CreateCollection() { var databaseCollection = mongoDatabase.GetCollection( CollectionName(), CollectionSettings() ?? new MongoCollectionSettings()); SetupCollectionAsync(databaseCollection).Wait(); return databaseCollection; } protected virtual Task SetupCollectionAsync(IMongoCollection collection) { return Task.FromResult(true); } } }