Exemplo n.º 1
0
        public RealtimeService(IRealtimeServer server, IOptions <SiteOptions> siteOptions,
                               IOptions <DataAccessOptions> dataAccessOptions, IOptions <RealtimeOptions> realtimeOptions,
                               IOptions <AuthOptions> authOptions, IMongoClient mongoClient, IConfiguration configuration)
        {
            Server             = server;
            _siteOptions       = siteOptions;
            _dataAccessOptions = dataAccessOptions;
            _realtimeOptions   = realtimeOptions;
            _authOptions       = authOptions;
            _database          = mongoClient.GetDatabase(_dataAccessOptions.Value.MongoDatabaseName);
            _configuration     = configuration;

            RealtimeOptions options = _realtimeOptions.Value;

            _docConfigs = new Dictionary <Type, DocConfig>();
            AddDocConfig(options.UserDoc);
            AddDocConfig(options.ProjectDoc);
            foreach (DocConfig projectDataDoc in options.ProjectDataDocs)
            {
                AddDocConfig(projectDataDoc);
            }
            foreach (DocConfig userDataDoc in options.UserDataDocs)
            {
                AddDocConfig(userDataDoc);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Delete project-related docs from various collections.
        /// </summary>
        public async Task DeleteProjectAsync(string projectId)
        {
            if (string.IsNullOrEmpty(projectId))
            {
                throw new ArgumentException("", nameof(projectId));
            }

            RealtimeOptions options = _realtimeOptions.Value;
            var             tasks   = new List <Task>();

            foreach (DocConfig docConfig in options.ProjectDataDocs)
            {
                tasks.Add(DeleteProjectDocsAsync(docConfig.CollectionName, projectId));
            }
            await Task.WhenAll(tasks);

            IMongoCollection <BsonDocument> snapshotCollection = _database.GetCollection <BsonDocument>(
                options.ProjectDoc.CollectionName);
            FilterDefinition <BsonDocument> idFilter = Builders <BsonDocument> .Filter.Eq("_id", projectId);

            await snapshotCollection.DeleteManyAsync(idFilter);

            IMongoCollection <BsonDocument> opsCollection = _database.GetCollection <BsonDocument>(
                $"o_{options.ProjectDoc.CollectionName}");
            FilterDefinition <BsonDocument> dFilter = Builders <BsonDocument> .Filter.Eq("d", projectId);

            await opsCollection.DeleteManyAsync(dFilter);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Delete user-related docs from various collections.
        /// </summary>
        public async Task DeleteUserAsync(string userId)
        {
            if (string.IsNullOrEmpty(userId))
            {
                throw new ArgumentException("", nameof(userId));
            }

            RealtimeOptions                 options = _realtimeOptions.Value;
            IEnumerable <DocConfig>         collectionsToProcess = options.UserDataDocs.Append(options.UserDoc);
            FilterDefinition <BsonDocument> idFilter             = Builders <BsonDocument> .Filter.Regex("_id", $"{userId}$");

            FilterDefinition <BsonDocument> dFilter = Builders <BsonDocument> .Filter.Regex("d", $"{userId}$");

            foreach (var collection in collectionsToProcess)
            {
                IMongoCollection <BsonDocument> snapshotCollection = _database.GetCollection <BsonDocument>(
                    collection.CollectionName);
                await snapshotCollection.DeleteManyAsync(idFilter);

                IMongoCollection <BsonDocument> opsCollection = _database.GetCollection <BsonDocument>(
                    $"o_{collection.CollectionName}");
                await opsCollection.DeleteManyAsync(dFilter);
            }
        }