diff --git a/src/providers/Elsa.Persistence.MongoDb/Elsa.Persistence.MongoDb.csproj b/src/providers/Elsa.Persistence.MongoDb/Elsa.Persistence.MongoDb.csproj deleted file mode 100644 index 89a3a4506..000000000 --- a/src/providers/Elsa.Persistence.MongoDb/Elsa.Persistence.MongoDb.csproj +++ /dev/null @@ -1,36 +0,0 @@ - - - - netstandard2.0 - latest - 1.0.0 - Elsa Contributors - - Elsa is a set of workflow libraries and tools that enable super-fast workflowing capabilities in any .NET Core application. - This package provides a MongoDB persistence provider. - - 2019 - https://github.com/elsa-workflows/elsa-core - https://github.com/elsa-workflows/elsa-core - GitHub - elsa, workflows, mongodb - icon.png - - - - - True - - - - - - - - - - - - - - diff --git a/src/providers/Elsa.Persistence.MongoDb/Extensions/ServiceCollectionExtensions.cs b/src/providers/Elsa.Persistence.MongoDb/Extensions/ServiceCollectionExtensions.cs deleted file mode 100644 index 60b32cf9b..000000000 --- a/src/providers/Elsa.Persistence.MongoDb/Extensions/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System; -using Elsa; -using Elsa.Models; -using Elsa.Persistence.MongoDb.Serialization; -using Elsa.Persistence.MongoDb.Services; -using MongoDB.Bson; -using MongoDb.Bson.NodaTime; -using MongoDB.Bson.Serialization; -using MongoDB.Bson.Serialization.Conventions; -using MongoDB.Driver; - -// ReSharper disable once CheckNamespace -namespace Microsoft.Extensions.DependencyInjection -{ - public static class ServiceCollectionExtensions - { - public static ElsaOptions UseMongoDbWorkflowStores( - this ElsaOptions options, - string databaseName, - string connectionString) - { - return options - .AddMongoDbProvider(databaseName, connectionString) - .UseMongoDbWorkflowDefinitionStore(databaseName, connectionString) - .UseMongoDbWorkflowInstanceStore(databaseName, connectionString); - } - - public static ElsaOptions UseMongoDbWorkflowInstanceStore( - this ElsaOptions options, - string databaseName, - string connectionString) - { - options - .AddMongoDbProvider(databaseName, connectionString) - .UseWorkflowInstanceStore(sp => sp.GetRequiredService()) - .Services - .AddMongoDbCollection("WorkflowInstances") - .AddScoped(); - - return options; - } - - public static ElsaOptions UseMongoDbWorkflowDefinitionStore( - this ElsaOptions options, - string databaseName, - string connectionString) - { - options - .AddMongoDbProvider(databaseName, connectionString) - .UseWorkflowDefinitionStore(sp => sp.GetRequiredService()) - .Services - .AddMongoDbCollection("WorkflowDefinitions") - .AddScoped(); - - return options; - } - - public static IServiceCollection AddMongoDbCollection( - this IServiceCollection services, - string collectionName) - { - return services.AddSingleton(sp => CreateCollection(sp, collectionName)); - } - - private static ElsaOptions AddMongoDbProvider( - this ElsaOptions options, - string databaseName, - string connectionString - ) - { - if (options.Services.HasService()) - return options; - - options.Services - .AddTransient() - .AddTransient() - .AddSingleton(sp => - { - NodaTimeSerializers.Register(); - RegisterEnumAsStringConvention(); - BsonSerializer.RegisterSerializer(sp.GetRequiredService()); - BsonSerializer.RegisterSerializer(sp.GetRequiredService()); - return CreateDbClient(connectionString); - }) - .AddSingleton(sp => CreateDatabase(sp, databaseName)); - - return options; - } - - private static IMongoCollection CreateCollection(IServiceProvider serviceProvider, string collectionName) - { - var database = serviceProvider.GetRequiredService(); - return database.GetCollection(collectionName); - } - - private static IMongoDatabase CreateDatabase(IServiceProvider serviceProvider, string databaseName) - { - var client = serviceProvider.GetRequiredService(); - return client.GetDatabase(databaseName); - } - - private static IMongoClient CreateDbClient(string connectionString) => new MongoClient(connectionString); - - private static void RegisterEnumAsStringConvention() - { - var pack = new ConventionPack { new EnumRepresentationConvention(BsonType.String) }; - - ConventionRegistry.Register("EnumStringConvention", pack, _ => true); - } - } -} \ No newline at end of file diff --git a/src/providers/Elsa.Persistence.MongoDb/Serialization/JObjectSerializer.cs b/src/providers/Elsa.Persistence.MongoDb/Serialization/JObjectSerializer.cs deleted file mode 100644 index 12debf91f..000000000 --- a/src/providers/Elsa.Persistence.MongoDb/Serialization/JObjectSerializer.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Elsa.Serialization; -using Newtonsoft.Json.Linq; - -namespace Elsa.Persistence.MongoDb.Serialization -{ - public class JObjectSerializer : JsonSerializerBase - { - public JObjectSerializer(ITokenSerializer serializer) : base(serializer) - { - } - } -} \ No newline at end of file diff --git a/src/providers/Elsa.Persistence.MongoDb/Serialization/JsonSerializerBase.cs b/src/providers/Elsa.Persistence.MongoDb/Serialization/JsonSerializerBase.cs deleted file mode 100644 index 0142287d8..000000000 --- a/src/providers/Elsa.Persistence.MongoDb/Serialization/JsonSerializerBase.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Elsa.Serialization; -using MongoDB.Bson; -using MongoDB.Bson.Serialization; -using MongoDB.Bson.Serialization.Serializers; -using Newtonsoft.Json; - -namespace Elsa.Persistence.MongoDb.Serialization -{ - public abstract class JsonSerializerBase : SerializerBase - { - private readonly ITokenSerializer serializer; - - protected JsonSerializerBase(ITokenSerializer serializer) - { - this.serializer = serializer; - } - - public override T Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) - { - var document = BsonDocumentSerializer.Instance.Deserialize(context); - var value = serializer.Deserialize(document.ToString()); - - return value; - } - - public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, T value) - { - var json = value != null ? serializer.Serialize(value) : null; - var document = json != null ? BsonDocument.Parse(json.ToString(Formatting.None)) : new BsonDocument(); - BsonDocumentSerializer.Instance.Serialize(context, document); - } - } -} \ No newline at end of file diff --git a/src/providers/Elsa.Persistence.MongoDb/Serialization/VariableSerializer.cs b/src/providers/Elsa.Persistence.MongoDb/Serialization/VariableSerializer.cs deleted file mode 100644 index 54144cca1..000000000 --- a/src/providers/Elsa.Persistence.MongoDb/Serialization/VariableSerializer.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Elsa.Models; -using Elsa.Serialization; - -namespace Elsa.Persistence.MongoDb.Serialization -{ - public class VariableSerializer : JsonSerializerBase - { - public VariableSerializer(ITokenSerializer serializer) : base(serializer) - { - } - } -} \ No newline at end of file diff --git a/src/providers/Elsa.Persistence.MongoDb/Services/MongoWorkflowDefinitionStore.cs b/src/providers/Elsa.Persistence.MongoDb/Services/MongoWorkflowDefinitionStore.cs deleted file mode 100644 index 575a87050..000000000 --- a/src/providers/Elsa.Persistence.MongoDb/Services/MongoWorkflowDefinitionStore.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Elsa.Extensions; -using Elsa.Models; -using MongoDB.Driver; -using MongoDB.Driver.Linq; - -namespace Elsa.Persistence.MongoDb.Services -{ - public class MongoWorkflowDefinitionStore : IWorkflowDefinitionStore - { - private readonly IMongoCollection workflowDefinitionCollection; - private readonly IMongoCollection workflowInstanceCollection; - - public MongoWorkflowDefinitionStore( - IMongoCollection workflowDefinitionCollection, - IMongoCollection workflowInstanceCollection) - { - this.workflowDefinitionCollection = workflowDefinitionCollection; - this.workflowInstanceCollection = workflowInstanceCollection; - } - - public async Task SaveAsync( - WorkflowDefinitionVersion definition, - CancellationToken cancellationToken = default) - { - await workflowDefinitionCollection.ReplaceOneAsync( - x => x.Id == definition.Id && x.Version == definition.Version, - definition, - new ReplaceOptions { IsUpsert = true }, - cancellationToken - ); - - return definition; - } - - public async Task AddAsync(WorkflowDefinitionVersion definition, CancellationToken cancellationToken = default) - { - await workflowDefinitionCollection.InsertOneAsync(definition, new InsertOneOptions(), cancellationToken); - return definition; - } - - public Task GetByIdAsync(string id, CancellationToken cancellationToken = default) - { - return workflowDefinitionCollection.AsQueryable().FirstOrDefaultAsync(x => x.Id == id, cancellationToken); - } - - public async Task GetByIdAsync( - string definitionId, - VersionOptions version, - CancellationToken cancellationToken = default) - { - var query = (IMongoQueryable)workflowDefinitionCollection.AsQueryable() - .Where(x => x.DefinitionId == definitionId) - .WithVersion(version); - - return await query.FirstOrDefaultAsync(cancellationToken); - } - - public async Task> ListAsync( - VersionOptions version, - CancellationToken cancellationToken = default) - { - var query = workflowDefinitionCollection.AsQueryable(); - var results = await query.ToListAsync(cancellationToken); - return results.WithVersion(version); - } - - public async Task UpdateAsync(WorkflowDefinitionVersion definition, - CancellationToken cancellationToken) - { - await workflowDefinitionCollection.ReplaceOneAsync( - x => x.Id == definition.Id && x.Version == definition.Version, - definition, - new ReplaceOptions { IsUpsert = false }, - cancellationToken - ); - - return definition; - } - - public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) - { - await workflowInstanceCollection.DeleteManyAsync(x => x.DefinitionId == id, cancellationToken); - var result = await workflowDefinitionCollection.DeleteManyAsync(x => x.DefinitionId == id, cancellationToken); - - return (int) result.DeletedCount; - } - } -} \ No newline at end of file diff --git a/src/providers/Elsa.Persistence.MongoDb/Services/MongoWorkflowInstanceStore.cs b/src/providers/Elsa.Persistence.MongoDb/Services/MongoWorkflowInstanceStore.cs deleted file mode 100644 index 4435ef74b..000000000 --- a/src/providers/Elsa.Persistence.MongoDb/Services/MongoWorkflowInstanceStore.cs +++ /dev/null @@ -1,136 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Elsa.Extensions; -using Elsa.Models; -using MongoDB.Driver; -using MongoDB.Driver.Linq; - -namespace Elsa.Persistence.MongoDb.Services -{ - public class MongoWorkflowInstanceStore : IWorkflowInstanceStore - { - private readonly IMongoCollection collection; - - public MongoWorkflowInstanceStore(IMongoCollection collection) - { - this.collection = collection; - } - - public async Task SaveAsync(WorkflowInstance instance, CancellationToken cancellationToken) - { - await collection.ReplaceOneAsync( - x => x.Id == instance.Id, - instance, - new ReplaceOptions { IsUpsert = true }, - cancellationToken); - - return instance; - } - - public async Task GetByIdAsync( - string id, - CancellationToken cancellationToken) - { - return await collection.AsQueryable().Where(x => x.Id == id).FirstOrDefaultAsync(cancellationToken); - } - - public async Task GetByCorrelationIdAsync( - string correlationId, - CancellationToken cancellationToken = default) - { - return await collection.AsQueryable() - .Where(x => x.CorrelationId == correlationId) - .FirstOrDefaultAsync(cancellationToken); - } - - public async Task> ListByDefinitionAsync( - string definitionId, - CancellationToken cancellationToken) - { - return await collection.AsQueryable() - .Where(x => x.DefinitionId == definitionId) - .OrderByDescending(x => x.CreatedAt) - .ToListAsync(cancellationToken); - } - - public async Task> ListAllAsync(CancellationToken cancellationToken) - { - return await collection - .AsQueryable() - .OrderByDescending(x => x.CreatedAt) - .ToListAsync(cancellationToken); - } - - public async Task> ListByBlockingActivityTagAsync( - string activityType, - string tag, - string correlationId = null, - CancellationToken cancellationToken = default) - { - var query = collection.AsQueryable(); - - query = query.Where(x => x.Status == WorkflowStatus.Suspended); - - if (!string.IsNullOrWhiteSpace(correlationId)) - query = query.Where(x => x.CorrelationId == correlationId); - - query = query.Where(x => x.BlockingActivities.Any(y => y.ActivityType == activityType && y.Tag == tag)); - query = query.OrderByDescending(x => x.CreatedAt); - - var instances = await query.ToListAsync(cancellationToken); - - return instances.GetBlockingActivities(activityType); - } - public async Task> ListByBlockingActivityAsync( - string activityType, - string correlationId = default, - CancellationToken cancellationToken = default) - { - var query = collection.AsQueryable(); - - query = query.Where(x => x.Status == WorkflowStatus.Suspended); - - if (!string.IsNullOrWhiteSpace(correlationId)) - query = query.Where(x => x.CorrelationId == correlationId); - - query = query.Where(x => x.BlockingActivities.Any(y => y.ActivityType == activityType)); - query = query.OrderByDescending(x => x.CreatedAt); - - var instances = await query.ToListAsync(cancellationToken); - - return instances.GetBlockingActivities(activityType); - } - - public async Task> ListByStatusAsync( - string definitionId, - WorkflowStatus status, - CancellationToken cancellationToken) - { - return await collection - .AsQueryable() - .Where(x => x.DefinitionId == definitionId && x.Status == status) - .OrderByDescending(x => x.CreatedAt) - .ToListAsync(cancellationToken); - } - - public async Task> ListByStatusAsync( - WorkflowStatus status, - CancellationToken cancellationToken) - { - return await collection - .AsQueryable() - .Where(x => x.Status == status) - .OrderByDescending(x => x.CreatedAt) - .ToListAsync(cancellationToken); - } - - public async Task DeleteAsync( - string id, - CancellationToken cancellationToken = default) - { - await collection.DeleteOneAsync(x => x.Id == id, cancellationToken); - } - } -} \ No newline at end of file diff --git a/src/providers/Elsa.Persistence.MongoDb/icon.png b/src/providers/Elsa.Persistence.MongoDb/icon.png deleted file mode 100644 index f978a2882..000000000 Binary files a/src/providers/Elsa.Persistence.MongoDb/icon.png and /dev/null differ