From 616258197e95019ed76a2b37050b430bcf6e7e53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Sep 2021 17:05:50 +0300 Subject: [PATCH 01/55] Added outbox parameter and dbcontext abstraction --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 2 +- ...ntOutboxDbContextModelBuilderExtensions.cs | 21 ++++++ .../DistributedEvents/IHasEventOutbox.cs | 9 +++ .../DistributedEvents/OutgoingEventRecord.cs | 29 ++++++++ .../Kafka/KafkaDistributedEventBus.cs | 25 ++++--- .../RabbitMq/RabbitMqDistributedEventBus.cs | 7 +- .../Rebus/RebusDistributedEventBus.cs | 7 +- .../Distributed/DistributedEventBusBase.cs | 69 +++++++++++++++++++ .../Distributed/IDistributedEventBus.cs | 13 ++++ .../Distributed/LocalDistributedEventBus.cs | 10 +++ .../Distributed/NullDistributedEventBus.cs | 10 +++ .../Volo/Abp/EventBus/EventBusBase.cs | 8 ++- .../Abp/EventBus/UnitOfWorkEventPublisher.cs | 13 +++- .../MemoryDb/MemoryDbRepository.cs | 3 +- .../Repositories/MongoDB/MongoDbRepository.cs | 3 +- .../Volo/Abp/Uow/UnitOfWorkEventRecord.cs | 6 +- 16 files changed, 207 insertions(+), 28 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index b86f9b83b1..1fd8273e67 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -201,7 +201,7 @@ namespace Volo.Abp.EntityFrameworkCore foreach (var distributedEvent in changeReport.DistributedEvents) { UnitOfWorkManager.Current?.AddOrReplaceDistributedEvent( - new UnitOfWorkEventRecord(distributedEvent.EventData.GetType(), distributedEvent.EventData, distributedEvent.EventOrder) + new UnitOfWorkEventRecord(distributedEvent.EventData.GetType(), distributedEvent.EventData, distributedEvent.EventOrder, useOutbox: true) ); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs new file mode 100644 index 0000000000..5443968343 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs @@ -0,0 +1,21 @@ +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore.Modeling; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class EventOutboxDbContextModelBuilderExtensions + { + public static void ConfigureEventOutbox([NotNull] this ModelBuilder builder) + { + builder.Entity(b => + { + b.ToTable(AbpCommonDbProperties.DbTablePrefix + "EventOutbox", AbpCommonDbProperties.DbSchema); + b.ConfigureByConvention(); + b.Property(x => x.EventName).IsRequired().HasMaxLength(OutgoingEventRecord.MaxEventNameLength); + b.Property(x => x.EventData).IsRequired(); + }); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs new file mode 100644 index 0000000000..34c712c1a1 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs @@ -0,0 +1,9 @@ +using Microsoft.EntityFrameworkCore; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IHasEventOutbox + { + DbSet OutgoingEventRecords { get; set; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs new file mode 100644 index 0000000000..9ebee6894a --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs @@ -0,0 +1,29 @@ +using System; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class OutgoingEventRecord : BasicAggregateRoot, IHasExtraProperties + { + public static int MaxEventNameLength { get; set; } = 256; + + public ExtraPropertyDictionary ExtraProperties { get; protected set; } + + public string EventName { get; set; } + public byte[] EventData { get; set; } + + protected OutgoingEventRecord() + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public OutgoingEventRecord(Guid id) + : base(id) + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index 0be3a326b6..c3050adb3b 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.EventBus.Kafka { [Dependency(ReplaceServices = true)] [ExposeServices(typeof(IDistributedEventBus), typeof(KafkaDistributedEventBus))] - public class KafkaDistributedEventBus : EventBusBase, IDistributedEventBus, ISingletonDependency + public class KafkaDistributedEventBus : DistributedEventBusBase, ISingletonDependency { protected AbpEventBusOptions AbpEventBusOptions { get; } protected AbpKafkaEventBusOptions AbpKafkaEventBusOptions { get; } @@ -94,11 +94,6 @@ namespace Volo.Abp.EventBus.Kafka }); } - public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class - { - return Subscribe(typeof(TEvent), handler); - } - public override IDisposable Subscribe(Type eventType, IEventHandlerFactory factory) { var handlerFactories = GetOrCreateHandlerFactories(eventType); @@ -169,7 +164,15 @@ namespace Volo.Abp.EventBus.Kafka protected override async Task PublishToEventBusAsync(Type eventType, object eventData) { - await PublishAsync(eventType, eventData, new Headers {{"messageId", Serializer.Serialize(Guid.NewGuid())}}, null); + await PublishAsync( + eventType, + eventData, + new Headers + { + { "messageId", Serializer.Serialize(Guid.NewGuid()) } + }, + null + ); } protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord) @@ -179,7 +182,13 @@ namespace Volo.Abp.EventBus.Kafka public virtual async Task PublishAsync(Type eventType, object eventData, Headers headers, Dictionary headersArguments) { - await PublishAsync(AbpKafkaEventBusOptions.TopicName, eventType, eventData, headers, headersArguments); + await PublishAsync( + AbpKafkaEventBusOptions.TopicName, + eventType, + eventData, + headers, + headersArguments + ); } public virtual async Task PublishToDeadLetterAsync(Type eventType, object eventData, Headers headers, Dictionary headersArguments) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index f5e3682a7a..9891b5cf12 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.EventBus.RabbitMq */ [Dependency(ReplaceServices = true)] [ExposeServices(typeof(IDistributedEventBus), typeof(RabbitMqDistributedEventBus))] - public class RabbitMqDistributedEventBus : EventBusBase, IDistributedEventBus, ISingletonDependency + public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDependency { protected AbpRabbitMqEventBusOptions AbpRabbitMqEventBusOptions { get; } protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } @@ -113,11 +113,6 @@ namespace Volo.Abp.EventBus.RabbitMq }); } - public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class - { - return Subscribe(typeof(TEvent), handler); - } - public override IDisposable Subscribe(Type eventType, IEventHandlerFactory factory) { var handlerFactories = GetOrCreateHandlerFactories(eventType); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 0206b5fefc..3f07cf7150 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.EventBus.Rebus { [Dependency(ReplaceServices = true)] [ExposeServices(typeof(IDistributedEventBus), typeof(RebusDistributedEventBus))] - public class RebusDistributedEventBus : EventBusBase, IDistributedEventBus, ISingletonDependency + public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDependency { protected IBus Rebus { get; } @@ -122,11 +122,6 @@ namespace Volo.Abp.EventBus.Rebus Rebus.Unsubscribe(eventType); } - public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class - { - return Subscribe(typeof(TEvent), handler); - } - protected override async Task PublishToEventBusAsync(Type eventType, object eventData) { await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs new file mode 100644 index 0000000000..94176d9f50 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -0,0 +1,69 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Uow; + +namespace Volo.Abp.EventBus.Distributed +{ + public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus + { + protected DistributedEventBusBase( + IServiceScopeFactory serviceScopeFactory, + ICurrentTenant currentTenant, + IUnitOfWorkManager unitOfWorkManager, + IEventErrorHandler errorHandler + ) : base( + serviceScopeFactory, + currentTenant, + unitOfWorkManager, + errorHandler) + { + } + + public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class + { + return Subscribe(typeof(TEvent), handler); + } + + public Task PublishAsync( + TEvent eventData, + bool onUnitOfWorkComplete = true, + bool useOutbox = true) + where TEvent : class + { + return PublishAsync(typeof(TEvent), eventData, onUnitOfWorkComplete, useOutbox); + } + + public async Task PublishAsync( + Type eventType, + object eventData, + bool onUnitOfWorkComplete = true, + bool useOutbox = true) + { + if (onUnitOfWorkComplete && UnitOfWorkManager.Current != null) + { + AddToUnitOfWork( + UnitOfWorkManager.Current, + new UnitOfWorkEventRecord(eventType, eventData, EventOrderGenerator.GetNext(), useOutbox) + ); + return; + } + + if (useOutbox) + { + if (await AddToOutboxAsync(eventType, eventData)) + { + return; + } + } + + await PublishToEventBusAsync(eventType, eventData); + } + + private async Task AddToOutboxAsync(Type eventType, object eventData) + { + return false; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IDistributedEventBus.cs index e406f7069b..80af122242 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IDistributedEventBus.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; namespace Volo.Abp.EventBus.Distributed { @@ -12,5 +13,17 @@ namespace Volo.Abp.EventBus.Distributed /// Object to handle the event IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class; + + Task PublishAsync( + TEvent eventData, + bool onUnitOfWorkComplete = true, + bool useOutbox = true) + where TEvent : class; + + Task PublishAsync( + Type eventType, + object eventData, + bool onUnitOfWorkComplete = true, + bool useOutbox = true); } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs index 3ee3700a0d..d5dd961802 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs @@ -132,5 +132,15 @@ namespace Volo.Abp.EventBus.Distributed { return _localEventBus.PublishAsync(eventType, eventData, onUnitOfWorkComplete); } + + public Task PublishAsync(TEvent eventData, bool onUnitOfWorkComplete = true, bool useOutbox = true) where TEvent : class + { + return _localEventBus.PublishAsync(eventData, onUnitOfWorkComplete); + } + + public Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true, bool useOutbox = true) + { + return _localEventBus.PublishAsync(eventType, eventData, onUnitOfWorkComplete); + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs index 60be7a147c..97004fbeac 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs @@ -86,5 +86,15 @@ namespace Volo.Abp.EventBus.Distributed { return Task.CompletedTask; } + + public Task PublishAsync(TEvent eventData, bool onUnitOfWorkComplete = true, bool useOutbox = true) where TEvent : class + { + return Task.CompletedTask; + } + + public Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true, bool useOutbox = true) + { + return Task.CompletedTask; + } } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs index f29a169cb5..a739bf814d 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs @@ -92,13 +92,17 @@ namespace Volo.Abp.EventBus public abstract void UnsubscribeAll(Type eventType); /// - public Task PublishAsync(TEvent eventData, bool onUnitOfWorkComplete = true) where TEvent : class + public Task PublishAsync(TEvent eventData, bool onUnitOfWorkComplete = true) + where TEvent : class { return PublishAsync(typeof(TEvent), eventData, onUnitOfWorkComplete); } /// - public async Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true) + public async Task PublishAsync( + Type eventType, + object eventData, + bool onUnitOfWorkComplete = true) { if (onUnitOfWorkComplete && UnitOfWorkManager.Current != null) { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs index 65e271afa8..ea6a66a699 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs @@ -25,7 +25,11 @@ namespace Volo.Abp.EventBus { foreach (var localEvent in localEvents) { - await _localEventBus.PublishAsync(localEvent.EventType, localEvent.EventData, onUnitOfWorkComplete: false); + await _localEventBus.PublishAsync( + localEvent.EventType, + localEvent.EventData, + onUnitOfWorkComplete: false + ); } } @@ -33,7 +37,12 @@ namespace Volo.Abp.EventBus { foreach (var distributedEvent in distributedEvents) { - await _distributedEventBus.PublishAsync(distributedEvent.EventType, distributedEvent.EventData, onUnitOfWorkComplete: false); + await _distributedEventBus.PublishAsync( + distributedEvent.EventType, + distributedEvent.EventData, + onUnitOfWorkComplete: false, + useOutbox: distributedEvent.UseOutbox + ); } } } diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index cf3479de67..3193e15ad1 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -100,7 +100,8 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb new UnitOfWorkEventRecord( distributedEvent.EventData.GetType(), distributedEvent.EventData, - distributedEvent.EventOrder + distributedEvent.EventOrder, + useOutbox: true ) ); } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index a40117e0ff..db8448db23 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -674,7 +674,8 @@ namespace Volo.Abp.Domain.Repositories.MongoDB new UnitOfWorkEventRecord( distributedEvent.EventData.GetType(), distributedEvent.EventData, - distributedEvent.EventOrder + distributedEvent.EventOrder, + useOutbox: true ) ); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs index 11ae4920cd..dd917d6fe2 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs @@ -11,6 +11,8 @@ namespace Volo.Abp.Uow public long EventOrder { get; } + public bool UseOutbox { get; } + /// /// Extra properties can be used if needed. /// @@ -19,11 +21,13 @@ namespace Volo.Abp.Uow public UnitOfWorkEventRecord( Type eventType, object eventData, - long eventOrder) + long eventOrder, + bool useOutbox = false) { EventType = eventType; EventData = eventData; EventOrder = eventOrder; + UseOutbox = useOutbox; } } } \ No newline at end of file From 5f50d3323ab99e8a048f274e3a4ab91ae08135fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Sep 2021 17:11:42 +0300 Subject: [PATCH 02/55] Add AbpDistributedEventBusOptions to DistributedEventBusBase --- .../Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs | 9 ++++++--- .../Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs | 9 ++++++--- .../Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs | 9 ++++++--- .../Distributed/AbpDistributedEventBusOptions.cs | 8 ++++++++ .../Abp/EventBus/Distributed/DistributedEventBusBase.cs | 7 ++++++- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index c3050adb3b..b2d099286a 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -22,7 +22,6 @@ namespace Volo.Abp.EventBus.Kafka { protected AbpEventBusOptions AbpEventBusOptions { get; } protected AbpKafkaEventBusOptions AbpKafkaEventBusOptions { get; } - protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } protected IKafkaMessageConsumerFactory MessageConsumerFactory { get; } protected IKafkaSerializer Serializer { get; } protected IProducerPool ProducerPool { get; } @@ -42,10 +41,14 @@ namespace Volo.Abp.EventBus.Kafka IProducerPool producerPool, IEventErrorHandler errorHandler, IOptions abpEventBusOptions) - : base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler) + : base( + serviceScopeFactory, + currentTenant, + unitOfWorkManager, + errorHandler, + abpDistributedEventBusOptions) { AbpKafkaEventBusOptions = abpKafkaEventBusOptions.Value; - AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value; AbpEventBusOptions = abpEventBusOptions.Value; MessageConsumerFactory = messageConsumerFactory; Serializer = serializer; diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 9891b5cf12..471bcacad6 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -26,7 +26,6 @@ namespace Volo.Abp.EventBus.RabbitMq public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDependency { protected AbpRabbitMqEventBusOptions AbpRabbitMqEventBusOptions { get; } - protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } protected AbpEventBusOptions AbpEventBusOptions { get; } protected IConnectionPool ConnectionPool { get; } protected IRabbitMqSerializer Serializer { get; } @@ -48,13 +47,17 @@ namespace Volo.Abp.EventBus.RabbitMq IUnitOfWorkManager unitOfWorkManager, IEventErrorHandler errorHandler, IOptions abpEventBusOptions) - : base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler) + : base( + serviceScopeFactory, + currentTenant, + unitOfWorkManager, + errorHandler, + distributedEventBusOptions) { ConnectionPool = connectionPool; Serializer = serializer; MessageConsumerFactory = messageConsumerFactory; AbpEventBusOptions = abpEventBusOptions.Value; - AbpDistributedEventBusOptions = distributedEventBusOptions.Value; AbpRabbitMqEventBusOptions = options.Value; HandlerFactories = new ConcurrentDictionary>(); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 3f07cf7150..760af619f5 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -23,7 +23,6 @@ namespace Volo.Abp.EventBus.Rebus //TODO: Accessing to the List may not be thread-safe! protected ConcurrentDictionary> HandlerFactories { get; } protected ConcurrentDictionary EventTypes { get; } - protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } protected AbpRebusEventBusOptions AbpRebusEventBusOptions { get; } public RebusDistributedEventBus( @@ -34,11 +33,15 @@ namespace Volo.Abp.EventBus.Rebus IOptions abpDistributedEventBusOptions, IOptions abpEventBusRebusOptions, IEventErrorHandler errorHandler) : - base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler) + base( + serviceScopeFactory, + currentTenant, + unitOfWorkManager, + errorHandler, + abpDistributedEventBusOptions) { Rebus = rebus; AbpRebusEventBusOptions = abpEventBusRebusOptions.Value; - AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value; HandlerFactories = new ConcurrentDictionary>(); EventTypes = new ConcurrentDictionary(); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs index 342e7b77bb..2d3861da73 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Volo.Abp.Collections; namespace Volo.Abp.EventBus.Distributed @@ -5,10 +6,17 @@ namespace Volo.Abp.EventBus.Distributed public class AbpDistributedEventBusOptions { public ITypeList Handlers { get; } + + public List Outboxes { get; } public AbpDistributedEventBusOptions() { Handlers = new TypeList(); } } + + public class OutboxConfig + { + + } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 94176d9f50..541373cd13 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Volo.Abp.MultiTenancy; using Volo.Abp.Uow; @@ -8,17 +9,21 @@ namespace Volo.Abp.EventBus.Distributed { public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus { + protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } + protected DistributedEventBusBase( IServiceScopeFactory serviceScopeFactory, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, - IEventErrorHandler errorHandler + IEventErrorHandler errorHandler, + IOptions abpDistributedEventBusOptions ) : base( serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler) { + AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value; } public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class From d1ea4736b7aa1ab93e8f001b01cf42061f70a2c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 10:37:15 +0300 Subject: [PATCH 03/55] save to outbox --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 2 +- .../AbpEntityFrameworkCoreModule.cs | 2 + .../DistributedEvents/DbContextEventOutbox.cs | 29 +++++ .../DistributedEvents/IHasEventOutbox.cs | 2 +- .../DistributedEvents/OutgoingEventRecord.cs | 5 +- .../Kafka/KafkaDistributedEventBus.cs | 5 + .../RabbitMq/RabbitMqDistributedEventBus.cs | 5 + .../Abp/EventBus/Rebus/IRabbitMqSerializer.cs | 13 ++ .../Rebus/RebusDistributedEventBus.cs | 10 +- .../Rebus/Utf8JsonRabbitMqSerializer.cs | 32 +++++ .../AbpDistributedEventBusOptions.cs | 9 +- .../Distributed/DistributedEventBusBase.cs | 28 +++++ .../Abp/EventBus/Distributed/IEventOutbox.cs | 9 ++ .../Abp/EventBus/Distributed/OutboxConfig.cs | 18 +++ .../EventBus/Distributed/OutboxConfigList.cs | 8 ++ .../Volo/Abp/EventBus/EventBusBase.cs | 2 +- .../Repositories/MongoDB/MongoDbRepository.cs | 3 +- .../Volo/Abp/Uow/UnitOfWorkEventRecord.cs | 2 +- .../DistEvents/DistDemoApp/DistDemoApp.csproj | 1 + .../DistDemoApp/DistDemoAppModule.cs | 13 +- .../20210908063422_Added_Outbox.Designer.cs | 118 ++++++++++++++++++ .../Migrations/20210908063422_Added_Outbox.cs | 31 +++++ .../Migrations/TodoDbContextModelSnapshot.cs | 23 ++++ test/DistEvents/DistDemoApp/TodoDbContext.cs | 6 +- .../DistDemoApp/TodoEventHandler.cs | 2 +- test/DistEvents/DistDemoApp/appsettings.json | 11 ++ 26 files changed, 371 insertions(+), 18 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRabbitMqSerializer.cs create mode 100644 framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/Utf8JsonRabbitMqSerializer.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 1fd8273e67..b86f9b83b1 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -201,7 +201,7 @@ namespace Volo.Abp.EntityFrameworkCore foreach (var distributedEvent in changeReport.DistributedEvents) { UnitOfWorkManager.Current?.AddOrReplaceDistributedEvent( - new UnitOfWorkEventRecord(distributedEvent.EventData.GetType(), distributedEvent.EventData, distributedEvent.EventOrder, useOutbox: true) + new UnitOfWorkEventRecord(distributedEvent.EventData.GetType(), distributedEvent.EventData, distributedEvent.EventOrder) ); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs index b5d9eb8436..1378f955e4 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.Domain; using Volo.Abp.EntityFrameworkCore.DependencyInjection; +using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.Modularity; using Volo.Abp.Uow.EntityFrameworkCore; @@ -26,6 +27,7 @@ namespace Volo.Abp.EntityFrameworkCore }); context.Services.TryAddTransient(typeof(IDbContextProvider<>), typeof(UnitOfWorkDbContextProvider<>)); + context.Services.AddTransient(typeof(DbContextEventOutbox<>)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs new file mode 100644 index 0000000000..1831b67ccb --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Guids; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class DbContextEventOutbox : IEventOutbox + where TDbContext : IHasEventOutbox + { + protected IDbContextProvider DbContextProvider { get; } + protected IGuidGenerator GuidGenerator { get; } + + public DbContextEventOutbox( + IDbContextProvider dbContextProvider, + IGuidGenerator guidGenerator) + { + DbContextProvider = dbContextProvider; + GuidGenerator = guidGenerator; + } + + public async Task EnqueueAsync(string eventName, byte[] eventData) + { + var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); + dbContext.OutgoingEventRecords.Add( + new OutgoingEventRecord(GuidGenerator.Create(), eventName, eventData) + ); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs index 34c712c1a1..e7e60e3800 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs @@ -2,7 +2,7 @@ using Microsoft.EntityFrameworkCore; namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { - public interface IHasEventOutbox + public interface IHasEventOutbox : IEfCoreDbContext { DbSet OutgoingEventRecords { get; set; } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs index 9ebee6894a..395970c4a9 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs @@ -19,9 +19,12 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents this.SetDefaultsForExtraProperties(); } - public OutgoingEventRecord(Guid id) + public OutgoingEventRecord(Guid id, string eventName, byte[] eventData) : base(id) { + EventName = eventName; + EventData = eventData; + ExtraProperties = new ExtraPropertyDictionary(); this.SetDefaultsForExtraProperties(); } diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index b2d099286a..18f68923e1 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -182,6 +182,11 @@ namespace Volo.Abp.EventBus.Kafka { unitOfWork.AddOrReplaceDistributedEvent(eventRecord); } + + protected override byte[] Serialize(object eventData) + { + return Serializer.Serialize(eventData); + } public virtual async Task PublishAsync(Type eventType, object eventData, Headers headers, Dictionary headersArguments) { diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 471bcacad6..d2766eb247 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -198,6 +198,11 @@ namespace Volo.Abp.EventBus.RabbitMq { unitOfWork.AddOrReplaceDistributedEvent(eventRecord); } + + protected override byte[] Serialize(object eventData) + { + return Serializer.Serialize(eventData); + } public Task PublishAsync(Type eventType, object eventData, IBasicProperties properties, Dictionary headersArguments = null) { diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRabbitMqSerializer.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRabbitMqSerializer.cs new file mode 100644 index 0000000000..68700b4da5 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRabbitMqSerializer.cs @@ -0,0 +1,13 @@ +using System; + +namespace Volo.Abp.EventBus.Rebus +{ + public interface IRebusSerializer + { + byte[] Serialize(object obj); + + object Deserialize(byte[] value, Type type); + + T Deserialize(byte[] value); + } +} diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 760af619f5..43017d9c4a 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -19,6 +19,7 @@ namespace Volo.Abp.EventBus.Rebus public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDependency { protected IBus Rebus { get; } + protected IRebusSerializer Serializer { get; } //TODO: Accessing to the List may not be thread-safe! protected ConcurrentDictionary> HandlerFactories { get; } @@ -32,7 +33,8 @@ namespace Volo.Abp.EventBus.Rebus IBus rebus, IOptions abpDistributedEventBusOptions, IOptions abpEventBusRebusOptions, - IEventErrorHandler errorHandler) : + IEventErrorHandler errorHandler, + IRebusSerializer serializer) : base( serviceScopeFactory, currentTenant, @@ -41,6 +43,7 @@ namespace Volo.Abp.EventBus.Rebus abpDistributedEventBusOptions) { Rebus = rebus; + Serializer = serializer; AbpRebusEventBusOptions = abpEventBusRebusOptions.Value; HandlerFactories = new ConcurrentDictionary>(); @@ -178,5 +181,10 @@ namespace Volo.Abp.EventBus.Rebus return false; } + + protected override byte[] Serialize(object eventData) + { + return Serializer.Serialize(eventData); + } } } diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/Utf8JsonRabbitMqSerializer.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/Utf8JsonRabbitMqSerializer.cs new file mode 100644 index 0000000000..515e616aab --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/Utf8JsonRabbitMqSerializer.cs @@ -0,0 +1,32 @@ +using System; +using System.Text; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Json; + +namespace Volo.Abp.EventBus.Rebus +{ + public class Utf8JsonRebusSerializer : IRebusSerializer, ITransientDependency + { + private readonly IJsonSerializer _jsonSerializer; + + public Utf8JsonRebusSerializer(IJsonSerializer jsonSerializer) + { + _jsonSerializer = jsonSerializer; + } + + public byte[] Serialize(object obj) + { + return Encoding.UTF8.GetBytes(_jsonSerializer.Serialize(obj)); + } + + public object Deserialize(byte[] value, Type type) + { + return _jsonSerializer.Deserialize(type, Encoding.UTF8.GetString(value)); + } + + public T Deserialize(byte[] value) + { + return _jsonSerializer.Deserialize(Encoding.UTF8.GetString(value)); + } + } +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs index 2d3861da73..052e421511 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using Volo.Abp.Collections; namespace Volo.Abp.EventBus.Distributed @@ -7,16 +6,12 @@ namespace Volo.Abp.EventBus.Distributed { public ITypeList Handlers { get; } - public List Outboxes { get; } + public OutboxConfigList Outboxes { get; } public AbpDistributedEventBusOptions() { Handlers = new TypeList(); + Outboxes = new OutboxConfigList(); } } - - public class OutboxConfig - { - - } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 541373cd13..bea6b93a36 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -31,6 +32,11 @@ namespace Volo.Abp.EventBus.Distributed return Subscribe(typeof(TEvent), handler); } + public override Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true) + { + return PublishAsync(eventType, eventData, onUnitOfWorkComplete, useOutbox: true); + } + public Task PublishAsync( TEvent eventData, bool onUnitOfWorkComplete = true, @@ -68,7 +74,29 @@ namespace Volo.Abp.EventBus.Distributed private async Task AddToOutboxAsync(Type eventType, object eventData) { + var unitOfWork = UnitOfWorkManager.Current; + if (unitOfWork == null) + { + return false; + } + + foreach (var outboxConfig in AbpDistributedEventBusOptions.Outboxes) + { + if (outboxConfig.Selector == null || outboxConfig.Selector(eventType)) + { + var eventOutbox = (IEventOutbox)unitOfWork.ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); + var eventName = EventNameAttribute.GetNameOrDefault(eventType); + await eventOutbox.EnqueueAsync( + eventName, + Serialize(eventData) + ); + return true; + } + } + return false; } + + protected abstract byte[] Serialize(object eventData); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs new file mode 100644 index 0000000000..ec6d010307 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.EventBus.Distributed +{ + public interface IEventOutbox + { + Task EnqueueAsync(string eventName, byte[] eventData); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs new file mode 100644 index 0000000000..97712ec85e --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs @@ -0,0 +1,18 @@ +using System; + +namespace Volo.Abp.EventBus.Distributed +{ + public class OutboxConfig + { + public string Name { get; } + + public Type ImplementationType { get; set; } + public Func Selector { get; set; } + + public OutboxConfig(string name, Type implementationType, Func selector = null) + { + Name = name; + ImplementationType = implementationType; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs new file mode 100644 index 0000000000..47c91377da --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.Abp.EventBus.Distributed +{ + public class OutboxConfigList : List + { + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs index a739bf814d..c8b7eb6790 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs @@ -99,7 +99,7 @@ namespace Volo.Abp.EventBus } /// - public async Task PublishAsync( + public virtual async Task PublishAsync( Type eventType, object eventData, bool onUnitOfWorkComplete = true) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index db8448db23..a40117e0ff 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -674,8 +674,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB new UnitOfWorkEventRecord( distributedEvent.EventData.GetType(), distributedEvent.EventData, - distributedEvent.EventOrder, - useOutbox: true + distributedEvent.EventOrder ) ); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs index dd917d6fe2..cba5646f7a 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Uow Type eventType, object eventData, long eventOrder, - bool useOutbox = false) + bool useOutbox = true) { EventType = eventType; EventData = eventData; diff --git a/test/DistEvents/DistDemoApp/DistDemoApp.csproj b/test/DistEvents/DistDemoApp/DistDemoApp.csproj index 9695a92f04..0513a520d1 100644 --- a/test/DistEvents/DistDemoApp/DistDemoApp.csproj +++ b/test/DistEvents/DistDemoApp/DistDemoApp.csproj @@ -16,6 +16,7 @@ + diff --git a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs index f69f9c2380..3cb92b2307 100644 --- a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs +++ b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs @@ -2,14 +2,18 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Autofac; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.EventBus.RabbitMq; using Volo.Abp.Modularity; namespace DistDemoApp { [DependsOn( typeof(AbpEntityFrameworkCoreSqlServerModule), - typeof(AbpAutofacModule) + typeof(AbpAutofacModule), + typeof(AbpEventBusRabbitMqModule) )] public class DistDemoAppModule : AbpModule { @@ -32,6 +36,13 @@ namespace DistDemoApp options.EtoMappings.Add(); options.AutoEventSelectors.Add(); }); + + Configure(options => + { + options.Outboxes.Add( + new OutboxConfig("Default", typeof(DbContextEventOutbox)) + ); + }); } } } \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs new file mode 100644 index 0000000000..9c350598bf --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs @@ -0,0 +1,118 @@ +// +using System; +using DistDemoApp; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +namespace DistDemoApp.Migrations +{ + [DbContext(typeof(TodoDbContext))] + [Migration("20210908063422_Added_Outbox")] + partial class Added_Outbox + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.9") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("DistDemoApp.TodoItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.ToTable("TodoItems"); + }); + + modelBuilder.Entity("DistDemoApp.TodoSummary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Day") + .HasColumnType("tinyint"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Month") + .HasColumnType("tinyint"); + + b.Property("TotalCount") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("TodoSummaries"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventOutbox"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs b/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs new file mode 100644 index 0000000000..2954acdac7 --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs @@ -0,0 +1,31 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DistDemoApp.Migrations +{ + public partial class Added_Outbox : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpEventOutbox", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + EventName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + EventData = table.Column(type: "varbinary(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEventOutbox", x => x.Id); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpEventOutbox"); + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs index 99f0f92ab7..91d7bc0cc7 100644 --- a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs +++ b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs @@ -87,6 +87,29 @@ namespace DistDemoApp.Migrations b.ToTable("TodoSummaries"); }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventOutbox"); + }); #pragma warning restore 612, 618 } } diff --git a/test/DistEvents/DistDemoApp/TodoDbContext.cs b/test/DistEvents/DistDemoApp/TodoDbContext.cs index 000f18c802..3db006535a 100644 --- a/test/DistEvents/DistDemoApp/TodoDbContext.cs +++ b/test/DistEvents/DistDemoApp/TodoDbContext.cs @@ -1,13 +1,15 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Entities; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.DistributedEvents; namespace DistDemoApp { - public class TodoDbContext : AbpDbContext + public class TodoDbContext : AbpDbContext, IHasEventOutbox { public DbSet TodoItems { get; set; } public DbSet TodoSummaries { get; set; } + public DbSet OutgoingEventRecords { get; set; } public TodoDbContext(DbContextOptions options) : base(options) @@ -18,6 +20,8 @@ namespace DistDemoApp protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); + + modelBuilder.ConfigureEventOutbox(); modelBuilder.Entity(b => { diff --git a/test/DistEvents/DistDemoApp/TodoEventHandler.cs b/test/DistEvents/DistDemoApp/TodoEventHandler.cs index 73c7040732..c7fd43aea3 100644 --- a/test/DistEvents/DistDemoApp/TodoEventHandler.cs +++ b/test/DistEvents/DistDemoApp/TodoEventHandler.cs @@ -42,7 +42,7 @@ namespace DistDemoApp Console.WriteLine("Increased total count: " + todoSummary); - throw new ApplicationException("Thrown to rollback the UOW!"); + //throw new ApplicationException("Thrown to rollback the UOW!"); } public async Task HandleEventAsync(EntityDeletedEto eventData) diff --git a/test/DistEvents/DistDemoApp/appsettings.json b/test/DistEvents/DistDemoApp/appsettings.json index 6bb7ba54ca..8f4773ae6a 100644 --- a/test/DistEvents/DistDemoApp/appsettings.json +++ b/test/DistEvents/DistDemoApp/appsettings.json @@ -1,5 +1,16 @@ { "ConnectionStrings": { "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=DistEventsDemo;Trusted_Connection=True" + }, + "RabbitMQ": { + "Connections": { + "Default": { + "HostName": "localhost" + } + }, + "EventBus": { + "ClientName": "DistDemoApp", + "ExchangeName": "DistDemo" + } } } \ No newline at end of file From eb7765ca538c853c609b355e299739ee28837f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 10:54:17 +0300 Subject: [PATCH 04/55] Refactored configuration, added CreationTime --- .../EfCoreOutboxConfigExtensions.cs | 13 ++ .../DistributedEvents/OutgoingEventRecord.cs | 6 +- .../Distributed/DistributedEventBusBase.cs | 2 +- .../Abp/EventBus/Distributed/OutboxConfig.cs | 14 +- .../EventBus/Distributed/OutboxConfigList.cs | 8 +- .../DistDemoApp/DistDemoAppModule.cs | 7 +- ...5344_Added_Outbox_CreationTime.Designer.cs | 122 ++++++++++++++++++ ...0210908075344_Added_Outbox_CreationTime.cs | 25 ++++ .../Migrations/TodoDbContextModelSnapshot.cs | 4 + 9 files changed, 192 insertions(+), 9 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs new file mode 100644 index 0000000000..8199ff0739 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class EfCoreOutboxConfigExtensions + { + public static void UseDbContext(this OutboxConfig outboxConfig) + where TDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(DbContextEventOutbox); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs index 395970c4a9..d33e6a0097 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs @@ -1,17 +1,21 @@ using System; +using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { - public class OutgoingEventRecord : BasicAggregateRoot, IHasExtraProperties + public class OutgoingEventRecord : BasicAggregateRoot, IHasExtraProperties, IHasCreationTime { public static int MaxEventNameLength { get; set; } = 256; public ExtraPropertyDictionary ExtraProperties { get; protected set; } public string EventName { get; set; } + public byte[] EventData { get; set; } + + public DateTime CreationTime { get; set; } protected OutgoingEventRecord() { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index bea6b93a36..3d68490ae2 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -80,7 +80,7 @@ namespace Volo.Abp.EventBus.Distributed return false; } - foreach (var outboxConfig in AbpDistributedEventBusOptions.Outboxes) + foreach (var outboxConfig in AbpDistributedEventBusOptions.Outboxes.Values) { if (outboxConfig.Selector == null || outboxConfig.Selector(eventType)) { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs index 97712ec85e..be7630ddee 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfig.cs @@ -1,18 +1,26 @@ using System; +using JetBrains.Annotations; namespace Volo.Abp.EventBus.Distributed { public class OutboxConfig { + [NotNull] public string Name { get; } public Type ImplementationType { get; set; } + public Func Selector { get; set; } - public OutboxConfig(string name, Type implementationType, Func selector = null) + /// + /// Used to enable/disable sending events from outbox to the message broker. + /// Default: true. + /// + public bool IsSendingEnabled { get; set; } = true; + + public OutboxConfig([NotNull] string name) { - Name = name; - ImplementationType = implementationType; + Name = Check.NotNullOrWhiteSpace(name, nameof(name)); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs index 47c91377da..162ceef6ff 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs @@ -1,8 +1,14 @@ +using System; using System.Collections.Generic; namespace Volo.Abp.EventBus.Distributed { - public class OutboxConfigList : List + public class OutboxConfigList : Dictionary { + public void Configure(string outboxName, Action configAction) + { + var outboxConfig = this.GetOrAdd(outboxName, () => new OutboxConfig(outboxName)); + configAction(outboxConfig); + } } } \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs index 3cb92b2307..93880032d9 100644 --- a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs +++ b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs @@ -39,9 +39,10 @@ namespace DistDemoApp Configure(options => { - options.Outboxes.Add( - new OutboxConfig("Default", typeof(DbContextEventOutbox)) - ); + options.Outboxes.Configure("Default", config => + { + config.UseDbContext(); + }); }); } } diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs new file mode 100644 index 0000000000..def5ebc7d7 --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs @@ -0,0 +1,122 @@ +// +using System; +using DistDemoApp; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +namespace DistDemoApp.Migrations +{ + [DbContext(typeof(TodoDbContext))] + [Migration("20210908075344_Added_Outbox_CreationTime")] + partial class Added_Outbox_CreationTime + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.9") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("DistDemoApp.TodoItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.ToTable("TodoItems"); + }); + + modelBuilder.Entity("DistDemoApp.TodoSummary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Day") + .HasColumnType("tinyint"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Month") + .HasColumnType("tinyint"); + + b.Property("TotalCount") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("TodoSummaries"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventOutbox"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs b/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs new file mode 100644 index 0000000000..2899933b8f --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs @@ -0,0 +1,25 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DistDemoApp.Migrations +{ + public partial class Added_Outbox_CreationTime : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "CreationTime", + table: "AbpEventOutbox", + type: "datetime2", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "CreationTime", + table: "AbpEventOutbox"); + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs index 91d7bc0cc7..f1b3330485 100644 --- a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs +++ b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs @@ -93,6 +93,10 @@ namespace DistDemoApp.Migrations b.Property("Id") .HasColumnType("uniqueidentifier"); + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + b.Property("EventData") .IsRequired() .HasColumnType("varbinary(max)"); From 3a89cb41b85352e9f8512dda239d95fae737437d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 11:16:53 +0300 Subject: [PATCH 05/55] Added Volo.Abp.EventBus.Boxes.csproj --- framework/Volo.Abp.sln | 7 +++++ .../BackgroundJobs/AbpBackgroundJobsModule.cs | 7 +---- .../Volo.Abp.EventBus.Boxes/FodyWeavers.xml | 3 ++ .../Volo.Abp.EventBus.Boxes/FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.EventBus.Boxes.csproj | 21 +++++++++++++ .../EventBus/Boxes/AbpEventBusBoxesModule.cs | 12 ++++++++ .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 7 +++++ .../Volo/Abp/Threading/AbpTimer.cs | 2 +- nupkg/common.ps1 | 1 + 9 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 8d5432f4c6..60011440f9 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -385,6 +385,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.MongoDB.Tests.Seco EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Threading.Tests", "test\Volo.Abp.Threading.Tests\Volo.Abp.Threading.Tests.csproj", "{7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.EventBus.Boxes", "src\Volo.Abp.EventBus.Boxes\Volo.Abp.EventBus.Boxes.csproj", "{6E289F31-7924-418B-9DAC-62A7CFADF916}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1147,6 +1149,10 @@ Global {7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}.Debug|Any CPU.Build.0 = Debug|Any CPU {7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}.Release|Any CPU.ActiveCfg = Release|Any CPU {7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}.Release|Any CPU.Build.0 = Release|Any CPU + {6E289F31-7924-418B-9DAC-62A7CFADF916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E289F31-7924-418B-9DAC-62A7CFADF916}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E289F31-7924-418B-9DAC-62A7CFADF916}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E289F31-7924-418B-9DAC-62A7CFADF916}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1341,6 +1347,7 @@ Global {75D8DADB-3FA9-4C1D-B23A-DBFD08133B7C} = {447C8A77-E5F0-4538-8687-7383196D04EA} {90B1866A-EF99-40B9-970E-B898E5AA523F} = {447C8A77-E5F0-4538-8687-7383196D04EA} {7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B} = {447C8A77-E5F0-4538-8687-7383196D04EA} + {6E289F31-7924-418B-9DAC-62A7CFADF916} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/AbpBackgroundJobsModule.cs b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/AbpBackgroundJobsModule.cs index cea8a1eee6..dccf2006dc 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/AbpBackgroundJobsModule.cs +++ b/framework/src/Volo.Abp.BackgroundJobs/Volo/Abp/BackgroundJobs/AbpBackgroundJobsModule.cs @@ -20,12 +20,7 @@ namespace Volo.Abp.BackgroundJobs var options = context.ServiceProvider.GetRequiredService>().Value; if (options.IsJobExecutionEnabled) { - context.ServiceProvider - .GetRequiredService() - .Add( - context.ServiceProvider - .GetRequiredService() - ); + context.AddBackgroundWorker(); } } } diff --git a/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml new file mode 100644 index 0000000000..be0de3a908 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj b/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj new file mode 100644 index 0000000000..3cae05a96a --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj @@ -0,0 +1,21 @@ + + + + + + + netstandard2.0 + Volo.Abp.EventBus.Boxes + Volo.Abp.EventBus.Boxes + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs new file mode 100644 index 0000000000..904bab747a --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Modularity; + +namespace Volo.Abp.EventBus.Boxes +{ + [DependsOn( + typeof(AbpEventBusModule) + )] + public class AbpEventBusBoxesModule : AbpModule + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs new file mode 100644 index 0000000000..48bad9a6cf --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.EventBus.Boxes +{ + public class OutboxSender + { + //Background worker & distributed lock + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs index e7e6efd5de..d95fc7012b 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Threading/AbpTimer.cs @@ -96,7 +96,7 @@ namespace Volo.Abp.Threading try { - Elapsed.InvokeSafely(this, new EventArgs()); + Elapsed.InvokeSafely(this, EventArgs.Empty); } catch(Exception ex) { diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index b71ebccfd0..c4fcfc4df3 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -100,6 +100,7 @@ $projects = ( "framework/src/Volo.Abp.EntityFrameworkCore.SqlServer", "framework/src/Volo.Abp.EventBus.Abstractions", "framework/src/Volo.Abp.EventBus", + "framework/src/Volo.Abp.EventBus.Boxes", "framework/src/Volo.Abp.EventBus.RabbitMQ", "framework/src/Volo.Abp.EventBus.Kafka", "framework/src/Volo.Abp.EventBus.Rebus", From afcd640e40adfe8bb0233d9686607f04ab8ccb05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 14:02:05 +0300 Subject: [PATCH 06/55] Basic implementation is done for the event outbox. --- .../AbpEntityFrameworkCoreModule.cs | 2 +- .../DistributedEvents/DbContextEventOutbox.cs | 48 +++++++++--- .../EfCoreOutboxConfigExtensions.cs | 2 +- .../IDbContextEventOutbox.cs | 10 +++ .../DistributedEvents/OutgoingEventRecord.cs | 36 ++++++--- .../Volo.Abp.EventBus.Boxes.csproj | 1 + .../Boxes/AbpDistributedEventBusExtensions.cs | 18 +++++ .../EventBus/Boxes/AbpEventBusBoxesModule.cs | 11 ++- .../Volo/Abp/EventBus/Boxes/IOutboxSender.cs | 11 +++ .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 77 ++++++++++++++++++- .../Abp/EventBus/Boxes/OutboxSenderManager.cs | 48 ++++++++++++ .../Kafka/KafkaDistributedEventBus.cs | 36 ++++++++- .../RabbitMq/RabbitMqDistributedEventBus.cs | 29 ++++++- .../Rebus/RebusDistributedEventBus.cs | 16 +++- .../Volo.Abp.EventBus.csproj | 1 + .../Volo/Abp/EventBus/AbpEventBusModule.cs | 5 +- .../Distributed/DistributedEventBusBase.cs | 25 ++++-- .../Abp/EventBus/Distributed/IEventOutbox.cs | 8 +- .../Distributed/IRawEventPublisher.cs | 13 ++++ .../EventBus/Distributed/OutgoingEventInfo.cs | 39 ++++++++++ .../DistEvents/DistDemoApp/DistDemoApp.csproj | 1 + .../DistDemoApp/DistDemoAppModule.cs | 4 +- 22 files changed, 395 insertions(+), 46 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs index 1378f955e4..79db928711 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.EntityFrameworkCore }); context.Services.TryAddTransient(typeof(IDbContextProvider<>), typeof(UnitOfWorkDbContextProvider<>)); - context.Services.AddTransient(typeof(DbContextEventOutbox<>)); + context.Services.AddTransient(typeof(IDbContextEventOutbox<>), typeof(DbContextEventOutbox<>)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs index 1831b67ccb..b8d26fa357 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -1,29 +1,59 @@ -using System.Threading.Tasks; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; using Volo.Abp.EventBus.Distributed; -using Volo.Abp.Guids; +using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { - public class DbContextEventOutbox : IEventOutbox + public class DbContextEventOutbox : IDbContextEventOutbox where TDbContext : IHasEventOutbox { protected IDbContextProvider DbContextProvider { get; } - protected IGuidGenerator GuidGenerator { get; } public DbContextEventOutbox( - IDbContextProvider dbContextProvider, - IGuidGenerator guidGenerator) + IDbContextProvider dbContextProvider) { DbContextProvider = dbContextProvider; - GuidGenerator = guidGenerator; } - public async Task EnqueueAsync(string eventName, byte[] eventData) + [UnitOfWork] + public virtual async Task EnqueueAsync(OutgoingEventInfo outgoingEvent) { var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); dbContext.OutgoingEventRecords.Add( - new OutgoingEventRecord(GuidGenerator.Create(), eventName, eventData) + new OutgoingEventRecord(outgoingEvent) ); } + + [UnitOfWork] + public virtual async Task> GetWaitingEventsAsync(int maxCount) + { + var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); + + var outgoingEventRecords = await dbContext + .OutgoingEventRecords + .AsNoTracking() + .OrderBy(x => x.CreationTime) + .Take(maxCount) + .ToListAsync(); + + return outgoingEventRecords + .Select(x => x.ToOutgoingEventInfo()) + .ToList(); + } + + [UnitOfWork] + public virtual async Task DeleteAsync(Guid id) + { + var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); + var outgoingEvent = await dbContext.OutgoingEventRecords.FindAsync(id); + if (outgoingEvent != null) + { + dbContext.Remove(outgoingEvent); + } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs index 8199ff0739..53745477c7 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreOutboxConfigExtensions.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public static void UseDbContext(this OutboxConfig outboxConfig) where TDbContext : IHasEventOutbox { - outboxConfig.ImplementationType = typeof(DbContextEventOutbox); + outboxConfig.ImplementationType = typeof(IDbContextEventOutbox); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventOutbox.cs new file mode 100644 index 0000000000..71d65c7f23 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventOutbox.cs @@ -0,0 +1,10 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IDbContextEventOutbox : IEventOutbox + where TDbContext : IHasEventOutbox + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs index d33e6a0097..727216de48 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs @@ -2,20 +2,24 @@ using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; +using Volo.Abp.EventBus.Distributed; namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { - public class OutgoingEventRecord : BasicAggregateRoot, IHasExtraProperties, IHasCreationTime + public class OutgoingEventRecord : + BasicAggregateRoot, + IHasExtraProperties, + IHasCreationTime { public static int MaxEventNameLength { get; set; } = 256; - public ExtraPropertyDictionary ExtraProperties { get; protected set; } + public ExtraPropertyDictionary ExtraProperties { get; private set; } - public string EventName { get; set; } + public string EventName { get; private set; } - public byte[] EventData { get; set; } + public byte[] EventData { get; private set; } - public DateTime CreationTime { get; set; } + public DateTime CreationTime { get; private set; } protected OutgoingEventRecord() { @@ -23,14 +27,26 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents this.SetDefaultsForExtraProperties(); } - public OutgoingEventRecord(Guid id, string eventName, byte[] eventData) - : base(id) + public OutgoingEventRecord( + OutgoingEventInfo eventInfo) + : base(eventInfo.Id) { - EventName = eventName; - EventData = eventData; - + EventName = eventInfo.EventName; + EventData = eventInfo.EventData; + CreationTime = eventInfo.CreationTime; + ExtraProperties = new ExtraPropertyDictionary(); this.SetDefaultsForExtraProperties(); } + + public OutgoingEventInfo ToOutgoingEventInfo() + { + return new OutgoingEventInfo( + Id, + EventName, + EventData, + CreationTime + ); + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj b/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj index 3cae05a96a..19b7f7032e 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj @@ -15,6 +15,7 @@ + diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs new file mode 100644 index 0000000000..dda6f71245 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs @@ -0,0 +1,18 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EventBus.Boxes +{ + public static class AbpDistributedEventBusExtensions + { + public static IRawEventPublisher AsRawEventPublisher(this IDistributedEventBus eventBus) + { + var rawPublisher = eventBus as IRawEventPublisher; + if (rawPublisher == null) + { + throw new AbpException($"Given type ({eventBus.GetType().AssemblyQualifiedName}) should implement {nameof(IRawEventPublisher)}!"); + } + + return rawPublisher; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs index 904bab747a..9445f1de08 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs @@ -1,12 +1,17 @@ -using Volo.Abp.Modularity; +using Volo.Abp.BackgroundWorkers; +using Volo.Abp.Modularity; namespace Volo.Abp.EventBus.Boxes { [DependsOn( - typeof(AbpEventBusModule) + typeof(AbpEventBusModule), + typeof(AbpBackgroundWorkersModule) )] public class AbpEventBusBoxesModule : AbpModule { - + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + context.AddBackgroundWorker(); + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs new file mode 100644 index 0000000000..efc278844a --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EventBus.Boxes +{ + public interface IOutboxSender + { + Task StartAsync(OutboxConfig outboxConfig); + Task StopAsync(); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 48bad9a6cf..8c7669e447 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -1,7 +1,78 @@ -namespace Volo.Abp.EventBus.Boxes +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Threading; +using Volo.Abp.Uow; + +namespace Volo.Abp.EventBus.Boxes { - public class OutboxSender + //TODO: use distributed lock! + public class OutboxSender : IOutboxSender, ITransientDependency { - //Background worker & distributed lock + protected IServiceProvider ServiceProvider { get; } + protected AbpTimer Timer { get; } + protected IDistributedEventBus DistributedEventBus { get; } + protected IEventOutbox Outbox { get; private set; } + public ILogger Logger { get; set; } + + public OutboxSender( + IServiceProvider serviceProvider, + AbpTimer timer, + IDistributedEventBus distributedEventBus) + { + ServiceProvider = serviceProvider; + Timer = timer; + DistributedEventBus = distributedEventBus; + Timer.Period = 2000; //TODO: Config? + Timer.Elapsed += TimerOnElapsed; + Logger = NullLogger.Instance; + } + + public virtual Task StartAsync(OutboxConfig outboxConfig) + { + Outbox = (IEventOutbox)ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); + Timer.Start(); + return Task.CompletedTask; + } + + public virtual Task StopAsync() + { + Timer.Stop(); + return Task.CompletedTask; + } + + private void TimerOnElapsed(object sender, EventArgs e) + { + AsyncHelper.RunSync(RunAsync); + } + + protected virtual async Task RunAsync() + { + while (true) + { + var waitingEvents = await Outbox.GetWaitingEventsAsync(100); + if (waitingEvents.Count <= 0) + { + break; + } + + Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); + + foreach (var waitingEvent in waitingEvents) + { + await DistributedEventBus + .AsRawEventPublisher() + .PublishRawAsync(waitingEvent.Id, waitingEvent.EventName, waitingEvent.EventData); + + await Outbox.DeleteAsync(waitingEvent.Id); + + Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); + } + } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs new file mode 100644 index 0000000000..617913e42f --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.BackgroundWorkers; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EventBus.Boxes +{ + public class OutboxSenderManager : IBackgroundWorker + { + protected AbpDistributedEventBusOptions Options { get; } + protected IServiceProvider ServiceProvider { get; } + protected List Senders { get; } + + public OutboxSenderManager( + IOptions options, + IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + Options = options.Value; + Senders = new List(); + } + + public async Task StartAsync(CancellationToken cancellationToken = default) + { + foreach (var outboxConfig in Options.Outboxes.Values) + { + if (outboxConfig.IsSendingEnabled) + { + var sender = ServiceProvider.GetRequiredService(); + await sender.StartAsync(outboxConfig); + Senders.Add(sender); + } + } + } + + public async Task StopAsync(CancellationToken cancellationToken = default) + { + foreach (var sender in Senders) + { + await sender.StopAsync(); + } + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index 18f68923e1..9e62b47fed 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -9,9 +9,11 @@ using Microsoft.Extensions.Options; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Guids; using Volo.Abp.Kafka; using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; +using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.EventBus.Kafka @@ -40,13 +42,17 @@ namespace Volo.Abp.EventBus.Kafka IKafkaSerializer serializer, IProducerPool producerPool, IEventErrorHandler errorHandler, - IOptions abpEventBusOptions) + IOptions abpEventBusOptions, + IGuidGenerator guidGenerator, + IClock clock) : base( serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler, - abpDistributedEventBusOptions) + abpDistributedEventBusOptions, + guidGenerator, + clock) { AbpKafkaEventBusOptions = abpKafkaEventBusOptions.Value; AbpEventBusOptions = abpEventBusOptions.Value; @@ -182,7 +188,24 @@ namespace Volo.Abp.EventBus.Kafka { unitOfWork.AddOrReplaceDistributedEvent(eventRecord); } - + + public override Task PublishRawAsync( + Guid eventId, + string eventName, + byte[] eventData) + { + return PublishAsync( + AbpKafkaEventBusOptions.TopicName, + eventName, + eventData, + new Headers + { + { "messageId", Serializer.Serialize(eventId) } + }, + null + ); + } + protected override byte[] Serialize(object eventData) { return Serializer.Serialize(eventData); @@ -204,11 +227,16 @@ namespace Volo.Abp.EventBus.Kafka await PublishAsync(DeadLetterTopicName, eventType, eventData, headers, headersArguments); } - private async Task PublishAsync(string topicName, Type eventType, object eventData, Headers headers, Dictionary headersArguments) + private Task PublishAsync(string topicName, Type eventType, object eventData, Headers headers, Dictionary headersArguments) { var eventName = EventNameAttribute.GetNameOrDefault(eventType); var body = Serializer.Serialize(eventData); + return PublishAsync(topicName, eventName, body, headers, headersArguments); + } + + private async Task PublishAsync(string topicName, string eventName, byte[] body, Headers headers, Dictionary headersArguments) + { var producer = ProducerPool.Get(AbpKafkaEventBusOptions.ConnectionName); SetEventMessageHeaders(headers, headersArguments); diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index d2766eb247..f51cd6821d 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -10,9 +10,11 @@ using RabbitMQ.Client.Events; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; using Volo.Abp.RabbitMQ; using Volo.Abp.Threading; +using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.EventBus.RabbitMq @@ -46,13 +48,17 @@ namespace Volo.Abp.EventBus.RabbitMq ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IEventErrorHandler errorHandler, - IOptions abpEventBusOptions) + IOptions abpEventBusOptions, + IGuidGenerator guidGenerator, + IClock clock) : base( serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler, - distributedEventBusOptions) + distributedEventBusOptions, + guidGenerator, + clock) { ConnectionPool = connectionPool; Serializer = serializer; @@ -198,7 +204,12 @@ namespace Volo.Abp.EventBus.RabbitMq { unitOfWork.AddOrReplaceDistributedEvent(eventRecord); } - + + public override Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData) + { + return PublishAsync(eventName, eventData, null, eventId: eventId); + } + protected override byte[] Serialize(object eventData) { return Serializer.Serialize(eventData); @@ -209,6 +220,16 @@ namespace Volo.Abp.EventBus.RabbitMq var eventName = EventNameAttribute.GetNameOrDefault(eventType); var body = Serializer.Serialize(eventData); + return PublishAsync(eventName, body, properties, headersArguments); + } + + protected Task PublishAsync( + string eventName, + byte[] body, + IBasicProperties properties, + Dictionary headersArguments = null, + Guid? eventId = null) + { using (var channel = ConnectionPool.Get(AbpRabbitMqEventBusOptions.ConnectionName).CreateModel()) { channel.ExchangeDeclare( @@ -221,7 +242,7 @@ namespace Volo.Abp.EventBus.RabbitMq { properties = channel.CreateBasicProperties(); properties.DeliveryMode = RabbitMqConsts.DeliveryModes.Persistent; - properties.MessageId = Guid.NewGuid().ToString("N"); + properties.MessageId = (eventId ?? GuidGenerator.Create()).ToString("N"); } SetEventMessageHeaders(properties, headersArguments); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 43017d9c4a..07995d67dd 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -8,8 +8,10 @@ using Microsoft.Extensions.Options; using Rebus.Bus; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; +using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.EventBus.Rebus @@ -34,13 +36,17 @@ namespace Volo.Abp.EventBus.Rebus IOptions abpDistributedEventBusOptions, IOptions abpEventBusRebusOptions, IEventErrorHandler errorHandler, - IRebusSerializer serializer) : + IRebusSerializer serializer, + IGuidGenerator guidGenerator, + IClock clock) : base( serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler, - abpDistributedEventBusOptions) + abpDistributedEventBusOptions, + guidGenerator, + clock) { Rebus = rebus; Serializer = serializer; @@ -182,6 +188,12 @@ namespace Volo.Abp.EventBus.Rebus return false; } + public override Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData) + { + /* TODO: IMPLEMENT! */ + throw new NotImplementedException(); + } + protected override byte[] Serialize(object eventData) { return Serializer.Serialize(eventData); diff --git a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj index 261b10d8ae..5de5b0893f 100644 --- a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj +++ b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj @@ -16,6 +16,7 @@ + diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs index 329c26c93f..bd86f14703 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using Volo.Abp.EventBus.Abstractions; using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Local; +using Volo.Abp.Guids; using Volo.Abp.Json; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; @@ -14,7 +15,9 @@ namespace Volo.Abp.EventBus [DependsOn( typeof(AbpEventBusAbstractionsModule), typeof(AbpMultiTenancyModule), - typeof(AbpJsonModule))] + typeof(AbpJsonModule), + typeof(AbpGuidsModule) + )] public class AbpEventBusModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 3d68490ae2..786f58fe47 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -1,15 +1,18 @@ using System; -using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; +using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; +using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.EventBus.Distributed { - public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus + public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus, IRawEventPublisher { + protected IGuidGenerator GuidGenerator { get; } + protected IClock Clock { get; } protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } protected DistributedEventBusBase( @@ -17,13 +20,17 @@ namespace Volo.Abp.EventBus.Distributed ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IEventErrorHandler errorHandler, - IOptions abpDistributedEventBusOptions + IOptions abpDistributedEventBusOptions, + IGuidGenerator guidGenerator, + IClock clock ) : base( serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler) { + GuidGenerator = guidGenerator; + Clock = clock; AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value; } @@ -71,7 +78,9 @@ namespace Volo.Abp.EventBus.Distributed await PublishToEventBusAsync(eventType, eventData); } - + + public abstract Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData); + private async Task AddToOutboxAsync(Type eventType, object eventData) { var unitOfWork = UnitOfWorkManager.Current; @@ -87,8 +96,12 @@ namespace Volo.Abp.EventBus.Distributed var eventOutbox = (IEventOutbox)unitOfWork.ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); var eventName = EventNameAttribute.GetNameOrDefault(eventType); await eventOutbox.EnqueueAsync( - eventName, - Serialize(eventData) + new OutgoingEventInfo( + GuidGenerator.Create(), + eventName, + Serialize(eventData), + Clock.Now + ) ); return true; } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs index ec6d010307..0b50993e8e 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs @@ -1,9 +1,15 @@ +using System; +using System.Collections.Generic; using System.Threading.Tasks; namespace Volo.Abp.EventBus.Distributed { public interface IEventOutbox { - Task EnqueueAsync(string eventName, byte[] eventData); + Task EnqueueAsync(OutgoingEventInfo outgoingEvent); + + Task> GetWaitingEventsAsync(int maxCount); + + Task DeleteAsync(Guid id); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs new file mode 100644 index 0000000000..f53eb2b78b --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs @@ -0,0 +1,13 @@ +using System; +using System.Threading.Tasks; + +namespace Volo.Abp.EventBus.Distributed +{ + public interface IRawEventPublisher + { + Task PublishRawAsync( + Guid eventId, + string eventName, + byte[] eventData); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs new file mode 100644 index 0000000000..91cf806ba9 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs @@ -0,0 +1,39 @@ +using System; +using Volo.Abp.Data; + +namespace Volo.Abp.EventBus.Distributed +{ + public class OutgoingEventInfo : IHasExtraProperties + { + public static int MaxEventNameLength { get; set; } = 256; + + public ExtraPropertyDictionary ExtraProperties { get; protected set; } + + public Guid Id { get; } + + public string EventName { get; } + + public byte[] EventData { get; } + + public DateTime CreationTime { get; } + + protected OutgoingEventInfo() + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public OutgoingEventInfo( + Guid id, + string eventName, + byte[] eventData, + DateTime creationTime) + { + Id = id; + EventName = eventName; + EventData = eventData; + CreationTime = creationTime; + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + }} \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/DistDemoApp.csproj b/test/DistEvents/DistDemoApp/DistDemoApp.csproj index 0513a520d1..adfe26ebea 100644 --- a/test/DistEvents/DistDemoApp/DistDemoApp.csproj +++ b/test/DistEvents/DistDemoApp/DistDemoApp.csproj @@ -17,6 +17,7 @@ + diff --git a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs index 93880032d9..42e82f5e46 100644 --- a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs +++ b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs @@ -4,6 +4,7 @@ using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.RabbitMq; using Volo.Abp.Modularity; @@ -13,7 +14,8 @@ namespace DistDemoApp [DependsOn( typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpAutofacModule), - typeof(AbpEventBusRabbitMqModule) + typeof(AbpEventBusRabbitMqModule), + typeof(AbpEventBusBoxesModule) )] public class DistDemoAppModule : AbpModule { From 6cb6b172226cf67da94291376d47b67e5576a506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 14:49:36 +0300 Subject: [PATCH 07/55] Update OutboxSender.cs --- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 8c7669e447..43c51c0b73 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -6,7 +6,6 @@ using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Threading; -using Volo.Abp.Uow; namespace Volo.Abp.EventBus.Boxes { @@ -54,7 +53,7 @@ namespace Volo.Abp.EventBus.Boxes { while (true) { - var waitingEvents = await Outbox.GetWaitingEventsAsync(100); + var waitingEvents = await Outbox.GetWaitingEventsAsync(1000); //TODO: Config? if (waitingEvents.Count <= 0) { break; From ae95de6aa5324a8c4deb21fec66efc3f0ce26bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 14:57:35 +0300 Subject: [PATCH 08/55] Introduced Volo.Abp.DistributedLocking package --- framework/Volo.Abp.sln | 7 +++++ .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ .../Volo.Abp.DistributedLocking.csproj | 21 +++++++++++++ .../AbpDistributedLockingModule.cs | 9 ++++++ nupkg/common.ps1 | 1 + 6 files changed, 71 insertions(+) create mode 100644 framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj create mode 100644 framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/AbpDistributedLockingModule.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 60011440f9..c5065464ff 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -387,6 +387,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Threading.Tests", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.EventBus.Boxes", "src\Volo.Abp.EventBus.Boxes\Volo.Abp.EventBus.Boxes.csproj", "{6E289F31-7924-418B-9DAC-62A7CFADF916}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.DistributedLocking", "src\Volo.Abp.DistributedLocking\Volo.Abp.DistributedLocking.csproj", "{9A7EEA08-15BE-476D-8168-53039867038E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1153,6 +1155,10 @@ Global {6E289F31-7924-418B-9DAC-62A7CFADF916}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E289F31-7924-418B-9DAC-62A7CFADF916}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E289F31-7924-418B-9DAC-62A7CFADF916}.Release|Any CPU.Build.0 = Release|Any CPU + {9A7EEA08-15BE-476D-8168-53039867038E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A7EEA08-15BE-476D-8168-53039867038E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A7EEA08-15BE-476D-8168-53039867038E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A7EEA08-15BE-476D-8168-53039867038E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1348,6 +1354,7 @@ Global {90B1866A-EF99-40B9-970E-B898E5AA523F} = {447C8A77-E5F0-4538-8687-7383196D04EA} {7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B} = {447C8A77-E5F0-4538-8687-7383196D04EA} {6E289F31-7924-418B-9DAC-62A7CFADF916} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {9A7EEA08-15BE-476D-8168-53039867038E} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml new file mode 100644 index 0000000000..be0de3a908 --- /dev/null +++ b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj b/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj new file mode 100644 index 0000000000..6cecd5b0d8 --- /dev/null +++ b/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj @@ -0,0 +1,21 @@ + + + + + + + netstandard2.0 + Volo.Abp.DistributedLocking + Volo.Abp.DistributedLocking + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + diff --git a/framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/AbpDistributedLockingModule.cs b/framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/AbpDistributedLockingModule.cs new file mode 100644 index 0000000000..877ac54244 --- /dev/null +++ b/framework/src/Volo.Abp.DistributedLocking/Volo/Abp/DistributedLocking/AbpDistributedLockingModule.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Modularity; + +namespace Volo.Abp.DistributedLocking +{ + public class AbpDistributedLockingModule : AbpModule + { + + } +} \ No newline at end of file diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index c4fcfc4df3..bc9ccb63a0 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -90,6 +90,7 @@ $projects = ( "framework/src/Volo.Abp.Ddd.Application", "framework/src/Volo.Abp.Ddd.Application.Contracts", "framework/src/Volo.Abp.Ddd.Domain", + "framework/src/Volo.Abp.DistributedLocking", "framework/src/Volo.Abp.Emailing", "framework/src/Volo.Abp.EntityFrameworkCore", "framework/src/Volo.Abp.EntityFrameworkCore.MySQL", From 8271fc98a6248cd52cca7e06987253ee0b1a2380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 15:50:09 +0300 Subject: [PATCH 09/55] Implemented distributed locking for the event outbox --- .../Volo.Abp.DistributedLocking.csproj | 4 ++ .../Volo.Abp.EventBus.Boxes.csproj | 1 + .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 49 +++++++++++++------ .../DistEvents/DistDemoApp/DistDemoApp.csproj | 1 + .../DistDemoApp/DistDemoAppModule.cs | 11 +++++ test/DistEvents/DistDemoApp/appsettings.json | 3 ++ 6 files changed, 55 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj b/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj index 6cecd5b0d8..c4b590412d 100644 --- a/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj +++ b/framework/src/Volo.Abp.DistributedLocking/Volo.Abp.DistributedLocking.csproj @@ -18,4 +18,8 @@ + + + + diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj b/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj index 19b7f7032e..6cbaf62aed 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo.Abp.EventBus.Boxes.csproj @@ -16,6 +16,7 @@ + diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 43c51c0b73..176f281caa 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using Medallion.Threading; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; @@ -15,17 +16,22 @@ namespace Volo.Abp.EventBus.Boxes protected IServiceProvider ServiceProvider { get; } protected AbpTimer Timer { get; } protected IDistributedEventBus DistributedEventBus { get; } + protected IDistributedLockProvider DistributedLockProvider { get; } protected IEventOutbox Outbox { get; private set; } + protected OutboxConfig OutboxConfig { get; private set; } + protected string DistributedLockName => "Outbox_" + OutboxConfig.Name; public ILogger Logger { get; set; } public OutboxSender( IServiceProvider serviceProvider, AbpTimer timer, - IDistributedEventBus distributedEventBus) + IDistributedEventBus distributedEventBus, + IDistributedLockProvider distributedLockProvider) { ServiceProvider = serviceProvider; Timer = timer; DistributedEventBus = distributedEventBus; + DistributedLockProvider = distributedLockProvider; Timer.Period = 2000; //TODO: Config? Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; @@ -33,6 +39,7 @@ namespace Volo.Abp.EventBus.Boxes public virtual Task StartAsync(OutboxConfig outboxConfig) { + OutboxConfig = outboxConfig; Outbox = (IEventOutbox)ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); Timer.Start(); return Task.CompletedTask; @@ -51,25 +58,39 @@ namespace Volo.Abp.EventBus.Boxes protected virtual async Task RunAsync() { - while (true) + await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName)) { - var waitingEvents = await Outbox.GetWaitingEventsAsync(1000); //TODO: Config? - if (waitingEvents.Count <= 0) + if (handle != null) { - break; - } + Logger.LogDebug("Obtained the distributed lock: " + DistributedLockName); + + while (true) + { + var waitingEvents = await Outbox.GetWaitingEventsAsync(1000); //TODO: Config? + if (waitingEvents.Count <= 0) + { + break; + } - Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); + Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); - foreach (var waitingEvent in waitingEvents) - { - await DistributedEventBus - .AsRawEventPublisher() - .PublishRawAsync(waitingEvent.Id, waitingEvent.EventName, waitingEvent.EventData); + foreach (var waitingEvent in waitingEvents) + { + await DistributedEventBus + .AsRawEventPublisher() + .PublishRawAsync(waitingEvent.Id, waitingEvent.EventName, waitingEvent.EventData); - await Outbox.DeleteAsync(waitingEvent.Id); + await Outbox.DeleteAsync(waitingEvent.Id); - Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); + Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); + } + } + + await Task.Delay(30000); + } + else + { + Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); } } } diff --git a/test/DistEvents/DistDemoApp/DistDemoApp.csproj b/test/DistEvents/DistDemoApp/DistDemoApp.csproj index adfe26ebea..66623bfde4 100644 --- a/test/DistEvents/DistDemoApp/DistDemoApp.csproj +++ b/test/DistEvents/DistDemoApp/DistDemoApp.csproj @@ -6,6 +6,7 @@ + diff --git a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs index 42e82f5e46..c4eab2937f 100644 --- a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs +++ b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs @@ -1,4 +1,7 @@ +using Medallion.Threading; +using Medallion.Threading.Redis; using Microsoft.Extensions.DependencyInjection; +using StackExchange.Redis; using Volo.Abp.Autofac; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EntityFrameworkCore; @@ -21,6 +24,8 @@ namespace DistDemoApp { public override void ConfigureServices(ServiceConfigurationContext context) { + var configuration = context.Services.GetConfiguration(); + context.Services.AddHostedService(); context.Services.AddAbpDbContext(options => @@ -46,6 +51,12 @@ namespace DistDemoApp config.UseDbContext(); }); }); + + context.Services.AddSingleton(sp => + { + var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); + return new RedisDistributedSynchronizationProvider(connection.GetDatabase()); + }); } } } \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/appsettings.json b/test/DistEvents/DistDemoApp/appsettings.json index 8f4773ae6a..1ed30c80a9 100644 --- a/test/DistEvents/DistDemoApp/appsettings.json +++ b/test/DistEvents/DistDemoApp/appsettings.json @@ -12,5 +12,8 @@ "ClientName": "DistDemoApp", "ExchangeName": "DistDemo" } + }, + "Redis": { + "Configuration": "127.0.0.1" } } \ No newline at end of file From 79015b0e4e9ad82ff5cac0c9124a10b6a7f1a2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Sep 2021 15:57:51 +0300 Subject: [PATCH 10/55] Added cancellation tokens --- .../Volo/Abp/EventBus/Boxes/IOutboxSender.cs | 5 +++-- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs index efc278844a..b9a78060df 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs @@ -1,3 +1,4 @@ +using System.Threading; using System.Threading.Tasks; using Volo.Abp.EventBus.Distributed; @@ -5,7 +6,7 @@ namespace Volo.Abp.EventBus.Boxes { public interface IOutboxSender { - Task StartAsync(OutboxConfig outboxConfig); - Task StopAsync(); + Task StartAsync(OutboxConfig outboxConfig, CancellationToken cancellationToken = default); + Task StopAsync(CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 176f281caa..94d0175e10 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; using Medallion.Threading; using Microsoft.Extensions.DependencyInjection; @@ -37,17 +38,17 @@ namespace Volo.Abp.EventBus.Boxes Logger = NullLogger.Instance; } - public virtual Task StartAsync(OutboxConfig outboxConfig) + public virtual Task StartAsync(OutboxConfig outboxConfig, CancellationToken cancellationToken = default) { OutboxConfig = outboxConfig; Outbox = (IEventOutbox)ServiceProvider.GetRequiredService(outboxConfig.ImplementationType); - Timer.Start(); + Timer.Start(cancellationToken); return Task.CompletedTask; } - public virtual Task StopAsync() + public virtual Task StopAsync(CancellationToken cancellationToken = default) { - Timer.Stop(); + Timer.Stop(cancellationToken); return Task.CompletedTask; } @@ -85,12 +86,11 @@ namespace Volo.Abp.EventBus.Boxes Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); } } - - await Task.Delay(30000); } else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); + await Task.Delay(7000); //TODO: Can we pass a cancellation token to cancel on shutdown? (Config?) } } } From 9593c877e10cce72821018e57137cda66520c724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 9 Sep 2021 15:50:33 +0300 Subject: [PATCH 11/55] Save incoming events to inbox --- .../AbpEntityFrameworkCoreModule.cs | 1 + .../DistributedEvents/DbContextEventInbox.cs | 47 ++++++ .../DistributedEvents/DbContextEventOutbox.cs | 6 +- .../EfCoreInboxConfigExtensions.cs | 13 ++ ...entInboxDbContextModelBuilderExtensions.cs | 21 +++ .../DistributedEvents/IDbContextEventInbox.cs | 10 ++ .../DistributedEvents/IHasEventInbox.cs | 9 ++ .../DistributedEvents/IHasEventOutbox.cs | 2 +- .../DistributedEvents/IncomingEventRecord.cs | 52 ++++++ .../Kafka/KafkaDistributedEventBus.cs | 5 + .../RabbitMq/RabbitMqDistributedEventBus.cs | 9 +- .../AbpDistributedEventBusOptions.cs | 7 +- .../Distributed/DistributedEventBusBase.cs | 43 ++++- .../Abp/EventBus/Distributed/IEventInbox.cs | 12 ++ .../Abp/EventBus/Distributed/InboxConfig.cs | 28 ++++ .../Distributed/InboxConfigDictionary.cs | 19 +++ .../EventBus/Distributed/IncomingEventInfo.cs | 40 +++++ ...onfigList.cs => OutboxConfigDictionary.cs} | 7 +- .../EventBus/Distributed/OutgoingEventInfo.cs | 2 +- .../DistDemoApp/DistDemoAppModule.cs | 7 +- .../20210909113934_Added_Inbox.Designer.cs | 149 ++++++++++++++++++ .../Migrations/20210909113934_Added_Inbox.cs | 32 ++++ .../Migrations/TodoDbContextModelSnapshot.cs | 27 ++++ test/DistEvents/DistDemoApp/TodoDbContext.cs | 6 +- 24 files changed, 537 insertions(+), 17 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfig.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfigDictionary.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs rename framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/{OutboxConfigList.cs => OutboxConfigDictionary.cs} (61%) create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs index 79db928711..90b541bc73 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs @@ -28,6 +28,7 @@ namespace Volo.Abp.EntityFrameworkCore context.Services.TryAddTransient(typeof(IDbContextProvider<>), typeof(UnitOfWorkDbContextProvider<>)); context.Services.AddTransient(typeof(IDbContextEventOutbox<>), typeof(DbContextEventOutbox<>)); + context.Services.AddTransient(typeof(IDbContextEventInbox<>), typeof(DbContextEventInbox<>)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs new file mode 100644 index 0000000000..aeaeebe948 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class DbContextEventInbox : IDbContextEventInbox + where TDbContext : IHasEventInbox + { + protected IDbContextProvider DbContextProvider { get; } + + public DbContextEventInbox( + IDbContextProvider dbContextProvider) + { + DbContextProvider = dbContextProvider; + } + + [UnitOfWork] + public virtual async Task EnqueueAsync(IncomingEventInfo incomingEvent) + { + var dbContext = (IHasEventInbox) await DbContextProvider.GetDbContextAsync(); + dbContext.IncomingEvents.Add( + new IncomingEventRecord(incomingEvent) + ); + } + + [UnitOfWork] + public virtual async Task> GetWaitingEventsAsync(int maxCount) + { + var dbContext = (IHasEventInbox) await DbContextProvider.GetDbContextAsync(); + + var outgoingEventRecords = await dbContext + .IncomingEvents + .AsNoTracking() + .OrderBy(x => x.CreationTime) + .Take(maxCount) + .ToListAsync(); + + return outgoingEventRecords + .Select(x => x.ToIncomingEventInfo()) + .ToList(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs index b8d26fa357..89e10bbd75 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public virtual async Task EnqueueAsync(OutgoingEventInfo outgoingEvent) { var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); - dbContext.OutgoingEventRecords.Add( + dbContext.OutgoingEvents.Add( new OutgoingEventRecord(outgoingEvent) ); } @@ -34,7 +34,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); var outgoingEventRecords = await dbContext - .OutgoingEventRecords + .OutgoingEvents .AsNoTracking() .OrderBy(x => x.CreationTime) .Take(maxCount) @@ -49,7 +49,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public virtual async Task DeleteAsync(Guid id) { var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); - var outgoingEvent = await dbContext.OutgoingEventRecords.FindAsync(id); + var outgoingEvent = await dbContext.OutgoingEvents.FindAsync(id); if (outgoingEvent != null) { dbContext.Remove(outgoingEvent); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreInboxConfigExtensions.cs new file mode 100644 index 0000000000..182c7b20ba --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EfCoreInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class EfCoreInboxConfigExtensions + { + public static void UseDbContext(this InboxConfig outboxConfig) + where TDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(IDbContextEventInbox); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs new file mode 100644 index 0000000000..d3e3a6cc26 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs @@ -0,0 +1,21 @@ +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore.Modeling; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class EventInboxDbContextModelBuilderExtensions + { + public static void ConfigureEventInbox([NotNull] this ModelBuilder builder) + { + builder.Entity(b => + { + b.ToTable(AbpCommonDbProperties.DbTablePrefix + "EventInbox", AbpCommonDbProperties.DbSchema); + b.ConfigureByConvention(); + b.Property(x => x.EventName).IsRequired().HasMaxLength(IncomingEventRecord.MaxEventNameLength); + b.Property(x => x.EventData).IsRequired(); + }); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventInbox.cs new file mode 100644 index 0000000000..81b51bc11d --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IDbContextEventInbox.cs @@ -0,0 +1,10 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IDbContextEventInbox : IEventInbox + where TDbContext : IHasEventInbox + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventInbox.cs new file mode 100644 index 0000000000..f6836a0c19 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventInbox.cs @@ -0,0 +1,9 @@ +using Microsoft.EntityFrameworkCore; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IHasEventInbox : IEfCoreDbContext + { + DbSet IncomingEvents { get; set; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs index e7e60e3800..5e2934d591 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IHasEventOutbox.cs @@ -4,6 +4,6 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { public interface IHasEventOutbox : IEfCoreDbContext { - DbSet OutgoingEventRecords { get; set; } + DbSet OutgoingEvents { get; set; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs new file mode 100644 index 0000000000..95bc5fa9d4 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs @@ -0,0 +1,52 @@ +using System; +using Volo.Abp.Auditing; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class IncomingEventRecord : + BasicAggregateRoot, + IHasExtraProperties, + IHasCreationTime + { + public static int MaxEventNameLength { get; set; } = 256; + + public ExtraPropertyDictionary ExtraProperties { get; private set; } + + public string EventName { get; private set; } + + public byte[] EventData { get; private set; } + + public DateTime CreationTime { get; private set; } + + protected IncomingEventRecord() + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public IncomingEventRecord( + IncomingEventInfo eventInfo) + : base(eventInfo.Id) + { + EventName = eventInfo.EventName; + EventData = eventInfo.EventData; + CreationTime = eventInfo.CreationTime; + + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public IncomingEventInfo ToIncomingEventInfo() + { + return new IncomingEventInfo( + Id, + EventName, + EventData, + CreationTime + ); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index 9e62b47fed..5977cf159d 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -86,6 +86,11 @@ namespace Volo.Abp.EventBus.Kafka { return; } + + if (await AddToInboxAsync(eventName, eventType, message.Value)) + { + return; + } var eventData = Serializer.Deserialize(message.Value, eventType); diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index f51cd6821d..59fe5e4b99 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -105,7 +105,14 @@ namespace Volo.Abp.EventBus.RabbitMq return; } - var eventData = Serializer.Deserialize(ea.Body.ToArray(), eventType); + var eventBytes = ea.Body.ToArray(); + + if (await AddToInboxAsync(eventName, eventType, eventBytes)) + { + return; + } + + var eventData = Serializer.Deserialize(eventBytes, eventType); await TriggerHandlersAsync(eventType, eventData, errorContext => { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs index 052e421511..896dfd4f7d 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs @@ -6,12 +6,15 @@ namespace Volo.Abp.EventBus.Distributed { public ITypeList Handlers { get; } - public OutboxConfigList Outboxes { get; } + public OutboxConfigDictionary Outboxes { get; } + + public InboxConfigDictionary Inboxes { get; } public AbpDistributedEventBusOptions() { Handlers = new TypeList(); - Outboxes = new OutboxConfigList(); + Outboxes = new OutboxConfigDictionary(); + Inboxes = new InboxConfigDictionary(); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 786f58fe47..dd4ca189ab 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -17,14 +18,14 @@ namespace Volo.Abp.EventBus.Distributed protected DistributedEventBusBase( IServiceScopeFactory serviceScopeFactory, - ICurrentTenant currentTenant, + ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IEventErrorHandler errorHandler, IOptions abpDistributedEventBusOptions, IGuidGenerator guidGenerator, IClock clock - ) : base( - serviceScopeFactory, + ) : base( + serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler) @@ -67,7 +68,7 @@ namespace Volo.Abp.EventBus.Distributed ); return; } - + if (useOutbox) { if (await AddToOutboxAsync(eventType, eventData)) @@ -106,10 +107,42 @@ namespace Volo.Abp.EventBus.Distributed return true; } } - + return false; } + protected async Task AddToInboxAsync( + string eventName, + Type eventType, + byte[] eventBytes) + { + if (AbpDistributedEventBusOptions.Inboxes.Count <= 0) + { + return false; + } + + using (var scope = ServiceScopeFactory.CreateScope()) + { + foreach (var inboxConfig in AbpDistributedEventBusOptions.Inboxes.Values) + { + if (inboxConfig.EventSelector == null || inboxConfig.EventSelector(eventType)) + { + var eventInbox = (IEventInbox) scope.ServiceProvider.GetRequiredService(inboxConfig.ImplementationType); + await eventInbox.EnqueueAsync( + new IncomingEventInfo( + GuidGenerator.Create(), + eventName, + eventBytes, + Clock.Now + ) + ); + } + } + } + + return true; + } + protected abstract byte[] Serialize(object eventData); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs new file mode 100644 index 0000000000..dddedab2c0 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Volo.Abp.EventBus.Distributed +{ + public interface IEventInbox + { + Task EnqueueAsync(IncomingEventInfo incomingEvent); + + Task> GetWaitingEventsAsync(int maxCount); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfig.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfig.cs new file mode 100644 index 0000000000..5f708fdb6f --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfig.cs @@ -0,0 +1,28 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.EventBus.Distributed +{ + public class InboxConfig + { + [NotNull] + public string Name { get; } + + public Type ImplementationType { get; set; } + + public Func EventSelector { get; set; } + + public Func HandlerSelector { get; set; } + + /// + /// Used to enable/disable processing incoming events. + /// Default: true. + /// + public bool IsProcessingEnabled { get; set; } = true; + + public InboxConfig([NotNull] string name) + { + Name = Check.NotNullOrWhiteSpace(name, nameof(name)); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfigDictionary.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfigDictionary.cs new file mode 100644 index 0000000000..9909181138 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxConfigDictionary.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.EventBus.Distributed +{ + public class InboxConfigDictionary : Dictionary + { + public void Configure(Action configAction) + { + Configure("Default", configAction); + } + + public void Configure(string outboxName, Action configAction) + { + var outboxConfig = this.GetOrAdd(outboxName, () => new InboxConfig(outboxName)); + configAction(outboxConfig); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs new file mode 100644 index 0000000000..7cd628cf91 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs @@ -0,0 +1,40 @@ +using System; +using Volo.Abp.Data; + +namespace Volo.Abp.EventBus.Distributed +{ + public class IncomingEventInfo : IHasExtraProperties + { + public static int MaxEventNameLength { get; set; } = 256; + + public ExtraPropertyDictionary ExtraProperties { get; protected set; } + + public Guid Id { get; } + + public string EventName { get; } + + public byte[] EventData { get; } + + public DateTime CreationTime { get; } + + protected IncomingEventInfo() + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public IncomingEventInfo( + Guid id, + string eventName, + byte[] eventData, + DateTime creationTime) + { + Id = id; + EventName = Check.NotNullOrWhiteSpace(eventName, nameof(eventName), MaxEventNameLength); + EventData = eventData; + CreationTime = creationTime; + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigDictionary.cs similarity index 61% rename from framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs rename to framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigDictionary.cs index 162ceef6ff..be5b838363 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigList.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutboxConfigDictionary.cs @@ -3,8 +3,13 @@ using System.Collections.Generic; namespace Volo.Abp.EventBus.Distributed { - public class OutboxConfigList : Dictionary + public class OutboxConfigDictionary : Dictionary { + public void Configure(Action configAction) + { + Configure("Default", configAction); + } + public void Configure(string outboxName, Action configAction) { var outboxConfig = this.GetOrAdd(outboxName, () => new OutboxConfig(outboxName)); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs index 91cf806ba9..643db882d2 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/OutgoingEventInfo.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.EventBus.Distributed DateTime creationTime) { Id = id; - EventName = eventName; + EventName = Check.NotNullOrWhiteSpace(eventName, nameof(eventName), MaxEventNameLength); EventData = eventData; CreationTime = creationTime; ExtraProperties = new ExtraPropertyDictionary(); diff --git a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs index c4eab2937f..b7fbe1c930 100644 --- a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs +++ b/test/DistEvents/DistDemoApp/DistDemoAppModule.cs @@ -46,7 +46,12 @@ namespace DistDemoApp Configure(options => { - options.Outboxes.Configure("Default", config => + options.Outboxes.Configure(config => + { + config.UseDbContext(); + }); + + options.Inboxes.Configure(config => { config.UseDbContext(); }); diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs new file mode 100644 index 0000000000..e02cee4b76 --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs @@ -0,0 +1,149 @@ +// +using System; +using DistDemoApp; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +namespace DistDemoApp.Migrations +{ + [DbContext(typeof(TodoDbContext))] + [Migration("20210909113934_Added_Inbox")] + partial class Added_Inbox + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.9") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("DistDemoApp.TodoItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.ToTable("TodoItems"); + }); + + modelBuilder.Entity("DistDemoApp.TodoSummary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Day") + .HasColumnType("tinyint"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Month") + .HasColumnType("tinyint"); + + b.Property("TotalCount") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("TodoSummaries"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.IncomingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventInbox"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventOutbox"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs b/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs new file mode 100644 index 0000000000..f154ee3ff6 --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs @@ -0,0 +1,32 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DistDemoApp.Migrations +{ + public partial class Added_Inbox : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpEventInbox", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + EventName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + EventData = table.Column(type: "varbinary(max)", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEventInbox", x => x.Id); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpEventInbox"); + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs index f1b3330485..3423520512 100644 --- a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs +++ b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs @@ -88,6 +88,33 @@ namespace DistDemoApp.Migrations b.ToTable("TodoSummaries"); }); + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.IncomingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventInbox"); + }); + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => { b.Property("Id") diff --git a/test/DistEvents/DistDemoApp/TodoDbContext.cs b/test/DistEvents/DistDemoApp/TodoDbContext.cs index 3db006535a..5a1ddd2c3f 100644 --- a/test/DistEvents/DistDemoApp/TodoDbContext.cs +++ b/test/DistEvents/DistDemoApp/TodoDbContext.cs @@ -5,11 +5,12 @@ using Volo.Abp.EntityFrameworkCore.DistributedEvents; namespace DistDemoApp { - public class TodoDbContext : AbpDbContext, IHasEventOutbox + public class TodoDbContext : AbpDbContext, IHasEventOutbox, IHasEventInbox { public DbSet TodoItems { get; set; } public DbSet TodoSummaries { get; set; } - public DbSet OutgoingEventRecords { get; set; } + public DbSet OutgoingEvents { get; set; } + public DbSet IncomingEvents { get; set; } public TodoDbContext(DbContextOptions options) : base(options) @@ -22,6 +23,7 @@ namespace DistDemoApp base.OnModelCreating(modelBuilder); modelBuilder.ConfigureEventOutbox(); + modelBuilder.ConfigureEventInbox(); modelBuilder.Entity(b => { From 8af7ccdbaf499004a9506ac643bcba4566505eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 9 Sep 2021 21:26:14 +0300 Subject: [PATCH 12/55] Implemented initial inbox processing logic --- .../DistributedEvents/DbContextEventInbox.cs | 21 ++- .../DistributedEvents/DbContextEventOutbox.cs | 1 + .../DistributedEvents/IncomingEventRecord.cs | 10 ++ .../EventBus/Boxes/AbpEventBusBoxesModule.cs | 1 + .../Abp/EventBus/Boxes/IInboxProcessor.cs | 13 ++ .../Volo/Abp/EventBus/Boxes/IOutboxSender.cs | 1 + .../Abp/EventBus/Boxes/InboxProcessManager.cs | 48 ++++++ .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 111 +++++++++++++ .../Abp/EventBus/Boxes/OutboxSenderManager.cs | 4 +- .../Kafka/KafkaDistributedEventBus.cs | 17 ++ .../RabbitMq/RabbitMqDistributedEventBus.cs | 21 ++- .../Rebus/RebusDistributedEventBus.cs | 6 + .../Distributed/DistributedEventBusBase.cs | 2 + .../Abp/EventBus/Distributed/IEventInbox.cs | 5 +- .../Distributed/IRawEventPublisher.cs | 7 +- .../Volo/Abp/EventBus/EventBusBase.cs | 13 ++ ...51_Added_Inbox_Process_Columns.Designer.cs | 155 ++++++++++++++++++ ...10909182251_Added_Inbox_Process_Columns.cs | 35 ++++ .../Migrations/TodoDbContextModelSnapshot.cs | 6 + 19 files changed, 470 insertions(+), 7 deletions(-) create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IInboxProcessor.cs create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessManager.cs create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index aeaeebe948..df45d50ae5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -1,8 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore.DistributedEvents @@ -11,11 +13,14 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents where TDbContext : IHasEventInbox { protected IDbContextProvider DbContextProvider { get; } + protected IClock Clock { get; } public DbContextEventInbox( - IDbContextProvider dbContextProvider) + IDbContextProvider dbContextProvider, + IClock clock) { DbContextProvider = dbContextProvider; + Clock = clock; } [UnitOfWork] @@ -35,6 +40,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents var outgoingEventRecords = await dbContext .IncomingEvents .AsNoTracking() + .Where(x => !x.Processed) .OrderBy(x => x.CreationTime) .Take(maxCount) .ToListAsync(); @@ -43,5 +49,16 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents .Select(x => x.ToIncomingEventInfo()) .ToList(); } + + public async Task MarkAsProcessedAsync(Guid id) + { + //TODO: Optimize? + var dbContext = (IHasEventInbox) await DbContextProvider.GetDbContextAsync(); + var incomingEvent = await dbContext.IncomingEvents.FindAsync(id); + if (incomingEvent != null) + { + incomingEvent.MarkAsProcessed(Clock.Now); + } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs index 89e10bbd75..a785ad7ce5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -48,6 +48,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents [UnitOfWork] public virtual async Task DeleteAsync(Guid id) { + //TODO: Optimize? var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); var outgoingEvent = await dbContext.OutgoingEvents.FindAsync(id); if (outgoingEvent != null) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs index 95bc5fa9d4..62c2781b48 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs @@ -20,6 +20,10 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public byte[] EventData { get; private set; } public DateTime CreationTime { get; private set; } + + public bool Processed { get; set; } + + public DateTime? ProcessedTime { get; set; } protected IncomingEventRecord() { @@ -48,5 +52,11 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents CreationTime ); } + + public void MarkAsProcessed(DateTime processedTime) + { + Processed = true; + ProcessedTime = processedTime; + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs index 9445f1de08..8e5eeb2c60 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesModule.cs @@ -12,6 +12,7 @@ namespace Volo.Abp.EventBus.Boxes public override void OnApplicationInitialization(ApplicationInitializationContext context) { context.AddBackgroundWorker(); + context.AddBackgroundWorker(); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IInboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IInboxProcessor.cs new file mode 100644 index 0000000000..e93ff0cc2e --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IInboxProcessor.cs @@ -0,0 +1,13 @@ +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EventBus.Boxes +{ + public interface IInboxProcessor + { + Task StartAsync(InboxConfig inboxConfig, CancellationToken cancellationToken = default); + + Task StopAsync(CancellationToken cancellationToken = default); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs index b9a78060df..4a700eb823 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/IOutboxSender.cs @@ -7,6 +7,7 @@ namespace Volo.Abp.EventBus.Boxes public interface IOutboxSender { Task StartAsync(OutboxConfig outboxConfig, CancellationToken cancellationToken = default); + Task StopAsync(CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessManager.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessManager.cs new file mode 100644 index 0000000000..310cad2886 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessManager.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.BackgroundWorkers; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EventBus.Boxes +{ + public class InboxProcessManager : IBackgroundWorker + { + protected AbpDistributedEventBusOptions Options { get; } + protected IServiceProvider ServiceProvider { get; } + protected List Processors { get; } + + public InboxProcessManager( + IOptions options, + IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + Options = options.Value; + Processors = new List(); + } + + public async Task StartAsync(CancellationToken cancellationToken = default) + { + foreach (var inboxConfig in Options.Inboxes.Values) + { + if (inboxConfig.IsProcessingEnabled) + { + var processor = ServiceProvider.GetRequiredService(); + await processor.StartAsync(inboxConfig, cancellationToken); + Processors.Add(processor); + } + } + } + + public async Task StopAsync(CancellationToken cancellationToken = default) + { + foreach (var processor in Processors) + { + await processor.StopAsync(cancellationToken); + } + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs new file mode 100644 index 0000000000..4725e85d51 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -0,0 +1,111 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Medallion.Threading; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Threading; +using Volo.Abp.Uow; + +namespace Volo.Abp.EventBus.Boxes +{ + public class InboxProcessor : IInboxProcessor, ITransientDependency + { + protected IServiceProvider ServiceProvider { get; } + protected AbpTimer Timer { get; } + protected IDistributedEventBus DistributedEventBus { get; } + protected IDistributedLockProvider DistributedLockProvider { get; } + protected IUnitOfWorkManager UnitOfWorkManager { get; } + protected IEventInbox Inbox { get; private set; } + protected InboxConfig InboxConfig { get; private set; } + + protected string DistributedLockName => "Inbox_" + InboxConfig.Name; + public ILogger Logger { get; set; } + + public InboxProcessor( + IServiceProvider serviceProvider, + AbpTimer timer, + IDistributedEventBus distributedEventBus, + IDistributedLockProvider distributedLockProvider, + IUnitOfWorkManager unitOfWorkManager) + { + ServiceProvider = serviceProvider; + Timer = timer; + DistributedEventBus = distributedEventBus; + DistributedLockProvider = distributedLockProvider; + UnitOfWorkManager = unitOfWorkManager; + Timer.Period = 2000; //TODO: Config? + Timer.Elapsed += TimerOnElapsed; + Logger = NullLogger.Instance; + } + + private void TimerOnElapsed(object sender, EventArgs e) + { + AsyncHelper.RunSync(RunAsync); + } + + public Task StartAsync(InboxConfig inboxConfig, CancellationToken cancellationToken = default) + { + InboxConfig = inboxConfig; + Inbox = (IEventInbox)ServiceProvider.GetRequiredService(inboxConfig.ImplementationType); + Timer.Start(cancellationToken); + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken = default) + { + Timer.Stop(cancellationToken); + return Task.CompletedTask; + } + + protected virtual async Task RunAsync() + { + await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName)) + { + if (handle != null) + { + Logger.LogDebug("Obtained the distributed lock: " + DistributedLockName); + + while (true) + { + var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config? + if (waitingEvents.Count <= 0) + { + break; + } + + Logger.LogInformation($"Found {waitingEvents.Count} events in the inbox."); + + foreach (var waitingEvent in waitingEvents) + { + using (var uow = UnitOfWorkManager.Begin(isTransactional: true, requiresNew: true)) + { + await DistributedEventBus + .AsRawEventPublisher() + .ProcessRawAsync(waitingEvent.EventName, waitingEvent.EventData); + + /* + await DistributedEventBus + .AsRawEventPublisher() + .PublishRawAsync(waitingEvent.Id, waitingEvent.EventName, waitingEvent.EventData); + */ + await Inbox.MarkAsProcessedAsync(waitingEvent.Id); + await uow.CompleteAsync(); + } + + Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}"); + } + } + } + else + { + Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); + await Task.Delay(7000); //TODO: Can we pass a cancellation token to cancel on shutdown? (Config?) + } + } + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs index 617913e42f..6d403bd243 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSenderManager.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.EventBus.Boxes if (outboxConfig.IsSendingEnabled) { var sender = ServiceProvider.GetRequiredService(); - await sender.StartAsync(outboxConfig); + await sender.StartAsync(outboxConfig, cancellationToken); Senders.Add(sender); } } @@ -41,7 +41,7 @@ namespace Volo.Abp.EventBus.Boxes { foreach (var sender in Senders) { - await sender.StopAsync(); + await sender.StopAsync(cancellationToken); } } } diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index 5977cf159d..ae20ab1dd0 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -211,6 +211,23 @@ namespace Volo.Abp.EventBus.Kafka ); } + public override async Task ProcessRawAsync(string eventName, byte[] eventDataBytes) + { + var eventType = EventTypes.GetOrDefault(eventName); + if (eventType == null) + { + return; + } + + var eventData = Serializer.Deserialize(eventDataBytes, eventType); + var exceptions = new List(); + await TriggerHandlersAsync(eventType, eventData, exceptions); + if (exceptions.Any()) + { + ThrowOriginalExceptions(eventType, exceptions); + } + } + protected override byte[] Serialize(object eventData) { return Serializer.Serialize(eventData); diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 59fe5e4b99..d3d74a048c 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -123,7 +123,7 @@ namespace Volo.Abp.EventBus.RabbitMq retryAttempt = (int)ea.BasicProperties.Headers[EventErrorHandlerBase.RetryAttemptKey]; } - errorContext.EventData = Serializer.Deserialize(ea.Body.ToArray(), eventType); + errorContext.EventData = Serializer.Deserialize(eventBytes, eventType); errorContext.SetProperty(EventErrorHandlerBase.HeadersKey, ea.BasicProperties); errorContext.SetProperty(EventErrorHandlerBase.RetryAttemptKey, retryAttempt); }); @@ -217,6 +217,25 @@ namespace Volo.Abp.EventBus.RabbitMq return PublishAsync(eventName, eventData, null, eventId: eventId); } + public override async Task ProcessRawAsync(string eventName, byte[] eventDataBytes) + { + //TODO: We have a duplication in logic and also with the kafka side! + + var eventType = EventTypes.GetOrDefault(eventName); + if (eventType == null) + { + return; + } + + var eventData = Serializer.Deserialize(eventDataBytes, eventType); + var exceptions = new List(); + await TriggerHandlersAsync(eventType, eventData, exceptions); + if (exceptions.Any()) + { + ThrowOriginalExceptions(eventType, exceptions); + } + } + protected override byte[] Serialize(object eventData) { return Serializer.Serialize(eventData); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 07995d67dd..bbe80d9866 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -194,6 +194,12 @@ namespace Volo.Abp.EventBus.Rebus throw new NotImplementedException(); } + public override Task ProcessRawAsync(string eventName, byte[] eventDataBytes) + { + /* TODO: IMPLEMENT! */ + throw new NotImplementedException(); + } + protected override byte[] Serialize(object eventData) { return Serializer.Serialize(eventData); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index dd4ca189ab..a436294e88 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -81,6 +81,7 @@ namespace Volo.Abp.EventBus.Distributed } public abstract Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData); + public abstract Task ProcessRawAsync(string eventName, byte[] eventDataBytes); private async Task AddToOutboxAsync(Type eventType, object eventData) { @@ -128,6 +129,7 @@ namespace Volo.Abp.EventBus.Distributed if (inboxConfig.EventSelector == null || inboxConfig.EventSelector(eventType)) { var eventInbox = (IEventInbox) scope.ServiceProvider.GetRequiredService(inboxConfig.ImplementationType); + //TODO: Check if event was received before!! await eventInbox.EnqueueAsync( new IncomingEventInfo( GuidGenerator.Create(), diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs index dddedab2c0..137a410afa 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Threading.Tasks; namespace Volo.Abp.EventBus.Distributed @@ -8,5 +9,7 @@ namespace Volo.Abp.EventBus.Distributed Task EnqueueAsync(IncomingEventInfo incomingEvent); Task> GetWaitingEventsAsync(int maxCount); + + Task MarkAsProcessedAsync(Guid id); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs index f53eb2b78b..5f96b818b7 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs @@ -3,11 +3,16 @@ using System.Threading.Tasks; namespace Volo.Abp.EventBus.Distributed { - public interface IRawEventPublisher + public interface IRawEventPublisher //TODO: Rename: ISupportsEventBoxes { Task PublishRawAsync( Guid eventId, string eventName, byte[] eventData); + + Task ProcessRawAsync( + string eventName, + byte[] eventDataBytes + ); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs index c8b7eb6790..c4a61b24a6 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs @@ -162,6 +162,19 @@ namespace Volo.Abp.EventBus } } } + + protected void ThrowOriginalExceptions(Type eventType, List exceptions) + { + if (exceptions.Count == 1) + { + exceptions[0].ReThrow(); + } + + throw new AggregateException( + "More than one error has occurred while triggering the event: " + eventType, + exceptions + ); + } protected virtual void SubscribeHandlers(ITypeList handlers) { diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs new file mode 100644 index 0000000000..02404db39f --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs @@ -0,0 +1,155 @@ +// +using System; +using DistDemoApp; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +namespace DistDemoApp.Migrations +{ + [DbContext(typeof(TodoDbContext))] + [Migration("20210909182251_Added_Inbox_Process_Columns")] + partial class Added_Inbox_Process_Columns + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.9") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("DistDemoApp.TodoItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.ToTable("TodoItems"); + }); + + modelBuilder.Entity("DistDemoApp.TodoSummary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Day") + .HasColumnType("tinyint"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Month") + .HasColumnType("tinyint"); + + b.Property("TotalCount") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("TodoSummaries"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.IncomingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Processed") + .HasColumnType("bit"); + + b.Property("ProcessedTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("AbpEventInbox"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventOutbox"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs b/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs new file mode 100644 index 0000000000..7da910a1af --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs @@ -0,0 +1,35 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DistDemoApp.Migrations +{ + public partial class Added_Inbox_Process_Columns : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Processed", + table: "AbpEventInbox", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "ProcessedTime", + table: "AbpEventInbox", + type: "datetime2", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Processed", + table: "AbpEventInbox"); + + migrationBuilder.DropColumn( + name: "ProcessedTime", + table: "AbpEventInbox"); + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs index 3423520512..87cf72bfd0 100644 --- a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs +++ b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs @@ -110,6 +110,12 @@ namespace DistDemoApp.Migrations .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); + b.Property("Processed") + .HasColumnType("bit"); + + b.Property("ProcessedTime") + .HasColumnType("datetime2"); + b.HasKey("Id"); b.ToTable("AbpEventInbox"); From 2aa45fe208f79909312471d5da0d82b7291503e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Sep 2021 11:43:53 +0300 Subject: [PATCH 13/55] Check handlerselector for inbox event processing --- .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 2 +- .../Abp/EventBus/Kafka/KafkaDistributedEventBus.cs | 4 ++-- .../RabbitMq/RabbitMqDistributedEventBus.cs | 4 ++-- .../Abp/EventBus/Rebus/RebusDistributedEventBus.cs | 2 +- .../EventBus/Distributed/DistributedEventBusBase.cs | 2 +- .../Abp/EventBus/Distributed/IRawEventPublisher.cs | 4 ++-- .../Volo/Abp/EventBus/EventBusBase.cs | 13 ++++++++++--- 7 files changed, 19 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index 4725e85d51..b1e6a1492b 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -85,7 +85,7 @@ namespace Volo.Abp.EventBus.Boxes { await DistributedEventBus .AsRawEventPublisher() - .ProcessRawAsync(waitingEvent.EventName, waitingEvent.EventData); + .ProcessRawAsync(InboxConfig, waitingEvent.EventName, waitingEvent.EventData); /* await DistributedEventBus diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index ae20ab1dd0..e587dc9749 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -211,7 +211,7 @@ namespace Volo.Abp.EventBus.Kafka ); } - public override async Task ProcessRawAsync(string eventName, byte[] eventDataBytes) + public override async Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes) { var eventType = EventTypes.GetOrDefault(eventName); if (eventType == null) @@ -221,7 +221,7 @@ namespace Volo.Abp.EventBus.Kafka var eventData = Serializer.Deserialize(eventDataBytes, eventType); var exceptions = new List(); - await TriggerHandlersAsync(eventType, eventData, exceptions); + await TriggerHandlersAsync(eventType, eventData, exceptions, inboxConfig); if (exceptions.Any()) { ThrowOriginalExceptions(eventType, exceptions); diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index d3d74a048c..eb171f7ffb 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -217,7 +217,7 @@ namespace Volo.Abp.EventBus.RabbitMq return PublishAsync(eventName, eventData, null, eventId: eventId); } - public override async Task ProcessRawAsync(string eventName, byte[] eventDataBytes) + public override async Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes) { //TODO: We have a duplication in logic and also with the kafka side! @@ -229,7 +229,7 @@ namespace Volo.Abp.EventBus.RabbitMq var eventData = Serializer.Deserialize(eventDataBytes, eventType); var exceptions = new List(); - await TriggerHandlersAsync(eventType, eventData, exceptions); + await TriggerHandlersAsync(eventType, eventData, exceptions, inboxConfig); if (exceptions.Any()) { ThrowOriginalExceptions(eventType, exceptions); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index bbe80d9866..af3d148ecf 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -194,7 +194,7 @@ namespace Volo.Abp.EventBus.Rebus throw new NotImplementedException(); } - public override Task ProcessRawAsync(string eventName, byte[] eventDataBytes) + public override Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes) { /* TODO: IMPLEMENT! */ throw new NotImplementedException(); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index a436294e88..8de449058b 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -81,7 +81,7 @@ namespace Volo.Abp.EventBus.Distributed } public abstract Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData); - public abstract Task ProcessRawAsync(string eventName, byte[] eventDataBytes); + public abstract Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes); private async Task AddToOutboxAsync(Type eventType, object eventData) { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs index 5f96b818b7..4505239ade 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs @@ -11,8 +11,8 @@ namespace Volo.Abp.EventBus.Distributed byte[] eventData); Task ProcessRawAsync( + InboxConfig inboxConfig, string eventName, - byte[] eventDataBytes - ); + byte[] eventDataBytes); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs index c4a61b24a6..694166b1bc 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs @@ -134,7 +134,7 @@ namespace Volo.Abp.EventBus } } - protected virtual async Task TriggerHandlersAsync(Type eventType, object eventData , List exceptions) + protected virtual async Task TriggerHandlersAsync(Type eventType, object eventData, List exceptions, InboxConfig inboxConfig = null) { await new SynchronizationContextRemover(); @@ -142,7 +142,7 @@ namespace Volo.Abp.EventBus { foreach (var handlerFactory in handlerFactories.EventHandlerFactories) { - await TriggerHandlerAsync(handlerFactory, handlerFactories.EventType, eventData, exceptions); + await TriggerHandlerAsync(handlerFactory, handlerFactories.EventType, eventData, exceptions, inboxConfig); } } @@ -199,7 +199,8 @@ namespace Volo.Abp.EventBus protected abstract IEnumerable GetHandlerFactories(Type eventType); - protected virtual async Task TriggerHandlerAsync(IEventHandlerFactory asyncHandlerFactory, Type eventType, object eventData, List exceptions) + protected virtual async Task TriggerHandlerAsync(IEventHandlerFactory asyncHandlerFactory, Type eventType, + object eventData, List exceptions, InboxConfig inboxConfig = null) { using (var eventHandlerWrapper = asyncHandlerFactory.GetHandler()) { @@ -207,6 +208,12 @@ namespace Volo.Abp.EventBus { var handlerType = eventHandlerWrapper.EventHandler.GetType(); + if (inboxConfig?.HandlerSelector != null && + !inboxConfig.HandlerSelector(handlerType)) + { + return; + } + using (CurrentTenant.Change(GetEventDataTenantId(eventData))) { if (ReflectionHelper.IsAssignableToGenericType(handlerType, typeof(ILocalEventHandler<>))) From eb47e508960f0cfb931232738a9d0460f85cb1a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Sep 2021 13:34:28 +0300 Subject: [PATCH 14/55] Apply ABP concepts on state change, not on savechanges. --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 37 +++++-------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index b86f9b83b1..62c8f84d38 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -162,7 +162,7 @@ namespace Volo.Abp.EntityFrameworkCore entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList()); } - ApplyAbpConcepts(); + HandleExtraPropertiesOnSave(); var eventReport = CreateEventReport(); @@ -291,10 +291,12 @@ namespace Volo.Abp.EntityFrameworkCore switch (entry.State) { case EntityState.Added: + ApplyAbpConceptsForAddedEntity(entry); EntityChangeEventHelper.PublishEntityCreatingEvent(entry.Entity); EntityChangeEventHelper.PublishEntityCreatedEvent(entry.Entity); break; case EntityState.Modified: + ApplyAbpConceptsForModifiedEntity(entry); if (entry.Properties.Any(x => x.IsModified && x.Metadata.ValueGenerated == ValueGenerated.Never)) { if (entry.Entity is ISoftDelete && entry.Entity.As().IsDeleted) @@ -311,17 +313,18 @@ namespace Volo.Abp.EntityFrameworkCore break; case EntityState.Deleted: + ApplyAbpConceptsForDeletedEntity(entry); EntityChangeEventHelper.PublishEntityDeletingEvent(entry.Entity); EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity); break; } } - protected virtual void ApplyAbpConcepts() + protected virtual void HandleExtraPropertiesOnSave() { foreach (var entry in ChangeTracker.Entries().ToList()) { - ApplyAbpConcepts(entry); + HandleExtraPropertiesOnSave(entry); } } @@ -369,24 +372,6 @@ namespace Volo.Abp.EntityFrameworkCore return eventReport; } - - protected virtual void ApplyAbpConcepts(EntityEntry entry) - { - switch (entry.State) - { - case EntityState.Added: - ApplyAbpConceptsForAddedEntity(entry); - break; - case EntityState.Modified: - ApplyAbpConceptsForModifiedEntity(entry); - break; - case EntityState.Deleted: - ApplyAbpConceptsForDeletedEntity(entry); - break; - } - - HandleExtraPropertiesOnSave(entry); - } protected virtual void HandleExtraPropertiesOnSave(EntityEntry entry) { @@ -485,11 +470,7 @@ namespace Volo.Abp.EntityFrameworkCore protected virtual void ApplyAbpConceptsForDeletedEntity(EntityEntry entry) { - if (TryCancelDeletionForSoftDelete(entry)) - { - UpdateConcurrencyStamp(entry); - SetDeletionAuditProperties(entry); - } + TryCancelDeletionForSoftDelete(entry); } protected virtual bool IsHardDeleted(EntityEntry entry) @@ -510,7 +491,7 @@ namespace Volo.Abp.EntityFrameworkCore { return; } - + Entry(entity).Property(x => x.ConcurrencyStamp).OriginalValue = entity.ConcurrencyStamp; entity.ConcurrencyStamp = Guid.NewGuid().ToString("N"); } @@ -544,8 +525,8 @@ namespace Volo.Abp.EntityFrameworkCore } entry.Reload(); - entry.State = EntityState.Modified; entry.Entity.As().IsDeleted = true; + entry.State = EntityState.Modified; return true; } From 51ce477165843aa975034a6c47cd24b1351ef4bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Sep 2021 14:30:10 +0300 Subject: [PATCH 15/55] Eliminate duplicate incoming events --- .../DistributedEvents/DbContextEventInbox.cs | 27 ++- ...entInboxDbContextModelBuilderExtensions.cs | 3 + .../DistributedEvents/IncomingEventRecord.cs | 4 + .../Kafka/KafkaDistributedEventBus.cs | 13 +- .../RabbitMq/RabbitMqDistributedEventBus.cs | 10 +- .../Distributed/DistributedEventBusBase.cs | 12 +- .../Abp/EventBus/Distributed/IEventInbox.cs | 4 + .../EventBus/Distributed/IncomingEventInfo.cs | 4 + ...910111009_Added_Inbox_New_Cols.Designer.cs | 162 ++++++++++++++++++ .../20210910111009_Added_Inbox_New_Cols.cs | 41 +++++ .../Migrations/TodoDbContextModelSnapshot.cs | 7 + 11 files changed, 276 insertions(+), 11 deletions(-) create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs create mode 100644 test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index df45d50ae5..f5f1d7010e 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -26,7 +26,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents [UnitOfWork] public virtual async Task EnqueueAsync(IncomingEventInfo incomingEvent) { - var dbContext = (IHasEventInbox) await DbContextProvider.GetDbContextAsync(); + var dbContext = await GetDbContextAsync(); + dbContext.IncomingEvents.Add( new IncomingEventRecord(incomingEvent) ); @@ -35,8 +36,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents [UnitOfWork] public virtual async Task> GetWaitingEventsAsync(int maxCount) { - var dbContext = (IHasEventInbox) await DbContextProvider.GetDbContextAsync(); - + var dbContext = await GetDbContextAsync(); + var outgoingEventRecords = await dbContext .IncomingEvents .AsNoTracking() @@ -50,15 +51,33 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents .ToList(); } + [UnitOfWork] public async Task MarkAsProcessedAsync(Guid id) { //TODO: Optimize? - var dbContext = (IHasEventInbox) await DbContextProvider.GetDbContextAsync(); + var dbContext = await GetDbContextAsync(); var incomingEvent = await dbContext.IncomingEvents.FindAsync(id); if (incomingEvent != null) { incomingEvent.MarkAsProcessed(Clock.Now); } } + + [UnitOfWork] + public async Task ExistsByMessageIdAsync(string messageId) + { + var dbContext = await GetDbContextAsync(); + return await dbContext.IncomingEvents.AnyAsync(x => x.MessageId == messageId); + } + + private async Task GetDbContextAsync() + { + return (IHasEventInbox)await DbContextProvider.GetDbContextAsync(); + } + + public Task DeleteOldEventsAsync() + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs index d3e3a6cc26..29c9f0042c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs @@ -15,6 +15,9 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents b.ConfigureByConvention(); b.Property(x => x.EventName).IsRequired().HasMaxLength(IncomingEventRecord.MaxEventNameLength); b.Property(x => x.EventData).IsRequired(); + + b.HasIndex(x => new { x.Processed, x.CreationTime }); + b.HasIndex(x => x.MessageId); }); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs index 62c2781b48..a1f971bbaa 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs @@ -15,6 +15,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public ExtraPropertyDictionary ExtraProperties { get; private set; } + public string MessageId { get; private set; } + public string EventName { get; private set; } public byte[] EventData { get; private set; } @@ -35,6 +37,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents IncomingEventInfo eventInfo) : base(eventInfo.Id) { + MessageId = eventInfo.MessageId; EventName = eventInfo.EventName; EventData = eventInfo.EventData; CreationTime = eventInfo.CreationTime; @@ -47,6 +50,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { return new IncomingEventInfo( Id, + MessageId, EventName, EventData, CreationTime diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index e587dc9749..3ffe3bb880 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -86,8 +86,15 @@ namespace Volo.Abp.EventBus.Kafka { return; } + + string messageId = null; + + if (message.Headers.TryGetLastBytes("messageId", out var messageIdBytes)) + { + messageId = System.Text.Encoding.UTF8.GetString(messageIdBytes); + } - if (await AddToInboxAsync(eventName, eventType, message.Value)) + if (await AddToInboxAsync(messageId, eventName, eventType, message.Value)) { return; } @@ -183,7 +190,7 @@ namespace Volo.Abp.EventBus.Kafka eventData, new Headers { - { "messageId", Serializer.Serialize(Guid.NewGuid()) } + { "messageId", System.Text.Encoding.UTF8.GetBytes(Guid.NewGuid().ToString("N")) } }, null ); @@ -205,7 +212,7 @@ namespace Volo.Abp.EventBus.Kafka eventData, new Headers { - { "messageId", Serializer.Serialize(eventId) } + { "messageId", System.Text.Encoding.UTF8.GetBytes(eventId.ToString("N")) } }, null ); diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index eb171f7ffb..deb20b5ff3 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -106,8 +106,8 @@ namespace Volo.Abp.EventBus.RabbitMq } var eventBytes = ea.Body.ToArray(); - - if (await AddToInboxAsync(eventName, eventType, eventBytes)) + + if (await AddToInboxAsync(ea.BasicProperties.MessageId, eventName, eventType, eventBytes)) { return; } @@ -268,9 +268,13 @@ namespace Volo.Abp.EventBus.RabbitMq { properties = channel.CreateBasicProperties(); properties.DeliveryMode = RabbitMqConsts.DeliveryModes.Persistent; - properties.MessageId = (eventId ?? GuidGenerator.Create()).ToString("N"); } + if (properties.MessageId.IsNullOrEmpty()) + { + properties.MessageId = (eventId ?? GuidGenerator.Create()).ToString("N"); + } + SetEventMessageHeaders(properties, headersArguments); channel.BasicPublish( diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 8de449058b..1fdaf0d26f 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -113,6 +113,7 @@ namespace Volo.Abp.EventBus.Distributed } protected async Task AddToInboxAsync( + string messageId, string eventName, Type eventType, byte[] eventBytes) @@ -129,10 +130,19 @@ namespace Volo.Abp.EventBus.Distributed if (inboxConfig.EventSelector == null || inboxConfig.EventSelector(eventType)) { var eventInbox = (IEventInbox) scope.ServiceProvider.GetRequiredService(inboxConfig.ImplementationType); - //TODO: Check if event was received before!! + + if (!messageId.IsNullOrEmpty()) + { + if (await eventInbox.ExistsByMessageIdAsync(messageId)) + { + continue; + } + } + await eventInbox.EnqueueAsync( new IncomingEventInfo( GuidGenerator.Create(), + messageId, eventName, eventBytes, Clock.Now diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs index 137a410afa..bee802a126 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs @@ -11,5 +11,9 @@ namespace Volo.Abp.EventBus.Distributed Task> GetWaitingEventsAsync(int maxCount); Task MarkAsProcessedAsync(Guid id); + + Task ExistsByMessageIdAsync(string messageId); + + Task DeleteOldEventsAsync(); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs index 7cd628cf91..571c62602b 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs @@ -11,6 +11,8 @@ namespace Volo.Abp.EventBus.Distributed public Guid Id { get; } + public string MessageId { get; } + public string EventName { get; } public byte[] EventData { get; } @@ -25,11 +27,13 @@ namespace Volo.Abp.EventBus.Distributed public IncomingEventInfo( Guid id, + string messageId, string eventName, byte[] eventData, DateTime creationTime) { Id = id; + MessageId = messageId; EventName = Check.NotNullOrWhiteSpace(eventName, nameof(eventName), MaxEventNameLength); EventData = eventData; CreationTime = creationTime; diff --git a/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs new file mode 100644 index 0000000000..7b552dfcfc --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs @@ -0,0 +1,162 @@ +// +using System; +using DistDemoApp; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +namespace DistDemoApp.Migrations +{ + [DbContext(typeof(TodoDbContext))] + [Migration("20210910111009_Added_Inbox_New_Cols")] + partial class Added_Inbox_New_Cols + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.9") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("DistDemoApp.TodoItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.ToTable("TodoItems"); + }); + + modelBuilder.Entity("DistDemoApp.TodoSummary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Day") + .HasColumnType("tinyint"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Month") + .HasColumnType("tinyint"); + + b.Property("TotalCount") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("TodoSummaries"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.IncomingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MessageId") + .HasColumnType("nvarchar(450)"); + + b.Property("Processed") + .HasColumnType("bit"); + + b.Property("ProcessedTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.HasIndex("Processed", "CreationTime"); + + b.ToTable("AbpEventInbox"); + }); + + modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EventData") + .IsRequired() + .HasColumnType("varbinary(max)"); + + b.Property("EventName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.HasKey("Id"); + + b.ToTable("AbpEventOutbox"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs b/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs new file mode 100644 index 0000000000..24f65ff23c --- /dev/null +++ b/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs @@ -0,0 +1,41 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DistDemoApp.Migrations +{ + public partial class Added_Inbox_New_Cols : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "MessageId", + table: "AbpEventInbox", + type: "nvarchar(450)", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpEventInbox_MessageId", + table: "AbpEventInbox", + column: "MessageId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEventInbox_Processed_CreationTime", + table: "AbpEventInbox", + columns: new[] { "Processed", "CreationTime" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AbpEventInbox_MessageId", + table: "AbpEventInbox"); + + migrationBuilder.DropIndex( + name: "IX_AbpEventInbox_Processed_CreationTime", + table: "AbpEventInbox"); + + migrationBuilder.DropColumn( + name: "MessageId", + table: "AbpEventInbox"); + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs index 87cf72bfd0..57e8c14442 100644 --- a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs +++ b/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs @@ -110,6 +110,9 @@ namespace DistDemoApp.Migrations .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); + b.Property("MessageId") + .HasColumnType("nvarchar(450)"); + b.Property("Processed") .HasColumnType("bit"); @@ -118,6 +121,10 @@ namespace DistDemoApp.Migrations b.HasKey("Id"); + b.HasIndex("MessageId"); + + b.HasIndex("Processed", "CreationTime"); + b.ToTable("AbpEventInbox"); }); From 4e0e0de1d73c372a4ef74046e3a0dc595db3553d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Sep 2021 15:42:21 +0300 Subject: [PATCH 16/55] Regularly delete old events --- .../DistributedEvents/DbContextEventInbox.cs | 25 +++++++++-------- .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 28 +++++++++++++++---- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index f5f1d7010e..2b0a448f74 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents [UnitOfWork] public virtual async Task EnqueueAsync(IncomingEventInfo incomingEvent) { - var dbContext = await GetDbContextAsync(); + var dbContext = await DbContextProvider.GetDbContextAsync(); dbContext.IncomingEvents.Add( new IncomingEventRecord(incomingEvent) @@ -36,7 +36,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents [UnitOfWork] public virtual async Task> GetWaitingEventsAsync(int maxCount) { - var dbContext = await GetDbContextAsync(); + var dbContext = await DbContextProvider.GetDbContextAsync(); var outgoingEventRecords = await dbContext .IncomingEvents @@ -55,7 +55,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public async Task MarkAsProcessedAsync(Guid id) { //TODO: Optimize? - var dbContext = await GetDbContextAsync(); + var dbContext = await DbContextProvider.GetDbContextAsync(); var incomingEvent = await dbContext.IncomingEvents.FindAsync(id); if (incomingEvent != null) { @@ -66,18 +66,21 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents [UnitOfWork] public async Task ExistsByMessageIdAsync(string messageId) { - var dbContext = await GetDbContextAsync(); + //TODO: Optimize + var dbContext = await DbContextProvider.GetDbContextAsync(); return await dbContext.IncomingEvents.AnyAsync(x => x.MessageId == messageId); } - private async Task GetDbContextAsync() - { - return (IHasEventInbox)await DbContextProvider.GetDbContextAsync(); - } - - public Task DeleteOldEventsAsync() + [UnitOfWork] + public async Task DeleteOldEventsAsync() { - throw new NotImplementedException(); + //TODO: Optimize + var dbContext = await DbContextProvider.GetDbContextAsync(); + var timeToKeepEvents = Clock.Now.AddHours(-2); //TODO: Config? + var oldEvents = await dbContext.IncomingEvents + .Where(x => x.Processed && x.CreationTime < timeToKeepEvents) + .ToListAsync(); + dbContext.IncomingEvents.RemoveRange(oldEvents); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index b1e6a1492b..bba97fe3d6 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Threading; +using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.EventBus.Boxes @@ -19,9 +20,12 @@ namespace Volo.Abp.EventBus.Boxes protected IDistributedEventBus DistributedEventBus { get; } protected IDistributedLockProvider DistributedLockProvider { get; } protected IUnitOfWorkManager UnitOfWorkManager { get; } + protected IClock Clock { get; } protected IEventInbox Inbox { get; private set; } protected InboxConfig InboxConfig { get; private set; } + protected DateTime? LastCleanTime { get; set; } + protected string DistributedLockName => "Inbox_" + InboxConfig.Name; public ILogger Logger { get; set; } @@ -30,13 +34,15 @@ namespace Volo.Abp.EventBus.Boxes AbpTimer timer, IDistributedEventBus distributedEventBus, IDistributedLockProvider distributedLockProvider, - IUnitOfWorkManager unitOfWorkManager) + IUnitOfWorkManager unitOfWorkManager, + IClock clock) { ServiceProvider = serviceProvider; Timer = timer; DistributedEventBus = distributedEventBus; DistributedLockProvider = distributedLockProvider; UnitOfWorkManager = unitOfWorkManager; + Clock = clock; Timer.Period = 2000; //TODO: Config? Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; @@ -69,6 +75,8 @@ namespace Volo.Abp.EventBus.Boxes { Logger.LogDebug("Obtained the distributed lock: " + DistributedLockName); + await DeleteOldEventsAsync(); + while (true) { var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config? @@ -87,12 +95,8 @@ namespace Volo.Abp.EventBus.Boxes .AsRawEventPublisher() .ProcessRawAsync(InboxConfig, waitingEvent.EventName, waitingEvent.EventData); - /* - await DistributedEventBus - .AsRawEventPublisher() - .PublishRawAsync(waitingEvent.Id, waitingEvent.EventName, waitingEvent.EventData); - */ await Inbox.MarkAsProcessedAsync(waitingEvent.Id); + await uow.CompleteAsync(); } @@ -107,5 +111,17 @@ namespace Volo.Abp.EventBus.Boxes } } } + + protected virtual async Task DeleteOldEventsAsync() + { + if (LastCleanTime != null && LastCleanTime > Clock.Now.AddHours(6)) //TODO: Config? + { + return; + } + + await Inbox.DeleteOldEventsAsync(); + + LastCleanTime = DateTime.Now; + } } } \ No newline at end of file From 3b7d1514a9f089383126df8445b38e06f01cd8c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Sep 2021 17:28:03 +0300 Subject: [PATCH 17/55] Added initial mongodb boxing services --- .../Repositories/MongoDB/MongoDbRepository.cs | 3 +- .../Volo/Abp/MongoDB/AbpMongoDbModule.cs | 11 ++++ .../DistributedEvents/DbContextEventInbox.cs | 36 ++++++++++ .../DistributedEvents/DbContextEventOutbox.cs | 27 ++++++++ .../DistributedEvents/IDbContextEventInbox.cs | 10 +++ .../IDbContextEventOutbox.cs | 10 +++ .../DistributedEvents/IHasEventInbox.cs | 9 +++ .../DistributedEvents/IHasEventOutbox.cs | 9 +++ .../DistributedEvents/IncomingEventRecord.cs | 66 +++++++++++++++++++ .../DistributedEvents/OutgoingEventRecord.cs | 52 +++++++++++++++ 10 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index a40117e0ff..a90549cf5d 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -570,12 +570,13 @@ namespace Volo.Abp.Domain.Repositories.MongoDB ); } - protected virtual async Task ApplyAbpConceptsForAddedEntityAsync(TEntity entity) + protected virtual Task ApplyAbpConceptsForAddedEntityAsync(TEntity entity) { CheckAndSetId(entity); SetCreationAuditProperties(entity); TriggerEntityCreateEvents(entity); TriggerDomainEvents(entity); + return Task.CompletedTask; } private void TriggerEntityCreateEvents(TEntity entity) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs index d32f015a33..9a5d327055 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs @@ -5,6 +5,7 @@ using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.Modularity; using Volo.Abp.MongoDB.DependencyInjection; using Volo.Abp.Uow.MongoDB; +using Volo.Abp.MongoDB.DistributedEvents; namespace Volo.Abp.MongoDB { @@ -32,6 +33,16 @@ namespace Volo.Abp.MongoDB typeof(IMongoDbRepositoryFilterer<,>), typeof(MongoDbRepositoryFilterer<,>) ); + + context.Services.AddTransient( + typeof(IDbContextEventOutbox<>), + typeof(DbContextEventOutbox<>) + ); + + context.Services.AddTransient( + typeof(IDbContextEventInbox<>), + typeof(DbContextEventInbox<>) + ); } } } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs new file mode 100644 index 0000000000..955f142add --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public class DbContextEventInbox : IDbContextEventInbox + where TDbContext : IHasEventInbox + { + public Task EnqueueAsync(IncomingEventInfo incomingEvent) + { + throw new NotImplementedException(); + } + + public Task> GetWaitingEventsAsync(int maxCount) + { + throw new NotImplementedException(); + } + + public Task MarkAsProcessedAsync(Guid id) + { + throw new NotImplementedException(); + } + + public Task ExistsByMessageIdAsync(string messageId) + { + throw new NotImplementedException(); + } + + public Task DeleteOldEventsAsync() + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventOutbox.cs new file mode 100644 index 0000000000..3b054732be --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventOutbox.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Uow; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public class DbContextEventOutbox : IDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + public Task EnqueueAsync(OutgoingEventInfo outgoingEvent) + { + throw new NotImplementedException(); + } + + public Task> GetWaitingEventsAsync(int maxCount) + { + throw new NotImplementedException(); + } + + public Task DeleteAsync(Guid id) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventInbox.cs new file mode 100644 index 0000000000..d76bac2412 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventInbox.cs @@ -0,0 +1,10 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public interface IDbContextEventInbox : IEventInbox + where TDbContext : IHasEventInbox + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventOutbox.cs new file mode 100644 index 0000000000..bcc0a4705a --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventOutbox.cs @@ -0,0 +1,10 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public interface IDbContextEventOutbox : IEventOutbox + where TDbContext : IHasEventOutbox + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs new file mode 100644 index 0000000000..387e860bce --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs @@ -0,0 +1,9 @@ +using MongoDB.Driver; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public interface IHasEventInbox : IAbpMongoDbContext + { + IMongoCollection IncomingEvents { get; set; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs new file mode 100644 index 0000000000..cf57aaa699 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs @@ -0,0 +1,9 @@ +using MongoDB.Driver; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public interface IHasEventOutbox : IAbpMongoDbContext + { + IMongoCollection OutgoingEvents { get; set; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs new file mode 100644 index 0000000000..5e9d07c33f --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs @@ -0,0 +1,66 @@ +using System; +using Volo.Abp.Auditing; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public class IncomingEventRecord : + BasicAggregateRoot, + IHasExtraProperties, + IHasCreationTime + { + public static int MaxEventNameLength { get; set; } = 256; + + public ExtraPropertyDictionary ExtraProperties { get; private set; } + + public string MessageId { get; private set; } + + public string EventName { get; private set; } + + public byte[] EventData { get; private set; } + + public DateTime CreationTime { get; private set; } + + public bool Processed { get; set; } + + public DateTime? ProcessedTime { get; set; } + + protected IncomingEventRecord() + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public IncomingEventRecord( + IncomingEventInfo eventInfo) + : base(eventInfo.Id) + { + MessageId = eventInfo.MessageId; + EventName = eventInfo.EventName; + EventData = eventInfo.EventData; + CreationTime = eventInfo.CreationTime; + + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public IncomingEventInfo ToIncomingEventInfo() + { + return new IncomingEventInfo( + Id, + MessageId, + EventName, + EventData, + CreationTime + ); + } + + public void MarkAsProcessed(DateTime processedTime) + { + Processed = true; + ProcessedTime = processedTime; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs new file mode 100644 index 0000000000..c38de0cd91 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/OutgoingEventRecord.cs @@ -0,0 +1,52 @@ +using System; +using Volo.Abp.Auditing; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities; +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public class OutgoingEventRecord : + BasicAggregateRoot, + IHasExtraProperties, + IHasCreationTime + { + public static int MaxEventNameLength { get; set; } = 256; + + public ExtraPropertyDictionary ExtraProperties { get; private set; } + + public string EventName { get; private set; } + + public byte[] EventData { get; private set; } + + public DateTime CreationTime { get; private set; } + + protected OutgoingEventRecord() + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public OutgoingEventRecord( + OutgoingEventInfo eventInfo) + : base(eventInfo.Id) + { + EventName = eventInfo.EventName; + EventData = eventInfo.EventData; + CreationTime = eventInfo.CreationTime; + + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public OutgoingEventInfo ToOutgoingEventInfo() + { + return new OutgoingEventInfo( + Id, + EventName, + EventData, + CreationTime + ); + } + } +} \ No newline at end of file From 59dada8814dabd022061d16206120361a91bf467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Sep 2021 18:29:18 +0300 Subject: [PATCH 18/55] Refactored the example solution. Added mongodb extensions --- .../Volo/Abp/MongoDB/AbpMongoDbModule.cs | 8 +- .../DistributedEvents/DbContextEventInbox.cs | 36 ---- ...tInbox.cs => IMongoDbContextEventInbox.cs} | 2 +- ...utbox.cs => IMongoDbContextEventOutbox.cs} | 2 +- .../MongoDbContextEventInbox.cs | 81 +++++++++ ...Outbox.cs => MongoDbContextEventOutbox.cs} | 4 +- .../MongoDbInboxConfigExtensions.cs | 13 ++ .../MongoDbOutboxConfigExtensions.cs | 13 ++ .../DistDemoApp.EfCoreRabbitMq.csproj} | 13 +- .../DistDemoAppEfCoreRabbitMqModule.cs} | 27 +-- ...910152547_Added_Boxes_Initial.Designer.cs} | 4 +- .../20210910152547_Added_Boxes_Initial.cs | 103 ++++++++++++ .../Migrations/TodoDbContextModelSnapshot.cs | 0 .../Program.cs | 2 +- .../TodoDbContext.cs | 0 .../TodoDbContextFactory.cs | 0 .../appsettings.json | 0 .../DistDemoApp.MongoDbKafka.csproj | 9 + .../DistDemoApp.MongoDbKafka/Program.cs | 12 ++ .../DemoService.cs | 0 .../DistDemoApp.Shared.csproj | 23 +++ .../DistDemoAppHostedService.cs} | 4 +- .../DistDemoAppSharedModule.cs | 39 +++++ .../TodoEventHandler.cs | 0 .../TodoItem.cs | 0 .../TodoItemEto.cs | 0 .../TodoItemObjectMapper.cs | 0 .../TodoSummary.cs | 0 .../20210825110134_Initial.Designer.cs | 61 ------- .../Migrations/20210825110134_Initial.cs | 33 ---- ...0825112717_Added_Summary_Table.Designer.cs | 95 ----------- .../20210825112717_Added_Summary_Table.cs | 34 ---- .../20210908063422_Added_Outbox.Designer.cs | 118 ------------- .../Migrations/20210908063422_Added_Outbox.cs | 31 ---- ...5344_Added_Outbox_CreationTime.Designer.cs | 122 -------------- ...0210908075344_Added_Outbox_CreationTime.cs | 25 --- .../20210909113934_Added_Inbox.Designer.cs | 149 ----------------- .../Migrations/20210909113934_Added_Inbox.cs | 32 ---- ...51_Added_Inbox_Process_Columns.Designer.cs | 155 ------------------ ...10909182251_Added_Inbox_Process_Columns.cs | 35 ---- .../20210910111009_Added_Inbox_New_Cols.cs | 41 ----- test/DistEvents/DistEventsDemo.sln | 14 +- 42 files changed, 323 insertions(+), 1017 deletions(-) delete mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs rename framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/{IDbContextEventInbox.cs => IMongoDbContextEventInbox.cs} (66%) rename framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/{IDbContextEventOutbox.cs => IMongoDbContextEventOutbox.cs} (66%) create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs rename framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/{DbContextEventOutbox.cs => MongoDbContextEventOutbox.cs} (79%) create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbOutboxConfigExtensions.cs rename test/DistEvents/{DistDemoApp/DistDemoApp.csproj => DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj} (58%) rename test/DistEvents/{DistDemoApp/DistDemoAppModule.cs => DistDemoApp.EfCoreRabbitMq/DistDemoAppEfCoreRabbitMqModule.cs} (54%) rename test/DistEvents/{DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs => DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.Designer.cs} (98%) create mode 100644 test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.cs rename test/DistEvents/{DistDemoApp => DistDemoApp.EfCoreRabbitMq}/Migrations/TodoDbContextModelSnapshot.cs (100%) rename test/DistEvents/{DistDemoApp => DistDemoApp.EfCoreRabbitMq}/Program.cs (95%) rename test/DistEvents/{DistDemoApp => DistDemoApp.EfCoreRabbitMq}/TodoDbContext.cs (100%) rename test/DistEvents/{DistDemoApp => DistDemoApp.EfCoreRabbitMq}/TodoDbContextFactory.cs (100%) rename test/DistEvents/{DistDemoApp => DistDemoApp.EfCoreRabbitMq}/appsettings.json (100%) create mode 100644 test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj create mode 100644 test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs rename test/DistEvents/{DistDemoApp => DistDemoApp.Shared}/DemoService.cs (100%) create mode 100644 test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj rename test/DistEvents/{DistDemoApp/MyProjectNameHostedService.cs => DistDemoApp.Shared/DistDemoAppHostedService.cs} (90%) create mode 100644 test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs rename test/DistEvents/{DistDemoApp => DistDemoApp.Shared}/TodoEventHandler.cs (100%) rename test/DistEvents/{DistDemoApp => DistDemoApp.Shared}/TodoItem.cs (100%) rename test/DistEvents/{DistDemoApp => DistDemoApp.Shared}/TodoItemEto.cs (100%) rename test/DistEvents/{DistDemoApp => DistDemoApp.Shared}/TodoItemObjectMapper.cs (100%) rename test/DistEvents/{DistDemoApp => DistDemoApp.Shared}/TodoSummary.cs (100%) delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.Designer.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.Designer.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs delete mode 100644 test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs index 9a5d327055..7598066579 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs @@ -35,13 +35,13 @@ namespace Volo.Abp.MongoDB ); context.Services.AddTransient( - typeof(IDbContextEventOutbox<>), - typeof(DbContextEventOutbox<>) + typeof(IMongoDbContextEventOutbox<>), + typeof(MongoDbContextEventOutbox<>) ); context.Services.AddTransient( - typeof(IDbContextEventInbox<>), - typeof(DbContextEventInbox<>) + typeof(IMongoDbContextEventInbox<>), + typeof(MongoDbContextEventInbox<>) ); } } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs deleted file mode 100644 index 955f142add..0000000000 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventInbox.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp.EventBus.Distributed; - -namespace Volo.Abp.MongoDB.DistributedEvents -{ - public class DbContextEventInbox : IDbContextEventInbox - where TDbContext : IHasEventInbox - { - public Task EnqueueAsync(IncomingEventInfo incomingEvent) - { - throw new NotImplementedException(); - } - - public Task> GetWaitingEventsAsync(int maxCount) - { - throw new NotImplementedException(); - } - - public Task MarkAsProcessedAsync(Guid id) - { - throw new NotImplementedException(); - } - - public Task ExistsByMessageIdAsync(string messageId) - { - throw new NotImplementedException(); - } - - public Task DeleteOldEventsAsync() - { - throw new NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IMongoDbContextEventInbox.cs similarity index 66% rename from framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventInbox.cs rename to framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IMongoDbContextEventInbox.cs index d76bac2412..71e0d14562 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IMongoDbContextEventInbox.cs @@ -2,7 +2,7 @@ using Volo.Abp.EventBus.Distributed; namespace Volo.Abp.MongoDB.DistributedEvents { - public interface IDbContextEventInbox : IEventInbox + public interface IMongoDbContextEventInbox : IEventInbox where TDbContext : IHasEventInbox { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IMongoDbContextEventOutbox.cs similarity index 66% rename from framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventOutbox.cs rename to framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IMongoDbContextEventOutbox.cs index bcc0a4705a..ddb9cd19c5 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IDbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IMongoDbContextEventOutbox.cs @@ -2,7 +2,7 @@ using Volo.Abp.EventBus.Distributed; namespace Volo.Abp.MongoDB.DistributedEvents { - public interface IDbContextEventOutbox : IEventOutbox + public interface IMongoDbContextEventOutbox : IEventOutbox where TDbContext : IHasEventOutbox { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs new file mode 100644 index 0000000000..d98e144ada --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Timing; +using Volo.Abp.Uow; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public class MongoDbContextEventInbox : IMongoDbContextEventInbox + where TMongoDbContext : IHasEventInbox + { + protected IMongoDbContextProvider DbContextProvider { get; } + protected IClock Clock { get; } + + public MongoDbContextEventInbox( + IMongoDbContextProvider dbContextProvider, + IClock clock) + { + DbContextProvider = dbContextProvider; + Clock = clock; + } + + + [UnitOfWork] + public virtual async Task EnqueueAsync(IncomingEventInfo incomingEvent) + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + if (dbContext.SessionHandle != null) + { + await dbContext.IncomingEvents.InsertOneAsync( + dbContext.SessionHandle, + new IncomingEventRecord(incomingEvent) + ); + } + else + { + await dbContext.IncomingEvents.InsertOneAsync( + new IncomingEventRecord(incomingEvent) + ); + } + } + + [UnitOfWork] + public virtual async Task> GetWaitingEventsAsync(int maxCount) + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + + var outgoingEventRecords = await dbContext + .IncomingEvents + .AsQueryable() + .Where(x => !x.Processed) + .OrderBy(x => x.CreationTime) + .Take(maxCount) + .ToListAsync(); + + return outgoingEventRecords + .Select(x => x.ToIncomingEventInfo()) + .ToList(); + } + + [UnitOfWork] + public async Task MarkAsProcessedAsync(Guid id) + { + throw new NotImplementedException(); + } + + public Task ExistsByMessageIdAsync(string messageId) + { + throw new NotImplementedException(); + } + + public Task DeleteOldEventsAsync() + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs similarity index 79% rename from framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventOutbox.cs rename to framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs index 3b054732be..1bec9e0834 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs @@ -6,8 +6,8 @@ using Volo.Abp.Uow; namespace Volo.Abp.MongoDB.DistributedEvents { - public class DbContextEventOutbox : IDbContextEventOutbox - where TDbContext : IHasEventOutbox + public class MongoDbContextEventOutbox : IMongoDbContextEventOutbox + where TMongoDbContext : IHasEventOutbox { public Task EnqueueAsync(OutgoingEventInfo outgoingEvent) { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbInboxConfigExtensions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbInboxConfigExtensions.cs new file mode 100644 index 0000000000..27be4a078b --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public static class MongoDbInboxConfigExtensions + { + public static void UseMongoDbContext(this InboxConfig outboxConfig) + where TMongoDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(IMongoDbContextEventInbox); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbOutboxConfigExtensions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbOutboxConfigExtensions.cs new file mode 100644 index 0000000000..6da1513451 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.MongoDB.DistributedEvents +{ + public static class MongoDbOutboxConfigExtensions + { + public static void UseMongoDbContext(this OutboxConfig outboxConfig) + where TMongoDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(IMongoDbContextEventOutbox); + } + } +} \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/DistDemoApp.csproj b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj similarity index 58% rename from test/DistEvents/DistDemoApp/DistDemoApp.csproj rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj index 66623bfde4..fa3ffda64d 100644 --- a/test/DistEvents/DistDemoApp/DistDemoApp.csproj +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoApp.EfCoreRabbitMq.csproj @@ -3,22 +3,13 @@ Exe net5.0 + DistDemoApp - - - - - - - - - - - + diff --git a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoAppEfCoreRabbitMqModule.cs similarity index 54% rename from test/DistEvents/DistDemoApp/DistDemoAppModule.cs rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoAppEfCoreRabbitMqModule.cs index b7fbe1c930..da2e7a1445 100644 --- a/test/DistEvents/DistDemoApp/DistDemoAppModule.cs +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/DistDemoAppEfCoreRabbitMqModule.cs @@ -1,13 +1,7 @@ -using Medallion.Threading; -using Medallion.Threading.Redis; using Microsoft.Extensions.DependencyInjection; -using StackExchange.Redis; -using Volo.Abp.Autofac; -using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.EntityFrameworkCore.SqlServer; -using Volo.Abp.EventBus.Boxes; using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.RabbitMq; using Volo.Abp.Modularity; @@ -16,18 +10,13 @@ namespace DistDemoApp { [DependsOn( typeof(AbpEntityFrameworkCoreSqlServerModule), - typeof(AbpAutofacModule), typeof(AbpEventBusRabbitMqModule), - typeof(AbpEventBusBoxesModule) + typeof(DistDemoAppSharedModule) )] - public class DistDemoAppModule : AbpModule + public class DistDemoAppEfCoreRabbitMqModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - var configuration = context.Services.GetConfiguration(); - - context.Services.AddHostedService(); - context.Services.AddAbpDbContext(options => { options.AddDefaultRepositories(); @@ -38,12 +27,6 @@ namespace DistDemoApp options.UseSqlServer(); }); - Configure(options => - { - options.EtoMappings.Add(); - options.AutoEventSelectors.Add(); - }); - Configure(options => { options.Outboxes.Configure(config => @@ -56,12 +39,6 @@ namespace DistDemoApp config.UseDbContext(); }); }); - - context.Services.AddSingleton(sp => - { - var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); - return new RedisDistributedSynchronizationProvider(connection.GetDatabase()); - }); } } } \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.Designer.cs similarity index 98% rename from test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.Designer.cs index 7b552dfcfc..292cff66f9 100644 --- a/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.Designer.cs +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.Designer.cs @@ -11,8 +11,8 @@ using Volo.Abp.EntityFrameworkCore; namespace DistDemoApp.Migrations { [DbContext(typeof(TodoDbContext))] - [Migration("20210910111009_Added_Inbox_New_Cols")] - partial class Added_Inbox_New_Cols + [Migration("20210910152547_Added_Boxes_Initial")] + partial class Added_Boxes_Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { diff --git a/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.cs b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.cs new file mode 100644 index 0000000000..9094eaa8c9 --- /dev/null +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/20210910152547_Added_Boxes_Initial.cs @@ -0,0 +1,103 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace DistDemoApp.Migrations +{ + public partial class Added_Boxes_Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpEventInbox", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + MessageId = table.Column(type: "nvarchar(450)", nullable: true), + EventName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + EventData = table.Column(type: "varbinary(max)", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false), + Processed = table.Column(type: "bit", nullable: false), + ProcessedTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEventInbox", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpEventOutbox", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + EventName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + EventData = table.Column(type: "varbinary(max)", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEventOutbox", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "TodoItems", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Text = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_TodoItems", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "TodoSummaries", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Year = table.Column(type: "int", nullable: false), + Month = table.Column(type: "tinyint", nullable: false), + Day = table.Column(type: "tinyint", nullable: false), + TotalCount = table.Column(type: "int", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_TodoSummaries", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEventInbox_MessageId", + table: "AbpEventInbox", + column: "MessageId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEventInbox_Processed_CreationTime", + table: "AbpEventInbox", + columns: new[] { "Processed", "CreationTime" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpEventInbox"); + + migrationBuilder.DropTable( + name: "AbpEventOutbox"); + + migrationBuilder.DropTable( + name: "TodoItems"); + + migrationBuilder.DropTable( + name: "TodoSummaries"); + } + } +} diff --git a/test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/TodoDbContextModelSnapshot.cs similarity index 100% rename from test/DistEvents/DistDemoApp/Migrations/TodoDbContextModelSnapshot.cs rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/Migrations/TodoDbContextModelSnapshot.cs diff --git a/test/DistEvents/DistDemoApp/Program.cs b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Program.cs similarity index 95% rename from test/DistEvents/DistDemoApp/Program.cs rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/Program.cs index 676a07e357..597b29ae22 100644 --- a/test/DistEvents/DistDemoApp/Program.cs +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/Program.cs @@ -51,7 +51,7 @@ namespace DistDemoApp }) .ConfigureServices((hostContext, services) => { - services.AddApplication(); + services.AddApplication(); }); } } diff --git a/test/DistEvents/DistDemoApp/TodoDbContext.cs b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/TodoDbContext.cs similarity index 100% rename from test/DistEvents/DistDemoApp/TodoDbContext.cs rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/TodoDbContext.cs diff --git a/test/DistEvents/DistDemoApp/TodoDbContextFactory.cs b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/TodoDbContextFactory.cs similarity index 100% rename from test/DistEvents/DistDemoApp/TodoDbContextFactory.cs rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/TodoDbContextFactory.cs diff --git a/test/DistEvents/DistDemoApp/appsettings.json b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json similarity index 100% rename from test/DistEvents/DistDemoApp/appsettings.json rename to test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj new file mode 100644 index 0000000000..cfd73d51bb --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + DistDemoApp + + + diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs b/test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs new file mode 100644 index 0000000000..d0e4cdf4ca --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace DistDemoApp +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/DemoService.cs b/test/DistEvents/DistDemoApp.Shared/DemoService.cs similarity index 100% rename from test/DistEvents/DistDemoApp/DemoService.cs rename to test/DistEvents/DistDemoApp.Shared/DemoService.cs diff --git a/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj b/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj new file mode 100644 index 0000000000..4dc9d1dd64 --- /dev/null +++ b/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj @@ -0,0 +1,23 @@ + + + + net5.0 + DistDemoApp + + + + + + + + + + + + + + + + + + diff --git a/test/DistEvents/DistDemoApp/MyProjectNameHostedService.cs b/test/DistEvents/DistDemoApp.Shared/DistDemoAppHostedService.cs similarity index 90% rename from test/DistEvents/DistDemoApp/MyProjectNameHostedService.cs rename to test/DistEvents/DistDemoApp.Shared/DistDemoAppHostedService.cs index 7522d9fe9d..ba72d6902a 100644 --- a/test/DistEvents/DistDemoApp/MyProjectNameHostedService.cs +++ b/test/DistEvents/DistDemoApp.Shared/DistDemoAppHostedService.cs @@ -6,13 +6,13 @@ using Volo.Abp; namespace DistDemoApp { - public class MyProjectNameHostedService : IHostedService + public class DistDemoAppHostedService : IHostedService { private readonly IAbpApplicationWithExternalServiceProvider _application; private readonly IServiceProvider _serviceProvider; private readonly DemoService _demoService; - public MyProjectNameHostedService( + public DistDemoAppHostedService( IAbpApplicationWithExternalServiceProvider application, IServiceProvider serviceProvider, DemoService demoService) diff --git a/test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs b/test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs new file mode 100644 index 0000000000..5755f63677 --- /dev/null +++ b/test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs @@ -0,0 +1,39 @@ +using Medallion.Threading; +using Medallion.Threading.Redis; +using Microsoft.Extensions.DependencyInjection; +using StackExchange.Redis; +using Volo.Abp.Autofac; +using Volo.Abp.Domain; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.EventBus.Boxes; +using Volo.Abp.Modularity; + +namespace DistDemoApp +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(AbpDddDomainModule), + typeof(AbpEventBusBoxesModule) + )] + public class DistDemoAppSharedModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + + context.Services.AddHostedService(); + + Configure(options => + { + options.EtoMappings.Add(); + options.AutoEventSelectors.Add(); + }); + + context.Services.AddSingleton(sp => + { + var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); + return new RedisDistributedSynchronizationProvider(connection.GetDatabase()); + }); + } + } +} \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp/TodoEventHandler.cs b/test/DistEvents/DistDemoApp.Shared/TodoEventHandler.cs similarity index 100% rename from test/DistEvents/DistDemoApp/TodoEventHandler.cs rename to test/DistEvents/DistDemoApp.Shared/TodoEventHandler.cs diff --git a/test/DistEvents/DistDemoApp/TodoItem.cs b/test/DistEvents/DistDemoApp.Shared/TodoItem.cs similarity index 100% rename from test/DistEvents/DistDemoApp/TodoItem.cs rename to test/DistEvents/DistDemoApp.Shared/TodoItem.cs diff --git a/test/DistEvents/DistDemoApp/TodoItemEto.cs b/test/DistEvents/DistDemoApp.Shared/TodoItemEto.cs similarity index 100% rename from test/DistEvents/DistDemoApp/TodoItemEto.cs rename to test/DistEvents/DistDemoApp.Shared/TodoItemEto.cs diff --git a/test/DistEvents/DistDemoApp/TodoItemObjectMapper.cs b/test/DistEvents/DistDemoApp.Shared/TodoItemObjectMapper.cs similarity index 100% rename from test/DistEvents/DistDemoApp/TodoItemObjectMapper.cs rename to test/DistEvents/DistDemoApp.Shared/TodoItemObjectMapper.cs diff --git a/test/DistEvents/DistDemoApp/TodoSummary.cs b/test/DistEvents/DistDemoApp.Shared/TodoSummary.cs similarity index 100% rename from test/DistEvents/DistDemoApp/TodoSummary.cs rename to test/DistEvents/DistDemoApp.Shared/TodoSummary.cs diff --git a/test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.Designer.cs deleted file mode 100644 index 990ef3e967..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.Designer.cs +++ /dev/null @@ -1,61 +0,0 @@ -// -using System; -using DistDemoApp; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; - -namespace DistDemoApp.Migrations -{ - [DbContext(typeof(TodoDbContext))] - [Migration("20210825110134_Initial")] - partial class Initial - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.9") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("DistDemoApp.TodoItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.ToTable("TodoItems"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.cs b/test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.cs deleted file mode 100644 index b84d1f433f..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210825110134_Initial.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace DistDemoApp.Migrations -{ - public partial class Initial : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "TodoItems", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - Text = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_TodoItems", x => x.Id); - }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "TodoItems"); - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.Designer.cs deleted file mode 100644 index 4c2cf9abbb..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.Designer.cs +++ /dev/null @@ -1,95 +0,0 @@ -// -using System; -using DistDemoApp; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; - -namespace DistDemoApp.Migrations -{ - [DbContext(typeof(TodoDbContext))] - [Migration("20210825112717_Added_Summary_Table")] - partial class Added_Summary_Table - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.9") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("DistDemoApp.TodoItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.ToTable("TodoItems"); - }); - - modelBuilder.Entity("DistDemoApp.TodoSummary", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Day") - .HasColumnType("tinyint"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Month") - .HasColumnType("tinyint"); - - b.Property("TotalCount") - .HasColumnType("int"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("TodoSummaries"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.cs b/test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.cs deleted file mode 100644 index 7a7f167470..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210825112717_Added_Summary_Table.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace DistDemoApp.Migrations -{ - public partial class Added_Summary_Table : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "TodoSummaries", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Year = table.Column(type: "int", nullable: false), - Month = table.Column(type: "tinyint", nullable: false), - Day = table.Column(type: "tinyint", nullable: false), - TotalCount = table.Column(type: "int", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_TodoSummaries", x => x.Id); - }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "TodoSummaries"); - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs deleted file mode 100644 index 9c350598bf..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.Designer.cs +++ /dev/null @@ -1,118 +0,0 @@ -// -using System; -using DistDemoApp; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; - -namespace DistDemoApp.Migrations -{ - [DbContext(typeof(TodoDbContext))] - [Migration("20210908063422_Added_Outbox")] - partial class Added_Outbox - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.9") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("DistDemoApp.TodoItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.ToTable("TodoItems"); - }); - - modelBuilder.Entity("DistDemoApp.TodoSummary", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Day") - .HasColumnType("tinyint"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Month") - .HasColumnType("tinyint"); - - b.Property("TotalCount") - .HasColumnType("int"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("TodoSummaries"); - }); - - modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("EventData") - .IsRequired() - .HasColumnType("varbinary(max)"); - - b.Property("EventName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.HasKey("Id"); - - b.ToTable("AbpEventOutbox"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs b/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs deleted file mode 100644 index 2954acdac7..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210908063422_Added_Outbox.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace DistDemoApp.Migrations -{ - public partial class Added_Outbox : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AbpEventOutbox", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - EventName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - EventData = table.Column(type: "varbinary(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEventOutbox", x => x.Id); - }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AbpEventOutbox"); - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs deleted file mode 100644 index def5ebc7d7..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.Designer.cs +++ /dev/null @@ -1,122 +0,0 @@ -// -using System; -using DistDemoApp; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; - -namespace DistDemoApp.Migrations -{ - [DbContext(typeof(TodoDbContext))] - [Migration("20210908075344_Added_Outbox_CreationTime")] - partial class Added_Outbox_CreationTime - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.9") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("DistDemoApp.TodoItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.ToTable("TodoItems"); - }); - - modelBuilder.Entity("DistDemoApp.TodoSummary", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Day") - .HasColumnType("tinyint"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Month") - .HasColumnType("tinyint"); - - b.Property("TotalCount") - .HasColumnType("int"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("TodoSummaries"); - }); - - modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("EventData") - .IsRequired() - .HasColumnType("varbinary(max)"); - - b.Property("EventName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.HasKey("Id"); - - b.ToTable("AbpEventOutbox"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs b/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs deleted file mode 100644 index 2899933b8f..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210908075344_Added_Outbox_CreationTime.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace DistDemoApp.Migrations -{ - public partial class Added_Outbox_CreationTime : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "CreationTime", - table: "AbpEventOutbox", - type: "datetime2", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "CreationTime", - table: "AbpEventOutbox"); - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs deleted file mode 100644 index e02cee4b76..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.Designer.cs +++ /dev/null @@ -1,149 +0,0 @@ -// -using System; -using DistDemoApp; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; - -namespace DistDemoApp.Migrations -{ - [DbContext(typeof(TodoDbContext))] - [Migration("20210909113934_Added_Inbox")] - partial class Added_Inbox - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.9") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("DistDemoApp.TodoItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.ToTable("TodoItems"); - }); - - modelBuilder.Entity("DistDemoApp.TodoSummary", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Day") - .HasColumnType("tinyint"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Month") - .HasColumnType("tinyint"); - - b.Property("TotalCount") - .HasColumnType("int"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("TodoSummaries"); - }); - - modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.IncomingEventRecord", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("EventData") - .IsRequired() - .HasColumnType("varbinary(max)"); - - b.Property("EventName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.HasKey("Id"); - - b.ToTable("AbpEventInbox"); - }); - - modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("EventData") - .IsRequired() - .HasColumnType("varbinary(max)"); - - b.Property("EventName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.HasKey("Id"); - - b.ToTable("AbpEventOutbox"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs b/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs deleted file mode 100644 index f154ee3ff6..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210909113934_Added_Inbox.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace DistDemoApp.Migrations -{ - public partial class Added_Inbox : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "AbpEventInbox", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - EventName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), - EventData = table.Column(type: "varbinary(max)", nullable: false), - CreationTime = table.Column(type: "datetime2", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_AbpEventInbox", x => x.Id); - }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "AbpEventInbox"); - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs b/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs deleted file mode 100644 index 02404db39f..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.Designer.cs +++ /dev/null @@ -1,155 +0,0 @@ -// -using System; -using DistDemoApp; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; - -namespace DistDemoApp.Migrations -{ - [DbContext(typeof(TodoDbContext))] - [Migration("20210909182251_Added_Inbox_Process_Columns")] - partial class Added_Inbox_Process_Columns - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.9") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("DistDemoApp.TodoItem", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.ToTable("TodoItems"); - }); - - modelBuilder.Entity("DistDemoApp.TodoSummary", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Day") - .HasColumnType("tinyint"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Month") - .HasColumnType("tinyint"); - - b.Property("TotalCount") - .HasColumnType("int"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("TodoSummaries"); - }); - - modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.IncomingEventRecord", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("EventData") - .IsRequired() - .HasColumnType("varbinary(max)"); - - b.Property("EventName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Processed") - .HasColumnType("bit"); - - b.Property("ProcessedTime") - .HasColumnType("datetime2"); - - b.HasKey("Id"); - - b.ToTable("AbpEventInbox"); - }); - - modelBuilder.Entity("Volo.Abp.EntityFrameworkCore.DistributedEvents.OutgoingEventRecord", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("EventData") - .IsRequired() - .HasColumnType("varbinary(max)"); - - b.Property("EventName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.HasKey("Id"); - - b.ToTable("AbpEventOutbox"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs b/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs deleted file mode 100644 index 7da910a1af..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210909182251_Added_Inbox_Process_Columns.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace DistDemoApp.Migrations -{ - public partial class Added_Inbox_Process_Columns : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Processed", - table: "AbpEventInbox", - type: "bit", - nullable: false, - defaultValue: false); - - migrationBuilder.AddColumn( - name: "ProcessedTime", - table: "AbpEventInbox", - type: "datetime2", - nullable: true); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Processed", - table: "AbpEventInbox"); - - migrationBuilder.DropColumn( - name: "ProcessedTime", - table: "AbpEventInbox"); - } - } -} diff --git a/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs b/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs deleted file mode 100644 index 24f65ff23c..0000000000 --- a/test/DistEvents/DistDemoApp/Migrations/20210910111009_Added_Inbox_New_Cols.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace DistDemoApp.Migrations -{ - public partial class Added_Inbox_New_Cols : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "MessageId", - table: "AbpEventInbox", - type: "nvarchar(450)", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_AbpEventInbox_MessageId", - table: "AbpEventInbox", - column: "MessageId"); - - migrationBuilder.CreateIndex( - name: "IX_AbpEventInbox_Processed_CreationTime", - table: "AbpEventInbox", - columns: new[] { "Processed", "CreationTime" }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_AbpEventInbox_MessageId", - table: "AbpEventInbox"); - - migrationBuilder.DropIndex( - name: "IX_AbpEventInbox_Processed_CreationTime", - table: "AbpEventInbox"); - - migrationBuilder.DropColumn( - name: "MessageId", - table: "AbpEventInbox"); - } - } -} diff --git a/test/DistEvents/DistEventsDemo.sln b/test/DistEvents/DistEventsDemo.sln index de7a36535a..4e53ba6367 100644 --- a/test/DistEvents/DistEventsDemo.sln +++ b/test/DistEvents/DistEventsDemo.sln @@ -1,6 +1,10 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistDemoApp", "DistDemoApp\DistDemoApp.csproj", "{10DBC6BC-1269-4C68-9F6C-12209A3FBF5B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistDemoApp.EfCoreRabbitMq", "DistDemoApp.EfCoreRabbitMq\DistDemoApp.EfCoreRabbitMq.csproj", "{10DBC6BC-1269-4C68-9F6C-12209A3FBF5B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistDemoApp.MongoDbKafka", "DistDemoApp.MongoDbKafka\DistDemoApp.MongoDbKafka.csproj", "{19762F48-4CDB-4723-A72F-D859C0DC815A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistDemoApp.Shared", "DistDemoApp.Shared\DistDemoApp.Shared.csproj", "{C515F4E2-0ED3-4561-BC58-FC633B50E2EB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -12,5 +16,13 @@ Global {10DBC6BC-1269-4C68-9F6C-12209A3FBF5B}.Debug|Any CPU.Build.0 = Debug|Any CPU {10DBC6BC-1269-4C68-9F6C-12209A3FBF5B}.Release|Any CPU.ActiveCfg = Release|Any CPU {10DBC6BC-1269-4C68-9F6C-12209A3FBF5B}.Release|Any CPU.Build.0 = Release|Any CPU + {19762F48-4CDB-4723-A72F-D859C0DC815A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19762F48-4CDB-4723-A72F-D859C0DC815A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19762F48-4CDB-4723-A72F-D859C0DC815A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19762F48-4CDB-4723-A72F-D859C0DC815A}.Release|Any CPU.Build.0 = Release|Any CPU + {C515F4E2-0ED3-4561-BC58-FC633B50E2EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C515F4E2-0ED3-4561-BC58-FC633B50E2EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C515F4E2-0ED3-4561-BC58-FC633B50E2EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C515F4E2-0ED3-4561-BC58-FC633B50E2EB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal From c8d525716d699c400f0b1fec8d617f93dc50d91a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Sep 2021 19:53:20 +0300 Subject: [PATCH 19/55] Fix concurrencystamp & tests --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 62c8f84d38..8e7926f9ae 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -162,7 +162,7 @@ namespace Volo.Abp.EntityFrameworkCore entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList()); } - HandleExtraPropertiesOnSave(); + HandlePropertiesBeforeSave(); var eventReport = CreateEventReport(); @@ -320,11 +320,16 @@ namespace Volo.Abp.EntityFrameworkCore } } - protected virtual void HandleExtraPropertiesOnSave() + protected virtual void HandlePropertiesBeforeSave() { foreach (var entry in ChangeTracker.Entries().ToList()) { HandleExtraPropertiesOnSave(entry); + + if (entry.State.IsIn(EntityState.Modified, EntityState.Deleted)) + { + UpdateConcurrencyStamp(entry); + } } } @@ -458,7 +463,6 @@ namespace Volo.Abp.EntityFrameworkCore { if (entry.State == EntityState.Modified && entry.Properties.Any(x => x.IsModified && x.Metadata.ValueGenerated == ValueGenerated.Never)) { - UpdateConcurrencyStamp(entry); SetModificationAuditProperties(entry); if (entry.Entity is ISoftDelete && entry.Entity.As().IsDeleted) @@ -470,7 +474,19 @@ namespace Volo.Abp.EntityFrameworkCore protected virtual void ApplyAbpConceptsForDeletedEntity(EntityEntry entry) { - TryCancelDeletionForSoftDelete(entry); + if (!(entry.Entity is ISoftDelete)) + { + return; + } + + if (IsHardDeleted(entry)) + { + return; + } + + entry.Reload(); + entry.Entity.As().IsDeleted = true; + entry.State = EntityState.Modified; } protected virtual bool IsHardDeleted(EntityEntry entry) @@ -512,24 +528,6 @@ namespace Volo.Abp.EntityFrameworkCore entity.ConcurrencyStamp = Guid.NewGuid().ToString("N"); } - protected virtual bool TryCancelDeletionForSoftDelete(EntityEntry entry) - { - if (!(entry.Entity is ISoftDelete)) - { - return false; - } - - if (IsHardDeleted(entry)) - { - return false; - } - - entry.Reload(); - entry.Entity.As().IsDeleted = true; - entry.State = EntityState.Modified; - return true; - } - protected virtual void CheckAndSetId(EntityEntry entry) { if (entry.Entity is IEntity entityWithGuidId) From 60d97be47787640727ccde8578986a82b37b98f5 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 14 Sep 2021 09:49:05 +0800 Subject: [PATCH 20/55] Use `AbpAsyncTimer` to replace `AbpTimer`. --- .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 38 +++++++++---------- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 20 +++++----- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index bba97fe3d6..ec56db7b0a 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -16,23 +16,23 @@ namespace Volo.Abp.EventBus.Boxes public class InboxProcessor : IInboxProcessor, ITransientDependency { protected IServiceProvider ServiceProvider { get; } - protected AbpTimer Timer { get; } + protected AbpAsyncTimer Timer { get; } protected IDistributedEventBus DistributedEventBus { get; } protected IDistributedLockProvider DistributedLockProvider { get; } protected IUnitOfWorkManager UnitOfWorkManager { get; } protected IClock Clock { get; } protected IEventInbox Inbox { get; private set; } protected InboxConfig InboxConfig { get; private set; } - + protected DateTime? LastCleanTime { get; set; } - + protected string DistributedLockName => "Inbox_" + InboxConfig.Name; public ILogger Logger { get; set; } public InboxProcessor( IServiceProvider serviceProvider, - AbpTimer timer, - IDistributedEventBus distributedEventBus, + AbpAsyncTimer timer, + IDistributedEventBus distributedEventBus, IDistributedLockProvider distributedLockProvider, IUnitOfWorkManager unitOfWorkManager, IClock clock) @@ -47,18 +47,18 @@ namespace Volo.Abp.EventBus.Boxes Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; } - - private void TimerOnElapsed(object sender, EventArgs e) + + private async Task TimerOnElapsed(AbpAsyncTimer arg) { - AsyncHelper.RunSync(RunAsync); + await RunAsync(); } - + public Task StartAsync(InboxConfig inboxConfig, CancellationToken cancellationToken = default) { InboxConfig = inboxConfig; Inbox = (IEventInbox)ServiceProvider.GetRequiredService(inboxConfig.ImplementationType); Timer.Start(cancellationToken); - return Task.CompletedTask; + return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken = default) @@ -66,7 +66,7 @@ namespace Volo.Abp.EventBus.Boxes Timer.Stop(cancellationToken); return Task.CompletedTask; } - + protected virtual async Task RunAsync() { await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName)) @@ -74,9 +74,9 @@ namespace Volo.Abp.EventBus.Boxes if (handle != null) { Logger.LogDebug("Obtained the distributed lock: " + DistributedLockName); - + await DeleteOldEventsAsync(); - + while (true) { var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config? @@ -86,7 +86,7 @@ namespace Volo.Abp.EventBus.Boxes } Logger.LogInformation($"Found {waitingEvents.Count} events in the inbox."); - + foreach (var waitingEvent in waitingEvents) { using (var uow = UnitOfWorkManager.Begin(isTransactional: true, requiresNew: true)) @@ -94,12 +94,12 @@ namespace Volo.Abp.EventBus.Boxes await DistributedEventBus .AsRawEventPublisher() .ProcessRawAsync(InboxConfig, waitingEvent.EventName, waitingEvent.EventData); - + await Inbox.MarkAsProcessedAsync(waitingEvent.Id); - + await uow.CompleteAsync(); } - + Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}"); } } @@ -120,8 +120,8 @@ namespace Volo.Abp.EventBus.Boxes } await Inbox.DeleteOldEventsAsync(); - + LastCleanTime = DateTime.Now; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 94d0175e10..df0d616b28 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.EventBus.Boxes public class OutboxSender : IOutboxSender, ITransientDependency { protected IServiceProvider ServiceProvider { get; } - protected AbpTimer Timer { get; } + protected AbpAsyncTimer Timer { get; } protected IDistributedEventBus DistributedEventBus { get; } protected IDistributedLockProvider DistributedLockProvider { get; } protected IEventOutbox Outbox { get; private set; } @@ -25,8 +25,8 @@ namespace Volo.Abp.EventBus.Boxes public OutboxSender( IServiceProvider serviceProvider, - AbpTimer timer, - IDistributedEventBus distributedEventBus, + AbpAsyncTimer timer, + IDistributedEventBus distributedEventBus, IDistributedLockProvider distributedLockProvider) { ServiceProvider = serviceProvider; @@ -51,10 +51,10 @@ namespace Volo.Abp.EventBus.Boxes Timer.Stop(cancellationToken); return Task.CompletedTask; } - - private void TimerOnElapsed(object sender, EventArgs e) + + private async Task TimerOnElapsed(AbpAsyncTimer arg) { - AsyncHelper.RunSync(RunAsync); + await RunAsync(); } protected virtual async Task RunAsync() @@ -64,7 +64,7 @@ namespace Volo.Abp.EventBus.Boxes if (handle != null) { Logger.LogDebug("Obtained the distributed lock: " + DistributedLockName); - + while (true) { var waitingEvents = await Outbox.GetWaitingEventsAsync(1000); //TODO: Config? @@ -74,7 +74,7 @@ namespace Volo.Abp.EventBus.Boxes } Logger.LogInformation($"Found {waitingEvents.Count} events in the outbox."); - + foreach (var waitingEvent in waitingEvents) { await DistributedEventBus @@ -82,7 +82,7 @@ namespace Volo.Abp.EventBus.Boxes .PublishRawAsync(waitingEvent.Id, waitingEvent.EventName, waitingEvent.EventData); await Outbox.DeleteAsync(waitingEvent.Id); - + Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); } } @@ -95,4 +95,4 @@ namespace Volo.Abp.EventBus.Boxes } } } -} \ No newline at end of file +} From 8114a628ac92452cf5721243efea0cf5e2a7a57d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 14 Sep 2021 18:17:11 +0300 Subject: [PATCH 21/55] delete old todo note --- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index df0d616b28..261ff6512b 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -11,7 +11,6 @@ using Volo.Abp.Threading; namespace Volo.Abp.EventBus.Boxes { - //TODO: use distributed lock! public class OutboxSender : IOutboxSender, ITransientDependency { protected IServiceProvider ServiceProvider { get; } From 2db1a1cf91bc2c435751888c5efc433ebb3caf5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Sep 2021 09:22:15 +0300 Subject: [PATCH 22/55] Fast stop on application stop. --- .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 17 +++++++++++++--- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 11 +++++++--- .../Volo/Abp/EventBus/Boxes/TaskHelper.cs | 20 +++++++++++++++++++ .../DistDemoAppSharedModule.cs | 2 +- 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/TaskHelper.cs diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index ec56db7b0a..c9b45a3ea8 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -28,6 +28,8 @@ namespace Volo.Abp.EventBus.Boxes protected string DistributedLockName => "Inbox_" + InboxConfig.Name; public ILogger Logger { get; set; } + protected CancellationTokenSource StoppingTokenSource { get; } + protected CancellationToken StoppingToken { get; } public InboxProcessor( IServiceProvider serviceProvider, @@ -46,6 +48,8 @@ namespace Volo.Abp.EventBus.Boxes Timer.Period = 2000; //TODO: Config? Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; + StoppingTokenSource = new CancellationTokenSource(); + StoppingToken = StoppingTokenSource.Token; } private async Task TimerOnElapsed(AbpAsyncTimer arg) @@ -63,13 +67,20 @@ namespace Volo.Abp.EventBus.Boxes public Task StopAsync(CancellationToken cancellationToken = default) { + StoppingTokenSource.Cancel(); Timer.Stop(cancellationToken); + StoppingTokenSource.Dispose(); return Task.CompletedTask; } protected virtual async Task RunAsync() { - await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName)) + if (StoppingToken.IsCancellationRequested) + { + return; + } + + await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName, cancellationToken: StoppingToken)) { if (handle != null) { @@ -79,7 +90,7 @@ namespace Volo.Abp.EventBus.Boxes while (true) { - var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config? + var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config? Pass StoppingToken! if (waitingEvents.Count <= 0) { break; @@ -107,7 +118,7 @@ namespace Volo.Abp.EventBus.Boxes else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); - await Task.Delay(7000); //TODO: Can we pass a cancellation token to cancel on shutdown? (Config?) + await TaskDelayHelper.DelayAsync(15000, StoppingToken); //TODO: Config? } } } diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 261ff6512b..1a2e0b9d79 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -21,6 +21,9 @@ namespace Volo.Abp.EventBus.Boxes protected OutboxConfig OutboxConfig { get; private set; } protected string DistributedLockName => "Outbox_" + OutboxConfig.Name; public ILogger Logger { get; set; } + + protected CancellationTokenSource StoppingTokenSource { get; } + protected CancellationToken StoppingToken { get; } public OutboxSender( IServiceProvider serviceProvider, @@ -35,6 +38,8 @@ namespace Volo.Abp.EventBus.Boxes Timer.Period = 2000; //TODO: Config? Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; + StoppingTokenSource = new CancellationTokenSource(); + StoppingToken = StoppingTokenSource.Token; } public virtual Task StartAsync(OutboxConfig outboxConfig, CancellationToken cancellationToken = default) @@ -47,7 +52,9 @@ namespace Volo.Abp.EventBus.Boxes public virtual Task StopAsync(CancellationToken cancellationToken = default) { + StoppingTokenSource.Cancel(); Timer.Stop(cancellationToken); + StoppingTokenSource.Dispose(); return Task.CompletedTask; } @@ -62,8 +69,6 @@ namespace Volo.Abp.EventBus.Boxes { if (handle != null) { - Logger.LogDebug("Obtained the distributed lock: " + DistributedLockName); - while (true) { var waitingEvents = await Outbox.GetWaitingEventsAsync(1000); //TODO: Config? @@ -89,7 +94,7 @@ namespace Volo.Abp.EventBus.Boxes else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); - await Task.Delay(7000); //TODO: Can we pass a cancellation token to cancel on shutdown? (Config?) + await TaskDelayHelper.DelayAsync(15000, StoppingToken); //TODO: Config? } } } diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/TaskHelper.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/TaskHelper.cs new file mode 100644 index 0000000000..87abe18da8 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/TaskHelper.cs @@ -0,0 +1,20 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Volo.Abp.EventBus.Boxes +{ + internal static class TaskDelayHelper + { + public static async Task DelayAsync(int milliseconds, CancellationToken cancellationToken = default) + { + try + { + await Task.Delay(milliseconds, cancellationToken); + } + catch (TaskCanceledException) + { + return; + } + } + } +} \ No newline at end of file diff --git a/test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs b/test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs index 5755f63677..138b64f567 100644 --- a/test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs +++ b/test/DistEvents/DistDemoApp.Shared/DistDemoAppSharedModule.cs @@ -14,7 +14,7 @@ namespace DistDemoApp typeof(AbpAutofacModule), typeof(AbpDddDomainModule), typeof(AbpEventBusBoxesModule) - )] + )] public class DistDemoAppSharedModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) From 4af63febff5d2a3a36a68262de00526da9ee996b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Sep 2021 09:55:26 +0300 Subject: [PATCH 23/55] Rename IRawEventPublisher to ISupportsEventBoxes and refactor methods. --- .../Boxes/AbpDistributedEventBusExtensions.cs | 6 +++--- .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 4 ++-- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 8 ++++--- .../Kafka/KafkaDistributedEventBus.cs | 21 ++++++++++--------- .../RabbitMq/RabbitMqDistributedEventBus.cs | 14 ++++++++----- .../Rebus/RebusDistributedEventBus.cs | 8 +++++-- .../Distributed/DistributedEventBusBase.cs | 12 ++++++++--- .../Distributed/IRawEventPublisher.cs | 18 ---------------- .../Distributed/ISupportsEventBoxes.cs | 17 +++++++++++++++ 9 files changed, 62 insertions(+), 46 deletions(-) delete mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs create mode 100644 framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs index dda6f71245..ed652f677f 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs @@ -4,12 +4,12 @@ namespace Volo.Abp.EventBus.Boxes { public static class AbpDistributedEventBusExtensions { - public static IRawEventPublisher AsRawEventPublisher(this IDistributedEventBus eventBus) + public static ISupportsEventBoxes AsSupportsEventBoxes(this IDistributedEventBus eventBus) { - var rawPublisher = eventBus as IRawEventPublisher; + var rawPublisher = eventBus as ISupportsEventBoxes; if (rawPublisher == null) { - throw new AbpException($"Given type ({eventBus.GetType().AssemblyQualifiedName}) should implement {nameof(IRawEventPublisher)}!"); + throw new AbpException($"Given type ({eventBus.GetType().AssemblyQualifiedName}) should implement {nameof(ISupportsEventBoxes)}!"); } return rawPublisher; diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index c9b45a3ea8..7f238728f7 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -103,8 +103,8 @@ namespace Volo.Abp.EventBus.Boxes using (var uow = UnitOfWorkManager.Begin(isTransactional: true, requiresNew: true)) { await DistributedEventBus - .AsRawEventPublisher() - .ProcessRawAsync(InboxConfig, waitingEvent.EventName, waitingEvent.EventData); + .AsSupportsEventBoxes() + .ProcessFromInboxAsync(waitingEvent, InboxConfig); await Inbox.MarkAsProcessedAsync(waitingEvent.Id); diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 1a2e0b9d79..1be2374268 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -82,11 +82,13 @@ namespace Volo.Abp.EventBus.Boxes foreach (var waitingEvent in waitingEvents) { await DistributedEventBus - .AsRawEventPublisher() - .PublishRawAsync(waitingEvent.Id, waitingEvent.EventName, waitingEvent.EventData); + .AsSupportsEventBoxes() + .PublishFromOutboxAsync( + waitingEvent, + OutboxConfig + ); await Outbox.DeleteAsync(waitingEvent.Id); - Logger.LogInformation($"Sent the event to the message broker with id = {waitingEvent.Id:N}"); } } diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index 3ffe3bb880..b747a858d2 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs @@ -201,32 +201,33 @@ namespace Volo.Abp.EventBus.Kafka unitOfWork.AddOrReplaceDistributedEvent(eventRecord); } - public override Task PublishRawAsync( - Guid eventId, - string eventName, - byte[] eventData) + public override Task PublishFromOutboxAsync( + OutgoingEventInfo outgoingEvent, + OutboxConfig outboxConfig) { return PublishAsync( AbpKafkaEventBusOptions.TopicName, - eventName, - eventData, + outgoingEvent.EventName, + outgoingEvent.EventData, new Headers { - { "messageId", System.Text.Encoding.UTF8.GetBytes(eventId.ToString("N")) } + { "messageId", System.Text.Encoding.UTF8.GetBytes(outgoingEvent.Id.ToString("N")) } }, null ); } - public override async Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes) + public override async Task ProcessFromInboxAsync( + IncomingEventInfo incomingEvent, + InboxConfig inboxConfig) { - var eventType = EventTypes.GetOrDefault(eventName); + var eventType = EventTypes.GetOrDefault(incomingEvent.EventName); if (eventType == null) { return; } - var eventData = Serializer.Deserialize(eventDataBytes, eventType); + var eventData = Serializer.Deserialize(incomingEvent.EventData, eventType); var exceptions = new List(); await TriggerHandlersAsync(eventType, eventData, exceptions, inboxConfig); if (exceptions.Any()) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index deb20b5ff3..12eec80ce7 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -212,22 +212,26 @@ namespace Volo.Abp.EventBus.RabbitMq unitOfWork.AddOrReplaceDistributedEvent(eventRecord); } - public override Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData) + public override Task PublishFromOutboxAsync( + OutgoingEventInfo outgoingEvent, + OutboxConfig outboxConfig) { - return PublishAsync(eventName, eventData, null, eventId: eventId); + return PublishAsync(outgoingEvent.EventName, outgoingEvent.EventData, null, eventId: outgoingEvent.Id); } - public override async Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes) + public override async Task ProcessFromInboxAsync( + IncomingEventInfo incomingEvent, + InboxConfig inboxConfig) { //TODO: We have a duplication in logic and also with the kafka side! - var eventType = EventTypes.GetOrDefault(eventName); + var eventType = EventTypes.GetOrDefault(incomingEvent.EventName); if (eventType == null) { return; } - var eventData = Serializer.Deserialize(eventDataBytes, eventType); + var eventData = Serializer.Deserialize(incomingEvent.EventData, eventType); var exceptions = new List(); await TriggerHandlersAsync(eventType, eventData, exceptions, inboxConfig); if (exceptions.Any()) diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index af3d148ecf..8dac885036 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -188,13 +188,17 @@ namespace Volo.Abp.EventBus.Rebus return false; } - public override Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData) + public override Task PublishFromOutboxAsync( + OutgoingEventInfo outgoingEvent, + OutboxConfig outboxConfig) { /* TODO: IMPLEMENT! */ throw new NotImplementedException(); } - public override Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes) + public override Task ProcessFromInboxAsync( + IncomingEventInfo incomingEvent, + InboxConfig inboxConfig) { /* TODO: IMPLEMENT! */ throw new NotImplementedException(); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 1fdaf0d26f..70c5bd5533 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -10,7 +10,7 @@ using Volo.Abp.Uow; namespace Volo.Abp.EventBus.Distributed { - public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus, IRawEventPublisher + public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventBus, ISupportsEventBoxes { protected IGuidGenerator GuidGenerator { get; } protected IClock Clock { get; } @@ -80,8 +80,14 @@ namespace Volo.Abp.EventBus.Distributed await PublishToEventBusAsync(eventType, eventData); } - public abstract Task PublishRawAsync(Guid eventId, string eventName, byte[] eventData); - public abstract Task ProcessRawAsync(InboxConfig inboxConfig, string eventName, byte[] eventDataBytes); + public abstract Task PublishFromOutboxAsync( + OutgoingEventInfo outgoingEvent, + OutboxConfig outboxConfig + ); + + public abstract Task ProcessFromInboxAsync( + IncomingEventInfo incomingEvent, + InboxConfig inboxConfig); private async Task AddToOutboxAsync(Type eventType, object eventData) { diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs deleted file mode 100644 index 4505239ade..0000000000 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IRawEventPublisher.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Threading.Tasks; - -namespace Volo.Abp.EventBus.Distributed -{ - public interface IRawEventPublisher //TODO: Rename: ISupportsEventBoxes - { - Task PublishRawAsync( - Guid eventId, - string eventName, - byte[] eventData); - - Task ProcessRawAsync( - InboxConfig inboxConfig, - string eventName, - byte[] eventDataBytes); - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs new file mode 100644 index 0000000000..7a13696bc0 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/ISupportsEventBoxes.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.EventBus.Distributed +{ + public interface ISupportsEventBoxes + { + Task PublishFromOutboxAsync( + OutgoingEventInfo outgoingEvent, + OutboxConfig outboxConfig + ); + + Task ProcessFromInboxAsync( + IncomingEventInfo incomingEvent, + InboxConfig inboxConfig + ); + } +} \ No newline at end of file From 8200298f5dc35177ff3fe9d226f84e87b7d68afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Sep 2021 09:56:34 +0300 Subject: [PATCH 24/55] Remove unnecessary log --- .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index 7f238728f7..e711e5798e 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -84,8 +84,6 @@ namespace Volo.Abp.EventBus.Boxes { if (handle != null) { - Logger.LogDebug("Obtained the distributed lock: " + DistributedLockName); - await DeleteOldEventsAsync(); while (true) From 8859803254ed40af878903d090762d0041495734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Sep 2021 10:00:04 +0300 Subject: [PATCH 25/55] Remove old TODOs --- .../Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 12eec80ce7..ceba890234 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -20,8 +20,6 @@ using Volo.Abp.Uow; namespace Volo.Abp.EventBus.RabbitMq { /* TODO: How to handle unsubscribe to unbind on RabbitMq (may not be possible for) - * TODO: Implement Retry system - * TODO: Should be improved */ [Dependency(ReplaceServices = true)] [ExposeServices(typeof(IDistributedEventBus), typeof(RabbitMqDistributedEventBus))] @@ -223,8 +221,6 @@ namespace Volo.Abp.EventBus.RabbitMq IncomingEventInfo incomingEvent, InboxConfig inboxConfig) { - //TODO: We have a duplication in logic and also with the kafka side! - var eventType = EventTypes.GetOrDefault(incomingEvent.EventName); if (eventType == null) { From cc14ae65594abb28b69c8341a14be4abfd2d4c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Sep 2021 10:11:54 +0300 Subject: [PATCH 26/55] Define index for the creationtime. --- .../EventOutboxDbContextModelBuilderExtensions.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs index 5443968343..a8236ac43a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventOutboxDbContextModelBuilderExtensions.cs @@ -15,6 +15,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents b.ConfigureByConvention(); b.Property(x => x.EventName).IsRequired().HasMaxLength(OutgoingEventRecord.MaxEventNameLength); b.Property(x => x.EventData).IsRequired(); + + b.HasIndex(x => x.CreationTime); }); } } From fc70729d5423e887c2fd43372ffd7d4f2a7851f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Sep 2021 13:12:57 +0300 Subject: [PATCH 27/55] Rename local variable: rawPublisher to supportsEventBoxes. --- .../Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs index ed652f677f..a943f6faa7 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpDistributedEventBusExtensions.cs @@ -6,13 +6,13 @@ namespace Volo.Abp.EventBus.Boxes { public static ISupportsEventBoxes AsSupportsEventBoxes(this IDistributedEventBus eventBus) { - var rawPublisher = eventBus as ISupportsEventBoxes; - if (rawPublisher == null) + var supportsEventBoxes = eventBus as ISupportsEventBoxes; + if (supportsEventBoxes == null) { throw new AbpException($"Given type ({eventBus.GetType().AssemblyQualifiedName}) should implement {nameof(ISupportsEventBoxes)}!"); } - return rawPublisher; + return supportsEventBoxes; } } } \ No newline at end of file From 41adcd251d93b87bbe9f2ee5c261c8b81a4d829a Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 24 Sep 2021 13:26:09 +0800 Subject: [PATCH 28/55] Make IRepository not inherit from IQueryable --- .../Services/AbstractKeyReadOnlyAppService.cs | 24 ---------------- .../Repositories/IReadOnlyRepository.cs | 4 +-- .../Abp/Domain/Repositories/RepositoryBase.cs | 22 --------------- .../EntityFrameworkCore/EfCoreRepository.cs | 8 +----- .../Repositories/MongoDB/MongoDbRepository.cs | 22 ++------------- .../EfCoreAsyncQueryableProvider_Tests.cs | 21 ++++++++------ .../Repositories/Repository_Basic_Tests.cs | 1 + .../Repository_Queryable_Tests.cs | 12 ++++---- .../EntityFrameworkCore/CityRepository.cs | 1 + .../MongoDbAsyncQueryableProvider_Tests.cs | 16 +++++------ .../MongoDbAsyncQueryableProvider_Tests.cs | 10 +++---- .../Repositories/Repository_Basic_Tests.cs | 16 +++++------ .../TestApp/Application/DistrictAppService.cs | 4 +-- .../Abp/TestApp/Testing/DomainEvents_Tests.cs | 28 +++++++++---------- .../Testing/MultiTenant_Filter_Tests.cs | 16 +++++------ .../Repository_Basic_Tests_With_Int_Pk.cs | 4 +-- .../Testing/Repository_Queryable_Tests.cs | 8 +++--- .../Repository_Specifications_Tests.cs | 6 ++-- .../Testing/SoftDelete_Filter_Tests.cs | 22 +++++++-------- .../EfCoreTenantRepository.cs | 2 +- .../EfCoreAbpUserRepositoryBase.cs | 2 +- 21 files changed, 92 insertions(+), 157 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs index 54123bc843..528a8c67a1 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs @@ -153,19 +153,6 @@ namespace Volo.Abp.Application.Services return query; } - /// - /// This method should create based on given input. - /// It should filter query if needed, but should not do sorting or paging. - /// Sorting should be done in and paging should be done in - /// methods. - /// - /// The input. - [Obsolete("Override the CreateFilteredQueryAsync method instead.")] - protected virtual IQueryable CreateFilteredQuery(TGetListInput input) - { - return ReadOnlyRepository; - } - /// /// This method should create based on given input. /// It should filter query if needed, but should not do sorting or paging. @@ -175,17 +162,6 @@ namespace Volo.Abp.Application.Services /// The input. protected virtual async Task> CreateFilteredQueryAsync(TGetListInput input) { - /* If user has overridden the CreateFilteredQuery method, - * we don't want to make breaking change in this point. - */ -#pragma warning disable 618 - var query = CreateFilteredQuery(input); -#pragma warning restore 618 - if (!ReferenceEquals(query, ReadOnlyRepository)) - { - return query; - } - return await ReadOnlyRepository.GetQueryableAsync(); } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs index 7aeffdad12..bf0704f085 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs @@ -10,7 +10,7 @@ using Volo.Abp.Linq; namespace Volo.Abp.Domain.Repositories { - public interface IReadOnlyRepository : IQueryable, IReadOnlyBasicRepository + public interface IReadOnlyRepository: IReadOnlyBasicRepository where TEntity : class, IEntity { IAsyncQueryableExecuter AsyncExecuter { get; } @@ -26,7 +26,7 @@ namespace Volo.Abp.Domain.Repositories Task> WithDetailsAsync(params Expression>[] propertySelectors); //TODO: CancellationToken Task> GetQueryableAsync(); //TODO: CancellationToken - + /// /// Gets a list of entities by the given . /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs index 0b32d54d45..da10901420 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -1,6 +1,5 @@ using JetBrains.Annotations; using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -15,15 +14,6 @@ namespace Volo.Abp.Domain.Repositories public abstract class RepositoryBase : BasicRepositoryBase, IRepository, IUnitOfWorkManagerAccessor where TEntity : class, IEntity { - [Obsolete("This method will be removed in future versions.")] - public virtual Type ElementType => GetQueryable().ElementType; - - [Obsolete("This method will be removed in future versions.")] - public virtual Expression Expression => GetQueryable().Expression; - - [Obsolete("This method will be removed in future versions.")] - public virtual IQueryProvider Provider => GetQueryable().Provider; - [Obsolete("Use WithDetailsAsync method.")] public virtual IQueryable WithDetails() { @@ -46,18 +36,6 @@ namespace Volo.Abp.Domain.Repositories return GetQueryableAsync(); } - [Obsolete("This method will be removed in future versions.")] - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - [Obsolete("This method will be removed in future versions.")] - public IEnumerator GetEnumerator() - { - return GetQueryable().GetEnumerator(); - } - [Obsolete("Use GetQueryableAsync method.")] protected abstract IQueryable GetQueryable(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index c330beb281..fb32e5a21d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -17,7 +17,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { - public class EfCoreRepository : RepositoryBase, IEfCoreRepository, IAsyncEnumerable + public class EfCoreRepository : RepositoryBase, IEfCoreRepository where TDbContext : IEfCoreDbContext where TEntity : class, IEntity { @@ -381,12 +381,6 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return query; } - [Obsolete("This method will be deleted in future versions.")] - public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) - { - return DbSet.AsAsyncEnumerable().GetAsyncEnumerator(cancellationToken); - } - protected virtual void CheckAndSetId(TEntity entity) { if (entity is IEntity entityWithGuidId) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index a40117e0ff..696e7846c5 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -2,6 +2,7 @@ using JetBrains.Annotations; using MongoDB.Driver; using MongoDB.Driver.Linq; using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; @@ -23,8 +24,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { public class MongoDbRepository : RepositoryBase, - IMongoDbRepository, - IMongoQueryable + IMongoDbRepository where TMongoDbContext : IAbpMongoDbContext where TEntity : class, IEntity { @@ -720,24 +720,6 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return aggregate; } - - [Obsolete("This method will be removed in future versions.")] - public QueryableExecutionModel GetExecutionModel() - { - return GetMongoQueryable().GetExecutionModel(); - } - - [Obsolete("This method will be removed in future versions.")] - public IAsyncCursor ToCursor(CancellationToken cancellationToken = new CancellationToken()) - { - return GetMongoQueryable().ToCursor(GetCancellationToken(cancellationToken)); - } - - [Obsolete("This method will be removed in future versions.")] - public Task> ToCursorAsync(CancellationToken cancellationToken = new CancellationToken()) - { - return GetMongoQueryable().ToCursorAsync(GetCancellationToken(cancellationToken)); - } } public class MongoDbRepository diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs index 9a6c0817f2..93e0de6639 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider_Tests.cs @@ -24,28 +24,31 @@ namespace Volo.Abp.EntityFrameworkCore } [Fact] - public void Should_Accept_EfCore_Related_Queries() + public async Task Should_Accept_EfCore_Related_Queries() { - var query = _personRepository.Where(p => p.Age > 0); - - _efCoreAsyncQueryableProvider.CanExecute(query).ShouldBeTrue(); + using ( _ = _unitOfWorkManager.Begin()) + { + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0); + + _efCoreAsyncQueryableProvider.CanExecute(query).ShouldBeTrue(); + } } [Fact] public void Should_Not_Accept_Other_Providers() { var query = new[] {1, 2, 3}.AsQueryable().Where(x => x > 0); - + _efCoreAsyncQueryableProvider.CanExecute(query).ShouldBeFalse(); } - + [Fact] public async Task Should_Execute_Queries() { using (var uow = _unitOfWorkManager.Begin()) { - var query = _personRepository.Where(p => p.Age > 0); - + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0); + (await _efCoreAsyncQueryableProvider.CountAsync(query) > 0).ShouldBeTrue(); (await _efCoreAsyncQueryableProvider.FirstOrDefaultAsync(query)).ShouldNotBeNull(); (await _efCoreAsyncQueryableProvider.ToListAsync(query)).Count.ShouldBeGreaterThan(0); @@ -54,4 +57,4 @@ namespace Volo.Abp.EntityFrameworkCore } } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs index 3d5d7b656b..ab3217b9f3 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Basic_Tests.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Shouldly; +using Volo.Abp.Domain.Repositories; using Volo.Abp.TestApp.Testing; using Xunit; diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs index a5b8aa0577..8149cdbe32 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Queryable_Tests.cs @@ -26,9 +26,9 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories [Fact] public async Task GetBookList() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - _bookRepository.Any().ShouldBeTrue(); + (await _bookRepository.AnyAsync()).ShouldBeTrue(); return Task.CompletedTask; }); } @@ -36,9 +36,9 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories [Fact] public async Task GetPhoneInSecondDbContextList() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - _phoneInSecondDbContextRepository.Any().ShouldBeTrue(); + (await _phoneInSecondDbContextRepository.AnyAsync()).ShouldBeTrue(); return Task.CompletedTask; }); } @@ -46,9 +46,9 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories [Fact] public async Task EfCore_Include_Extension() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.Include(p => p.Phones).Single(p => p.Id == TestDataBuilder.UserDouglasId); + var person = await (await PersonRepository.GetDbSetAsync()).Include(p => p.Phones).SingleAsync(p => p.Id == TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); return Task.CompletedTask; diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs index cd85cbcb5a..b3d1663edb 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.TestApp.Domain; diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs index 22013d9b63..3daff7049c 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider_Tests.cs @@ -24,10 +24,10 @@ namespace Volo.Abp.MongoDB } [Fact] - public void Should_Accept_MongoDb_Related_Queries() + public async Task Should_Accept_MongoDb_Related_Queries() { - var query = _personRepository.Where(p => p.Age > 0); - + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0); + _mongoDbAsyncQueryableProvider.CanExecute(query).ShouldBeTrue(); } @@ -35,17 +35,17 @@ namespace Volo.Abp.MongoDB public void Should_Not_Accept_Other_Providers() { var query = new[] {1, 2, 3}.AsQueryable().Where(x => x > 0); - + _mongoDbAsyncQueryableProvider.CanExecute(query).ShouldBeFalse(); } - + [Fact] public async Task Should_Execute_Queries() { using (var uow = _unitOfWorkManager.Begin()) { - var query = _personRepository.Where(p => p.Age > 0).OrderBy(p => p.Name); - + var query = (await _personRepository.GetQueryableAsync()).Where(p => p.Age > 0).OrderBy(p => p.Name); + (await _mongoDbAsyncQueryableProvider.CountAsync(query) > 0).ShouldBeTrue(); (await _mongoDbAsyncQueryableProvider.FirstOrDefaultAsync(query)).ShouldNotBeNull(); (await _mongoDbAsyncQueryableProvider.ToListAsync(query)).Count.ShouldBeGreaterThan(0); @@ -54,4 +54,4 @@ namespace Volo.Abp.MongoDB } } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs index 5335aa11be..48f74ab3a2 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs @@ -27,7 +27,7 @@ namespace Volo.Abp.MongoDB.Repositories [Fact] public async Task CanExecuteAsync() { - _mongoDbAsyncQueryableProvider.CanExecute(_personRepository).ShouldBeTrue(); + _mongoDbAsyncQueryableProvider.CanExecute(await _personRepository.GetQueryableAsync()).ShouldBeTrue(); _mongoDbAsyncQueryableProvider.CanExecute(await _personRepository.WithDetailsAsync()).ShouldBeTrue(); } @@ -36,7 +36,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.FirstOrDefaultAsync(_personRepository.Where(p => p.Name == "Douglas"))).ShouldNotBeNull(); + (await _mongoDbAsyncQueryableProvider.FirstOrDefaultAsync((await _personRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas"))).ShouldNotBeNull(); await uow.CompleteAsync(); } } @@ -46,7 +46,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.AnyAsync(_personRepository, p => p.Name == "Douglas")).ShouldBeTrue(); + (await _mongoDbAsyncQueryableProvider.AnyAsync(await _personRepository.GetQueryableAsync(), p => p.Name == "Douglas")).ShouldBeTrue(); await uow.CompleteAsync(); } } @@ -56,7 +56,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.CountAsync(_personRepository.Where(p => p.Name == "Douglas"))).ShouldBeGreaterThan(0); + (await _mongoDbAsyncQueryableProvider.CountAsync((await _personRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas"))).ShouldBeGreaterThan(0); await uow.CompleteAsync(); } } @@ -66,7 +66,7 @@ namespace Volo.Abp.MongoDB.Repositories { using (var uow = _unitOfWorkManager.Begin()) { - (await _mongoDbAsyncQueryableProvider.LongCountAsync(_personRepository)).ShouldBeGreaterThan(0); + (await _mongoDbAsyncQueryableProvider.LongCountAsync(await _personRepository.GetQueryableAsync())).ShouldBeGreaterThan(0); await uow.CompleteAsync(); } } diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs index 09b1551e3d..0be9b43db0 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs @@ -14,21 +14,21 @@ namespace Volo.Abp.MongoDB.Repositories public class Repository_Basic_Tests : Repository_Basic_Tests { [Fact] - public void ToMongoQueryable_Test() + public async Task ToMongoQueryable_Test() { - ((IMongoQueryable) PersonRepository).ShouldNotBeNull(); - PersonRepository.As>().ShouldNotBeNull(); - ((IMongoQueryable) PersonRepository.Where(p => p.Name == "Douglas")).ShouldNotBeNull(); - PersonRepository.Where(p => p.Name == "Douglas").As>().ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).As>().ShouldNotBeNull(); + ((IMongoQueryable)(await PersonRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas")).ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).Where(p => p.Name == "Douglas").As>().ShouldNotBeNull(); } [Fact] public async Task Linq_Queries() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - PersonRepository.FirstOrDefault(p => p.Name == "Douglas").ShouldNotBeNull(); - PersonRepository.Count().ShouldBeGreaterThan(0); + (await PersonRepository.GetQueryableAsync()).FirstOrDefault(p => p.Name == "Douglas").ShouldNotBeNull(); + (await PersonRepository.GetQueryableAsync()).Count().ShouldBeGreaterThan(0); return Task.CompletedTask; }); } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs index f7e7fde5e2..645d413692 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/DistrictAppService.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.TestApp.Application //This is especially used to test the AbstractKeyCrudAppService public class DistrictAppService : AbstractKeyCrudAppService { - public DistrictAppService(IRepository repository) + public DistrictAppService(IRepository repository) : base(repository) { } @@ -23,7 +23,7 @@ namespace Volo.Abp.TestApp.Application protected override async Task GetEntityByIdAsync(DistrictKey id) { return await AsyncExecuter.FirstOrDefaultAsync( - Repository.Where(d => d.CityId == id.CityId && d.Name == id.Name) + (await Repository.GetQueryableAsync()).Where(d => d.CityId == id.CityId && d.Name == id.Name) ); } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs index 04d0dda3c4..27154ba8de 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs @@ -13,7 +13,7 @@ using Xunit; namespace Volo.Abp.TestApp.Testing { - public abstract class DomainEvents_Tests : TestAppTestBase + public abstract class DomainEvents_Tests : TestAppTestBase where TStartupModule : IAbpModule { protected readonly IRepository PersonRepository; @@ -35,7 +35,7 @@ namespace Volo.Abp.TestApp.Testing bool douglesNameChangeHandled = false; bool customEventHandled = false; bool customEvent2Handled = false; - + LocalEventBus.Subscribe>(data => { data.Entity.Name.ShouldBe("TestPerson1"); @@ -46,7 +46,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe(data => { data.Value.ShouldBe("42"); @@ -57,7 +57,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe(data => { data.OldName.ShouldBe("Douglas"); @@ -69,7 +69,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe>(data => { data.Entity.Name.ShouldBe("Douglas-Updated"); @@ -80,7 +80,7 @@ namespace Volo.Abp.TestApp.Testing customEvent2Handled.ShouldBeFalse(); return Task.CompletedTask; }); - + LocalEventBus.Subscribe(data => { data.Value.ShouldBe("44"); @@ -97,13 +97,13 @@ namespace Volo.Abp.TestApp.Testing await PersonRepository.InsertAsync( new Person(Guid.NewGuid(), "TestPerson1", 42) ); - + await LocalEventBus.PublishAsync(new MyCustomEventData { Value = "42" }); var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); douglas.ChangeName("Douglas-Updated"); await PersonRepository.UpdateAsync(douglas); - + await LocalEventBus.PublishAsync(new MyCustomEventData2 { Value = "44" }); }); } @@ -112,7 +112,7 @@ namespace Volo.Abp.TestApp.Testing public virtual async Task Should_Rollback_Uow_If_Event_Handler_Throws_Exception() { (await PersonRepository.FindAsync(x => x.Name == "TestPerson1")).ShouldBeNull(); - + LocalEventBus.Subscribe>(data => { data.Entity.Name.ShouldBe("TestPerson1"); @@ -128,7 +128,7 @@ namespace Volo.Abp.TestApp.Testing ); }); }); - + exception.Message.ShouldBe("Just to rollback the UOW"); (await PersonRepository.FindAsync(x => x.Name == "TestPerson1")).ShouldBeNull(); @@ -162,7 +162,7 @@ namespace Volo.Abp.TestApp.Testing await WithUnitOfWorkAsync(async () => { - var dougles = PersonRepository.Single(b => b.Name == "Douglas"); + var dougles = await PersonRepository.SingleAsync(b => b.Name == "Douglas"); dougles.ChangeName("Douglas-Changed"); await PersonRepository.UpdateAsync(dougles); }); @@ -172,15 +172,15 @@ namespace Volo.Abp.TestApp.Testing isLocalEventTriggered.ShouldBeTrue(); isDistributedEventTriggered.ShouldBeTrue(); } - + private class MyCustomEventData { public string Value { get; set; } } - + private class MyCustomEventData2 { public string Value { get; set; } } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs index da3e33ffea..2a4a012217 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/MultiTenant_Filter_Tests.cs @@ -14,7 +14,7 @@ using Xunit; namespace Volo.Abp.TestApp.Testing { - public abstract class MultiTenant_Filter_Tests : TestAppTestBase + public abstract class MultiTenant_Filter_Tests : TestAppTestBase where TStartupModule : IAbpModule { private ICurrentTenant _fakeCurrentTenant; @@ -36,13 +36,13 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Get_Person_For_Current_Tenant() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { //TenantId = null _fakeCurrentTenant.Id.Returns((Guid?)null); - var people = _personRepository.ToList(); + var people = await _personRepository.ToListAsync(); people.Count.ShouldBe(1); people.Any(p => p.Name == "Douglas").ShouldBeTrue(); @@ -50,7 +50,7 @@ namespace Volo.Abp.TestApp.Testing _fakeCurrentTenant.Id.Returns(TestDataBuilder.TenantId1); - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(2); people.Any(p => p.Name == TestDataBuilder.TenantId1 + "-Person1").ShouldBeTrue(); people.Any(p => p.Name == TestDataBuilder.TenantId1 + "-Person2").ShouldBeTrue(); @@ -59,7 +59,7 @@ namespace Volo.Abp.TestApp.Testing _fakeCurrentTenant.Id.Returns(TestDataBuilder.TenantId2); - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(0); return Task.CompletedTask; @@ -69,19 +69,19 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Get_All_People_When_MultiTenant_Filter_Is_Disabled() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { List people; using (_multiTenantFilter.Disable()) { //Filter disabled manually - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(3); } //Filter re-enabled automatically - people = _personRepository.ToList(); + people = await _personRepository.ToListAsync(); people.Count.ShouldBe(1); return Task.CompletedTask; diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs index 821a80492b..4347120d36 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs @@ -22,9 +22,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public virtual async Task FirstOrDefault() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var entity = EntityWithIntPkRepository.FirstOrDefault(e => e.Name == "Entity1"); + var entity = await EntityWithIntPkRepository.FirstOrDefaultAsync(e => e.Name == "Entity1"); entity.ShouldNotBeNull(); entity.Name.ShouldBe("Entity1"); return Task.CompletedTask; diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs index 3ca511a7ea..c8710bbf2c 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs @@ -23,9 +23,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Any() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - PersonRepository.Any().ShouldBeTrue(); + (await PersonRepository.AnyAsync()).ShouldBeTrue(); return Task.CompletedTask; }); } @@ -33,9 +33,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Single() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.Single(p => p.Id == TestDataBuilder.UserDouglasId); + var person = await PersonRepository.SingleAsync(p => p.Id == TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); return Task.CompletedTask; }); diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs index c26134b27c..9ce5499d7f 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Specifications_Tests.cs @@ -24,9 +24,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task SpecificationWithRepository_Test() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - CityRepository.Count(new CitySpecification().ToExpression()).ShouldBe(1); + (await CityRepository.CountAsync(new CitySpecification().ToExpression())).ShouldBe(1); return Task.CompletedTask; }); } @@ -39,4 +39,4 @@ namespace Volo.Abp.TestApp.Testing return city => city.Name == "Istanbul"; } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs index f3ac8c301f..514f2d2648 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Filter_Tests.cs @@ -10,7 +10,7 @@ using Xunit; namespace Volo.Abp.TestApp.Testing { - public abstract class SoftDelete_Filter_Tests : TestAppTestBase + public abstract class SoftDelete_Filter_Tests : TestAppTestBase where TStartupModule : IAbpModule { protected readonly IRepository PersonRepository; @@ -25,9 +25,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Not_Get_Deleted_Entities_Linq() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.FirstOrDefault(p => p.Name == "John-Deleted"); + var person = await PersonRepository.FirstOrDefaultAsync(p => p.Name == "John-Deleted"); person.ShouldBeNull(); return Task.CompletedTask; }); @@ -46,9 +46,9 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Not_Get_Deleted_Entities_By_Default_ToList() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var people = PersonRepository.ToList(); + var people = await PersonRepository.ToListAsync(); people.Count.ShouldBe(1); people.Any(p => p.Name == "Douglas").ShouldBeTrue(); return Task.CompletedTask; @@ -58,36 +58,36 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task Should_Get_Deleted_Entities_When_Filter_Is_Disabled() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { //Soft delete is enabled by default - var people = PersonRepository.ToList(); + var people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeFalse(); using (DataFilter.Disable()) { //Soft delete is disabled - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeTrue(); using (DataFilter.Enable()) { //Soft delete is enabled again - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeFalse(); } //Soft delete is disabled (restored previous state) - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeTrue(); } //Soft delete is enabled (restored previous state) - people = PersonRepository.ToList(); + people = await PersonRepository.ToListAsync(); people.Any(p => !p.IsDeleted).ShouldBeTrue(); people.Any(p => p.IsDeleted).ShouldBeFalse(); diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index 5da11fe767..a240732236 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -69,7 +69,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore public virtual async Task GetCountAsync(string filter = null, CancellationToken cancellationToken = default) { - return await this + return await (await GetQueryableAsync()) .WhereIf( !filter.IsNullOrWhiteSpace(), u => diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs index 635d9fc8fd..55ed754509 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Users.EntityFrameworkCore public async Task FindByUserNameAsync(string userName, CancellationToken cancellationToken = default) { - return await this.OrderBy(x => x.Id).FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()).OrderBy(x => x.Id).FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)); } public virtual async Task> GetListAsync(IEnumerable ids, CancellationToken cancellationToken = default) From 6a3e4e3e5e8e9bc5769f8f160eeb4e51ce8df9ff Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 26 Sep 2021 17:10:42 +0800 Subject: [PATCH 29/55] Introduce `AbpMongoDbDateTimeSerializer`. `MongoDb` will normalize the datetime based on `AbpClockOptions`. --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 24 +++--- .../Volo/Abp/MongoDB/AbpMongoDbContext.cs | 2 + .../MongoDB/AbpMongoDbDateTimeSerializer.cs | 43 ++++++++++ .../Volo/Abp/MongoDB/MongoModelBuilder.cs | 60 +++++++++++++- .../ModelBindingController_Tests.cs | 18 ++--- .../AbpEntityFrameworkCoreTestModule.cs | 4 - .../UnitTestModelCacheKeyFactory.cs | 17 ++++ .../AbpDateTimeValueConverter_Tests.cs | 9 --- .../EFCore_DateTimeKindTests.cs | 66 +++++++++++++++ .../EntityFrameworkCore/TestAppDbContext.cs | 7 ++ .../Serializer/MongoDB_DateTimeKind_Tests.cs | 81 +++++++++++++++++++ .../Abp/TestApp/MongoDb/PersonRepository.cs | 30 +++++++ .../AbpDateTimeValueConverter_Tests.cs | 73 ----------------- .../Abp/TestApp/Testing/DateTimeKind_Tests.cs | 46 +++++++++++ 14 files changed, 371 insertions(+), 109 deletions(-) create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbDateTimeSerializer.cs create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/UnitTestModelCacheKeyFactory.cs delete mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter_Tests.cs create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs create mode 100644 framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs create mode 100644 framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/PersonRepository.cs delete mode 100644 framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs create mode 100644 framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 588b052140..f873c2356e 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -61,9 +61,9 @@ namespace Volo.Abp.EntityFrameworkCore public IUnitOfWorkManager UnitOfWorkManager => LazyServiceProvider.LazyGetRequiredService(); public IClock Clock => LazyServiceProvider.LazyGetRequiredService(); - + public IDistributedEventBus DistributedEventBus => LazyServiceProvider.LazyGetRequiredService(); - + public ILocalEventBus LocalEventBus => LazyServiceProvider.LazyGetRequiredService(); public ILogger> Logger => LazyServiceProvider.LazyGetService>>(NullLogger>.Instance); @@ -167,9 +167,9 @@ namespace Volo.Abp.EntityFrameworkCore } var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); - + PublishEntityEvents(eventReport); - + if (entityChangeList != null) { EntityHistoryHelper.UpdateChangeList(entityChangeList); @@ -285,11 +285,11 @@ namespace Volo.Abp.EntityFrameworkCore } } } - + private void PublishEventsForTrackedEntity(EntityEntry entry) { switch (entry.State) - { + { case EntityState.Added: EntityChangeEventHelper.PublishEntityCreatingEvent(entry.Entity); EntityChangeEventHelper.PublishEntityCreatedEvent(entry.Entity); @@ -308,7 +308,7 @@ namespace Volo.Abp.EntityFrameworkCore EntityChangeEventHelper.PublishEntityUpdatedEvent(entry.Entity); } } - + break; case EntityState.Deleted: EntityChangeEventHelper.PublishEntityDeletingEvent(entry.Entity); @@ -324,11 +324,11 @@ namespace Volo.Abp.EntityFrameworkCore ApplyAbpConcepts(entry); } } - + protected virtual EntityEventReport CreateEventReport() { var eventReport = new EntityEventReport(); - + foreach (var entry in ChangeTracker.Entries().ToList()) { var generatesDomainEventsEntity = entry.Entity as IGeneratesDomainEvents; @@ -369,7 +369,7 @@ namespace Volo.Abp.EntityFrameworkCore return eventReport; } - + protected virtual void ApplyAbpConcepts(EntityEntry entry) { switch (entry.State) @@ -638,7 +638,7 @@ namespace Volo.Abp.EntityFrameworkCore !typeof(TEntity).IsDefined(typeof(OwnedAttribute), true) && !mutableEntityType.IsOwned()) { - if (LazyServiceProvider == null || Clock == null || !Clock.SupportsMultipleTimezone) + if (LazyServiceProvider == null || Clock == null) { return; } @@ -650,7 +650,7 @@ namespace Volo.Abp.EntityFrameworkCore (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?)) && property.CanWrite && - !property.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) + ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(property) == null ).ToList(); dateTimePropertyInfos.ForEach(property => diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs index 5e7eb84111..93633e3cc8 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs @@ -6,6 +6,8 @@ namespace Volo.Abp.MongoDB { public abstract class AbpMongoDbContext : IAbpMongoDbContext, ITransientDependency { + public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + public IMongoModelSource ModelSource { get; set; } public IMongoClient Client { get; private set; } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbDateTimeSerializer.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbDateTimeSerializer.cs new file mode 100644 index 0000000000..c3e9efba5a --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbDateTimeSerializer.cs @@ -0,0 +1,43 @@ +using System; +using MongoDB.Bson; +using MongoDB.Bson.Serialization; +using MongoDB.Bson.Serialization.Serializers; + +namespace Volo.Abp.MongoDB +{ + public class AbpMongoDbDateTimeSerializer : DateTimeSerializer + { + protected DateTimeKind DateTimeKind { get; set; } + protected bool DisableDateTimeNormalization{ get; set; } + + public AbpMongoDbDateTimeSerializer(DateTimeKind dateTimeKind , bool disableDateTimeNormalization) + { + DateTimeKind = dateTimeKind; + DisableDateTimeNormalization = disableDateTimeNormalization; + } + + public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, DateTime value) + { + context.Writer.WriteDateTime(DisableDateTimeNormalization + ? ToMillisecondsSinceEpoch(value) + : ToMillisecondsSinceEpoch(DateTime.SpecifyKind(value, DateTimeKind))); + } + + public override DateTime Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) + { + var dateTime = new BsonDateTime(context.Reader.ReadDateTime()).ToUniversalTime(); + return DateTime.SpecifyKind(dateTime, DisableDateTimeNormalization ? DateTimeKind.Unspecified : DateTimeKind); + } + + private static long ToMillisecondsSinceEpoch(DateTime dateTime) + { + return (dateTime - BsonConstants.UnixEpoch).Ticks / 10000L; + } + + // For unit testing. + internal void SetDateTimeKind(DateTimeKind dateTimeKind) + { + DateTimeKind = dateTimeKind; + } + } +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs index 6d8706d7ee..1f155fc21d 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs @@ -3,9 +3,13 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; +using System.Reflection; +using Microsoft.Extensions.Options; using MongoDB.Bson; +using MongoDB.Bson.Serialization.Serializers; using MongoDB.Driver; -using Volo.Abp.Domain.Entities; +using Volo.Abp.Reflection; +using Volo.Abp.Timing; namespace Volo.Abp.MongoDB { @@ -20,10 +24,12 @@ namespace Volo.Abp.MongoDB _entityModelBuilders = new Dictionary(); } - public MongoDbContextModel Build(AbpMongoDbContext dbContext) + public virtual MongoDbContextModel Build(AbpMongoDbContext dbContext) { lock (SyncObj) { + var clockOptions = dbContext.LazyServiceProvider?.LazyGetService>(); + var entityModels = _entityModelBuilders .Select(x => x.Value) .Cast() @@ -34,6 +40,33 @@ namespace Volo.Abp.MongoDB foreach (var entityModel in entityModels.Values) { var map = entityModel.As().GetMap(); + + if (clockOptions != null) + { + var dateTimePropertyInfos = entityModel.EntityType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) + .Where(property => + (property.PropertyType == typeof(DateTime) || + property.PropertyType == typeof(DateTime?)) && + property.CanWrite + ).ToList(); + + dateTimePropertyInfos.ForEach(property => + { + var disableDateTimeNormalization = + entityModel.EntityType.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true) || + ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(property) != null; + + if (property.PropertyType == typeof(DateTime?)) + { + map.MapProperty(property.Name).SetSerializer(new NullableSerializer().WithSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, disableDateTimeNormalization))); + } + else + { + map.MapProperty(property.Name).SetSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, disableDateTimeNormalization)); + } + }); + } + if (!BsonClassMap.IsClassMapRegistered(map.ClassType)) { BsonClassMap.RegisterClassMap(map); @@ -52,6 +85,29 @@ namespace Volo.Abp.MongoDB { var map = new BsonClassMap(baseClass); map.ConfigureAbpConventions(); + + if (clockOptions != null) + { + var dateTimePropertyInfos = baseClass.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) + .Where(property => + (property.PropertyType == typeof(DateTime) || + property.PropertyType == typeof(DateTime?)) && + property.CanWrite + ).ToList(); + + dateTimePropertyInfos.ForEach(property => + { + if (property.PropertyType == typeof(DateTime?)) + { + map.MapProperty(property.Name).SetSerializer(new NullableSerializer().WithSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, false))); + } + else + { + map.MapProperty(property.Name).SetSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, false)); + } + }); + } + BsonClassMap.RegisterClassMap(map); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs index fcce316772..8ae0cfd9cb 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { public abstract class ModelBindingController_Tests : AspNetCoreMvcTestBase { - protected DateTimeKind DateTimeKind { get; set; } + protected DateTimeKind Kind { get; set; } protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) { @@ -34,7 +34,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding response.StatusCode.ShouldBe(HttpStatusCode.OK); var resultAsString = await response.Content.ReadAsStringAsync(); - resultAsString.ShouldBe(DateTimeKind.ToString().ToLower()); + resultAsString.ShouldBe(Kind.ToString().ToLower()); } [Fact] @@ -45,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding response.StatusCode.ShouldBe(HttpStatusCode.OK); var resultAsString = await response.Content.ReadAsStringAsync(); - resultAsString.ShouldBe(DateTimeKind.ToString().ToLower()); + resultAsString.ShouldBe(Kind.ToString().ToLower()); } [Fact] @@ -89,7 +89,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding var resultAsString = await response.Content.ReadAsStringAsync(); //Time parameter(2010-01-01T00:00:00Z) with time zone information, so the default Kind is UTC //https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-50?view=aspnetcore-3.1&tabs=visual-studio#datetime-values-are-model-bound-as-utc-times - resultAsString.ShouldBe($"utc_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_utc"); + resultAsString.ShouldBe($"utc_{Kind.ToString().ToLower()}_{Kind.ToString().ToLower()}_utc"); } [Fact] @@ -111,7 +111,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding response.StatusCode.ShouldBe(HttpStatusCode.OK); var resultAsString = await response.Content.ReadAsStringAsync(); - resultAsString.ShouldBe($"local_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_local"); + resultAsString.ShouldBe($"local_{Kind.ToString().ToLower()}_{Kind.ToString().ToLower()}_local"); } } @@ -119,8 +119,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) { - DateTimeKind = DateTimeKind.Utc; - services.Configure(x => x.Kind = DateTimeKind); + Kind = DateTimeKind.Utc; + services.Configure(x => x.Kind = Kind); base.ConfigureServices(context, services); } @@ -130,8 +130,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) { - DateTimeKind = DateTimeKind.Local; - services.Configure(x => x.Kind = DateTimeKind); + Kind = DateTimeKind.Local; + services.Configure(x => x.Kind = Kind); base.ConfigureServices(context, services); } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs index 4f8faef65e..49713b3c1d 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs @@ -1,4 +1,3 @@ -using System; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; @@ -13,7 +12,6 @@ using Volo.Abp.Modularity; using Volo.Abp.TestApp; using Volo.Abp.TestApp.Domain; using Volo.Abp.TestApp.EntityFrameworkCore; -using Volo.Abp.Timing; namespace Volo.Abp.EntityFrameworkCore { @@ -55,8 +53,6 @@ namespace Volo.Abp.EntityFrameworkCore abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection); }); }); - - Configure(options => options.Kind = DateTimeKind.Utc); } public override void OnPreApplicationInitialization(ApplicationInitializationContext context) diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/UnitTestModelCacheKeyFactory.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/UnitTestModelCacheKeyFactory.cs new file mode 100644 index 0000000000..0686bfb614 --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/UnitTestModelCacheKeyFactory.cs @@ -0,0 +1,17 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; + +namespace Volo.Abp.EntityFrameworkCore +{ + /// + /// Avoid unit test caching the configure of the entity. + /// OnModelCreating will be executed multiple times + /// + public class UnitTestModelCacheKeyFactory : IModelCacheKeyFactory + { + public object Create(DbContext context) + { + return context; + } + } +} diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter_Tests.cs deleted file mode 100644 index c2793b3b67..0000000000 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter_Tests.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Volo.Abp.TestApp.Testing; - -namespace Volo.Abp.EntityFrameworkCore.ValueConverters -{ - public class AbpDateTimeValueConverter_Tests : AbpDateTimeValueConverter_Tests - { - - } -} \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs new file mode 100644 index 0000000000..8a39819a2e --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs @@ -0,0 +1,66 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.TestApp.Domain; +using Volo.Abp.TestApp.Testing; +using Volo.Abp.Timing; +using Xunit; + +namespace Volo.Abp.EntityFrameworkCore.ValueConverters +{ + public abstract class EFCore_DateTimeKindTests : DateTimeKind_Tests + { + [Fact] + public async Task DateTime_Kind_Should_Be_Normalized_In_View_Query_Test() + { + var personName = "bob lee"; + await PersonRepository.InsertAsync(new Person(Guid.NewGuid(), personName, 18) + { + Birthday = DateTime.Parse("2020-01-01 00:00:00"), + LastActive = DateTime.Parse("2020-01-01 00:00:00"), + }, true); + + var person = await PersonRepository.GetViewAsync(personName); + + person.ShouldNotBeNull(); + person.CreationTime.Kind.ShouldBe(Kind); + + person.Birthday.ShouldNotBeNull(); + person.Birthday.Value.Kind.ShouldBe(Kind); + person.Birthday.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); + + //LastActive DisableDateTimeNormalization + person.LastActive.ShouldNotBeNull(); + person.LastActive.Value.Kind.ShouldBe(DateTimeKind.Unspecified); + person.LastActive.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); + } + } + + public class DateTimeKindTests : EFCore_DateTimeKindTests + { + protected override void AfterAddApplication(IServiceCollection services) + { + Kind = DateTimeKind.Unspecified; + services.Configure(x => x.Kind = Kind); + } + } + + public class DateTimeKindTests_Local : EFCore_DateTimeKindTests + { + protected override void AfterAddApplication(IServiceCollection services) + { + Kind = DateTimeKind.Local; + services.Configure(x => x.Kind = Kind); + } + } + + public class DateTimeKindTests_Utc : EFCore_DateTimeKindTests + { + protected override void AfterAddApplication(IServiceCollection services) + { + Kind = DateTimeKind.Utc; + services.Configure(x => x.Kind = Kind); + } + } +} diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs index 014c9c42db..f7fd1b046d 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs @@ -1,5 +1,6 @@ using System; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; using Volo.Abp.DependencyInjection; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; @@ -34,6 +35,12 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.ReplaceService(); + base.OnConfiguring(optionsBuilder); + } + protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Owned(); diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs new file mode 100644 index 0000000000..f691145d60 --- /dev/null +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs @@ -0,0 +1,81 @@ +using System; +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; +using MongoDB.Bson.Serialization; +using MongoDB.Bson.Serialization.Serializers; +using Volo.Abp.TestApp.Testing; +using Volo.Abp.Timing; +using Xunit; + +namespace Volo.Abp.MongoDB.Serializer +{ + [Collection(MongoTestCollection.Name)] + public abstract class MongoDB_DateTimeKind_Tests : DateTimeKind_Tests, IDisposable + { + protected override void AfterAddApplication(IServiceCollection services) + { + // MongoDB uses static properties to store the mapping information, + // We must reconfigure it in the new unit test. + foreach (var registeredClassMap in BsonClassMap.GetRegisteredClassMaps()) + { + var frozen = registeredClassMap.GetType().BaseType?.GetField("_frozen", BindingFlags.NonPublic | BindingFlags.Instance); + frozen?.SetValue(registeredClassMap, false); + + foreach (var declaredMemberMap in registeredClassMap.DeclaredMemberMaps) + { + var serializer = declaredMemberMap.GetSerializer(); + switch (serializer) + { + case AbpMongoDbDateTimeSerializer dateTimeSerializer: + dateTimeSerializer.SetDateTimeKind(Kind); + break; + case NullableSerializer nullableSerializer: + { + var lazySerializer = nullableSerializer.GetType() + ?.GetField("_lazySerializer", BindingFlags.NonPublic | BindingFlags.Instance) + ?.GetValue(serializer)?.As>>(); + + if (lazySerializer?.Value is AbpMongoDbDateTimeSerializer dateTimeSerializer) + { + dateTimeSerializer.SetDateTimeKind(Kind); + } + break; + } + } + } + + frozen?.SetValue(registeredClassMap, true); + } + } + } + + public class DateTimeKindTests_Unspecified : MongoDB_DateTimeKind_Tests + { + protected override void AfterAddApplication(IServiceCollection services) + { + Kind = DateTimeKind.Unspecified; + services.Configure(x => x.Kind = Kind); + base.AfterAddApplication(services); + } + } + + public class DateTimeKindTests_Local : MongoDB_DateTimeKind_Tests + { + protected override void AfterAddApplication(IServiceCollection services) + { + Kind = DateTimeKind.Local; + services.Configure(x => x.Kind = Kind); + base.AfterAddApplication(services); + } + } + + public class DateTimeKindTests_Utc : MongoDB_DateTimeKind_Tests + { + protected override void AfterAddApplication(IServiceCollection services) + { + Kind = DateTimeKind.Utc; + services.Configure(x => x.Kind = Kind); + base.AfterAddApplication(services); + } + } +} diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/PersonRepository.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/PersonRepository.cs new file mode 100644 index 0000000000..3ed46288f1 --- /dev/null +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/PersonRepository.cs @@ -0,0 +1,30 @@ +using System; +using System.Threading.Tasks; +using MongoDB.Driver; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.Abp.TestApp.Domain; + +namespace Volo.Abp.TestApp.MongoDB +{ + public class PersonRepository : MongoDbRepository, IPersonRepository + { + public PersonRepository(IMongoDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + + } + + public async Task GetViewAsync(string name) + { + var person = await (await (await GetCollectionAsync()).FindAsync(x => x.Name == name)).FirstOrDefaultAsync(); + return new PersonView() + { + Name = person.Name, + CreationTime = person.CreationTime, + Birthday = person.Birthday, + LastActive = person.LastActive + }; + } + } +} diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs deleted file mode 100644 index e36225e53c..0000000000 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/AbpDateTimeValueConverter_Tests.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using Shouldly; -using Volo.Abp.Domain.Repositories; -using Volo.Abp.Modularity; -using Volo.Abp.TestApp.Domain; -using Volo.Abp.Timing; -using Xunit; - -namespace Volo.Abp.TestApp.Testing -{ - public abstract class AbpDateTimeValueConverter_Tests : TestAppTestBase - where TStartupModule : IAbpModule - { - private readonly IPersonRepository _personRepository; - - protected AbpDateTimeValueConverter_Tests() - { - _personRepository = GetRequiredService(); - } - - [Fact] - public async Task DateTime_Kind_Should_Be_Normalized_To_UTC_Test() - { - var personId = Guid.Parse("4125582e-d100-4c27-aa84-e4de85830dca"); - await _personRepository.InsertAsync(new Person(personId, "bob lee", 18) - { - Birthday = DateTime.Parse("2020-01-01 00:00:00"), - LastActive = DateTime.Parse("2020-01-01 00:00:00"), - }, true); - - var person = await _personRepository.GetAsync(personId); - - person.ShouldNotBeNull(); - person.CreationTime.Kind.ShouldBe(DateTimeKind.Utc); - - person.Birthday.ShouldNotBeNull(); - person.Birthday.Value.Kind.ShouldBe(DateTimeKind.Utc); - person.Birthday.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); - - //LastActive DisableDateTimeNormalization - person.LastActive.ShouldNotBeNull(); - person.LastActive.Value.Kind.ShouldBe(DateTimeKind.Unspecified); - person.LastActive.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); - } - - [Fact] - public async Task DateTime_Kind_Should_Be_Normalized_To_UTC_View_Test() - { - var personName = "bob lee"; - await _personRepository.InsertAsync(new Person(Guid.NewGuid(), personName, 18) - { - Birthday = DateTime.Parse("2020-01-01 00:00:00"), - LastActive = DateTime.Parse("2020-01-01 00:00:00"), - }, true); - - var person = await _personRepository.GetViewAsync(personName); - - person.ShouldNotBeNull(); - person.CreationTime.Kind.ShouldBe(DateTimeKind.Utc); - - person.Birthday.ShouldNotBeNull(); - person.Birthday.Value.Kind.ShouldBe(DateTimeKind.Utc); - person.Birthday.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); - - //LastActive DisableDateTimeNormalization - person.LastActive.ShouldNotBeNull(); - person.LastActive.Value.Kind.ShouldBe(DateTimeKind.Unspecified); - person.LastActive.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); - } - } -} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs new file mode 100644 index 0000000000..2e13db34b8 --- /dev/null +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DateTimeKind_Tests.cs @@ -0,0 +1,46 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Modularity; +using Volo.Abp.TestApp.Domain; +using Xunit; + +namespace Volo.Abp.TestApp.Testing +{ + public abstract class DateTimeKind_Tests : TestAppTestBase + where TStartupModule : IAbpModule + { + protected IPersonRepository PersonRepository { get; } + protected DateTimeKind Kind { get; set; } + + protected DateTimeKind_Tests() + { + PersonRepository = GetRequiredService(); + } + + [Fact] + public async Task DateTime_Kind_Should_Be_Normalized_Test() + { + var personId = Guid.NewGuid(); + await PersonRepository.InsertAsync(new Person(personId, "bob lee", 18) + { + Birthday = DateTime.Parse("2020-01-01 00:00:00"), + LastActive = DateTime.Parse("2020-01-01 00:00:00"), + }, true); + + var person = await PersonRepository.GetAsync(personId); + + person.ShouldNotBeNull(); + person.CreationTime.Kind.ShouldBe(Kind); + + person.Birthday.ShouldNotBeNull(); + person.Birthday.Value.Kind.ShouldBe(Kind); + person.Birthday.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); + + //LastActive DisableDateTimeNormalization + person.LastActive.ShouldNotBeNull(); + person.LastActive.Value.Kind.ShouldBe(DateTimeKind.Unspecified); + person.LastActive.Value.ToString("yyy-MM-dd HH:mm:ss").ShouldBe("2020-01-01 00:00:00"); + } + } +} From 9ecea2d83ab51972a3a7ce0cc0ee10f6d573d689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 28 Sep 2021 08:59:23 +0300 Subject: [PATCH 30/55] Update TodoEventHandler.cs --- test/DistEvents/DistDemoApp.Shared/TodoEventHandler.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/DistEvents/DistDemoApp.Shared/TodoEventHandler.cs b/test/DistEvents/DistDemoApp.Shared/TodoEventHandler.cs index c7fd43aea3..7a69ceed1e 100644 --- a/test/DistEvents/DistDemoApp.Shared/TodoEventHandler.cs +++ b/test/DistEvents/DistDemoApp.Shared/TodoEventHandler.cs @@ -41,8 +41,6 @@ namespace DistDemoApp } Console.WriteLine("Increased total count: " + todoSummary); - - //throw new ApplicationException("Thrown to rollback the UOW!"); } public async Task HandleEventAsync(EntityDeletedEto eventData) From 0cf5d248fdf36b29cdd74bf62446a1f5e60368f0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 28 Sep 2021 15:59:22 +0800 Subject: [PATCH 31/55] Complete the Outbox & Inbox Patterns feature --- .../DistributedEvents/DbContextEventInbox.cs | 19 +++--- .../DistributedEvents/DbContextEventOutbox.cs | 15 ++--- .../EventBus/Boxes/AbpEventBusBoxesOptions.cs | 43 +++++++++++++ .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 16 +++-- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 16 +++-- ...bitMqSerializer.cs => IRebusSerializer.cs} | 0 .../Rebus/RebusDistributedEventBus.cs | 37 +++++++++-- .../RebusDistributedEventHandlerAdapter.cs | 2 +- .../AbpDistributedEventBusOptions.cs | 13 +++- .../Abp/EventBus/Distributed/IEventInbox.cs | 11 ++-- .../Abp/EventBus/Distributed/IEventOutbox.cs | 9 +-- .../MongoDbContextEventInbox.cs | 60 +++++++++++++----- .../MongoDbContextEventOutbox.cs | 61 ++++++++++++++++--- .../appsettings.json | 2 +- .../DistDemoApp.MongoDbKafka.csproj | 12 ++++ .../DistDemoAppMongoDbKafkaModule.cs | 38 ++++++++++++ .../DistDemoApp.MongoDbKafka/Program.cs | 53 ++++++++++++++-- .../TodoMongoDbContext.cs | 26 ++++++++ .../DistDemoApp.MongoDbKafka/appsettings.json | 19 ++++++ .../DistDemoApp.MongoDbRebus.csproj | 21 +++++++ .../DistDemoAppMongoDbRebusModule.cs | 53 ++++++++++++++++ .../DistDemoApp.MongoDbRebus/Program.cs | 57 +++++++++++++++++ .../TodoMongoDbContext.cs | 26 ++++++++ .../DistDemoApp.MongoDbRebus/appsettings.json | 19 ++++++ test/DistEvents/DistEventsDemo.sln | 6 ++ 25 files changed, 563 insertions(+), 71 deletions(-) create mode 100644 framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs rename framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/{IRabbitMqSerializer.cs => IRebusSerializer.cs} (100%) create mode 100644 test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoAppMongoDbKafkaModule.cs create mode 100644 test/DistEvents/DistDemoApp.MongoDbKafka/TodoMongoDbContext.cs create mode 100644 test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json create mode 100644 test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj create mode 100644 test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoAppMongoDbRebusModule.cs create mode 100644 test/DistEvents/DistDemoApp.MongoDbRebus/Program.cs create mode 100644 test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs create mode 100644 test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index 2b0a448f74..86fc78cab3 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -1,26 +1,31 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { - public class DbContextEventInbox : IDbContextEventInbox + public class DbContextEventInbox : IDbContextEventInbox where TDbContext : IHasEventInbox { protected IDbContextProvider DbContextProvider { get; } + protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } protected IClock Clock { get; } public DbContextEventInbox( IDbContextProvider dbContextProvider, - IClock clock) + IClock clock, + IOptions distributedEventsOptions) { DbContextProvider = dbContextProvider; Clock = clock; + DistributedEventsOptions = distributedEventsOptions.Value; } [UnitOfWork] @@ -34,7 +39,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents } [UnitOfWork] - public virtual async Task> GetWaitingEventsAsync(int maxCount) + public virtual async Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default) { var dbContext = await DbContextProvider.GetDbContextAsync(); @@ -44,8 +49,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents .Where(x => !x.Processed) .OrderBy(x => x.CreationTime) .Take(maxCount) - .ToListAsync(); - + .ToListAsync(cancellationToken: cancellationToken); + return outgoingEventRecords .Select(x => x.ToIncomingEventInfo()) .ToList(); @@ -76,11 +81,11 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { //TODO: Optimize var dbContext = await DbContextProvider.GetDbContextAsync(); - var timeToKeepEvents = Clock.Now.AddHours(-2); //TODO: Config? + var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); var oldEvents = await dbContext.IncomingEvents .Where(x => x.Processed && x.CreationTime < timeToKeepEvents) .ToListAsync(); dbContext.IncomingEvents.RemoveRange(oldEvents); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs index a785ad7ce5..435bc70398 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.EventBus.Distributed; @@ -8,7 +9,7 @@ using Volo.Abp.Uow; namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { - public class DbContextEventOutbox : IDbContextEventOutbox + public class DbContextEventOutbox : IDbContextEventOutbox where TDbContext : IHasEventOutbox { protected IDbContextProvider DbContextProvider { get; } @@ -18,7 +19,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { DbContextProvider = dbContextProvider; } - + [UnitOfWork] public virtual async Task EnqueueAsync(OutgoingEventInfo outgoingEvent) { @@ -29,17 +30,17 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents } [UnitOfWork] - public virtual async Task> GetWaitingEventsAsync(int maxCount) + public virtual async Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default) { var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); - + var outgoingEventRecords = await dbContext .OutgoingEvents .AsNoTracking() .OrderBy(x => x.CreationTime) .Take(maxCount) - .ToListAsync(); - + .ToListAsync(cancellationToken: cancellationToken); + return outgoingEventRecords .Select(x => x.ToOutgoingEventInfo()) .ToList(); @@ -57,4 +58,4 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs new file mode 100644 index 0000000000..da91d672d3 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs @@ -0,0 +1,43 @@ +using System; + +namespace Volo.Abp.EventBus.Boxes +{ + public class AbpEventBusBoxesOptions + { + /// + /// Default: 6 hours + /// + public TimeSpan CleanOldEventTimeIntervalSpan { get; set; } + + /// + /// Default: 1000 + /// + public int InboxWaitingEventMaxCount { get; set; } + + /// + /// Default: 1000 + /// + public int OutboxWaitingEventMaxCount { get; set; } + + /// + /// Period time of and + /// Default: 2 seconds + /// + public TimeSpan PeriodTimeSpan { get; set; } + + /// + /// Delay time of and + /// Default: 15 seconds + /// + public TimeSpan DelayTimeSpan { get; set; } + + public AbpEventBusBoxesOptions() + { + CleanOldEventTimeIntervalSpan = TimeSpan.FromHours(6); + InboxWaitingEventMaxCount = 1000; + OutboxWaitingEventMaxCount = 1000; + PeriodTimeSpan = TimeSpan.FromSeconds(2); + DelayTimeSpan = TimeSpan.FromSeconds(15); + } + } +} diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index e711e5798e..29cca3d624 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -5,6 +5,7 @@ using Medallion.Threading; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Threading; @@ -23,6 +24,7 @@ namespace Volo.Abp.EventBus.Boxes protected IClock Clock { get; } protected IEventInbox Inbox { get; private set; } protected InboxConfig InboxConfig { get; private set; } + protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; } protected DateTime? LastCleanTime { get; set; } @@ -37,7 +39,8 @@ namespace Volo.Abp.EventBus.Boxes IDistributedEventBus distributedEventBus, IDistributedLockProvider distributedLockProvider, IUnitOfWorkManager unitOfWorkManager, - IClock clock) + IClock clock, + IOptions eventBusBoxesOptions) { ServiceProvider = serviceProvider; Timer = timer; @@ -45,7 +48,8 @@ namespace Volo.Abp.EventBus.Boxes DistributedLockProvider = distributedLockProvider; UnitOfWorkManager = unitOfWorkManager; Clock = clock; - Timer.Period = 2000; //TODO: Config? + EventBusBoxesOptions = eventBusBoxesOptions.Value; + Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Seconds; Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; StoppingTokenSource = new CancellationTokenSource(); @@ -79,7 +83,7 @@ namespace Volo.Abp.EventBus.Boxes { return; } - + await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName, cancellationToken: StoppingToken)) { if (handle != null) @@ -88,7 +92,7 @@ namespace Volo.Abp.EventBus.Boxes while (true) { - var waitingEvents = await Inbox.GetWaitingEventsAsync(1000); //TODO: Config? Pass StoppingToken! + var waitingEvents = await Inbox.GetWaitingEventsAsync(EventBusBoxesOptions.InboxWaitingEventMaxCount, StoppingToken); if (waitingEvents.Count <= 0) { break; @@ -116,14 +120,14 @@ namespace Volo.Abp.EventBus.Boxes else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); - await TaskDelayHelper.DelayAsync(15000, StoppingToken); //TODO: Config? + await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DelayTimeSpan.Milliseconds, StoppingToken); } } } protected virtual async Task DeleteOldEventsAsync() { - if (LastCleanTime != null && LastCleanTime > Clock.Now.AddHours(6)) //TODO: Config? + if (LastCleanTime != null && LastCleanTime > Clock.Now.Add(EventBusBoxesOptions.CleanOldEventTimeIntervalSpan)) { return; } diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index 1be2374268..e8a05c60ba 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -5,6 +5,7 @@ using Medallion.Threading; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Threading; @@ -19,9 +20,10 @@ namespace Volo.Abp.EventBus.Boxes protected IDistributedLockProvider DistributedLockProvider { get; } protected IEventOutbox Outbox { get; private set; } protected OutboxConfig OutboxConfig { get; private set; } + protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; } protected string DistributedLockName => "Outbox_" + OutboxConfig.Name; public ILogger Logger { get; set; } - + protected CancellationTokenSource StoppingTokenSource { get; } protected CancellationToken StoppingToken { get; } @@ -29,13 +31,15 @@ namespace Volo.Abp.EventBus.Boxes IServiceProvider serviceProvider, AbpAsyncTimer timer, IDistributedEventBus distributedEventBus, - IDistributedLockProvider distributedLockProvider) + IDistributedLockProvider distributedLockProvider, + IOptions eventBusBoxesOptions) { ServiceProvider = serviceProvider; Timer = timer; DistributedEventBus = distributedEventBus; DistributedLockProvider = distributedLockProvider; - Timer.Period = 2000; //TODO: Config? + EventBusBoxesOptions = eventBusBoxesOptions.Value; + Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Seconds; Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; StoppingTokenSource = new CancellationTokenSource(); @@ -65,13 +69,13 @@ namespace Volo.Abp.EventBus.Boxes protected virtual async Task RunAsync() { - await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName)) + await using (var handle = await DistributedLockProvider.TryAcquireLockAsync(DistributedLockName, cancellationToken: StoppingToken)) { if (handle != null) { while (true) { - var waitingEvents = await Outbox.GetWaitingEventsAsync(1000); //TODO: Config? + var waitingEvents = await Outbox.GetWaitingEventsAsync(EventBusBoxesOptions.OutboxWaitingEventMaxCount, StoppingToken); if (waitingEvents.Count <= 0) { break; @@ -96,7 +100,7 @@ namespace Volo.Abp.EventBus.Boxes else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); - await TaskDelayHelper.DelayAsync(15000, StoppingToken); //TODO: Config? + await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DelayTimeSpan.Milliseconds, StoppingToken); } } } diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRabbitMqSerializer.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRebusSerializer.cs similarity index 100% rename from framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRabbitMqSerializer.cs rename to framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/IRebusSerializer.cs diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 8dac885036..1cb380679f 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Rebus.Bus; +using Rebus.Pipeline; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Guids; @@ -134,6 +135,19 @@ namespace Volo.Abp.EventBus.Rebus Rebus.Unsubscribe(eventType); } + public async Task ProcessEventAsync(Type eventType, object eventData) + { + var messageId = MessageContext.Current.TransportMessage.GetMessageId(); + var eventName = EventNameAttribute.GetNameOrDefault(eventType); + + if (await AddToInboxAsync(messageId, eventName, eventType, MessageContext.Current.TransportMessage.Body)) + { + return; + } + + await TriggerHandlersAsync(eventType, eventData); + } + protected override async Task PublishToEventBusAsync(Type eventType, object eventData) { await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData); @@ -192,16 +206,29 @@ namespace Volo.Abp.EventBus.Rebus OutgoingEventInfo outgoingEvent, OutboxConfig outboxConfig) { - /* TODO: IMPLEMENT! */ - throw new NotImplementedException(); + var eventType = EventTypes.GetOrDefault(outgoingEvent.EventName); + var eventData = Serializer.Deserialize(outgoingEvent.EventData, eventType); + + return PublishToEventBusAsync(eventType, eventData); } - public override Task ProcessFromInboxAsync( + public override async Task ProcessFromInboxAsync( IncomingEventInfo incomingEvent, InboxConfig inboxConfig) { - /* TODO: IMPLEMENT! */ - throw new NotImplementedException(); + var eventType = EventTypes.GetOrDefault(incomingEvent.EventName); + if (eventType == null) + { + return; + } + + var eventData = Serializer.Deserialize(incomingEvent.EventData, eventType); + var exceptions = new List(); + await TriggerHandlersAsync(eventType, eventData, exceptions, inboxConfig); + if (exceptions.Any()) + { + ThrowOriginalExceptions(eventType, exceptions); + } } protected override byte[] Serialize(object eventData) diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs index 005226b885..61330828b4 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventHandlerAdapter.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.EventBus.Rebus public async Task Handle(TEventData message) { - await RebusDistributedEventBus.TriggerHandlersAsync(typeof(TEventData), message); + await RebusDistributedEventBus.ProcessEventAsync(message.GetType(), message); } } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs index 896dfd4f7d..5b71542665 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs @@ -1,3 +1,4 @@ +using System; using Volo.Abp.Collections; namespace Volo.Abp.EventBus.Distributed @@ -5,16 +6,22 @@ namespace Volo.Abp.EventBus.Distributed public class AbpDistributedEventBusOptions { public ITypeList Handlers { get; } - + public OutboxConfigDictionary Outboxes { get; } - + public InboxConfigDictionary Inboxes { get; } + /// + /// Default: -2 hours + /// + public TimeSpan InboxKeepEventTimeSpan { get; set; } + public AbpDistributedEventBusOptions() { Handlers = new TypeList(); Outboxes = new OutboxConfigDictionary(); Inboxes = new InboxConfigDictionary(); + InboxKeepEventTimeSpan = TimeSpan.FromHours(-2); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs index bee802a126..d072f5d922 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventInbox.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; namespace Volo.Abp.EventBus.Distributed @@ -7,13 +8,13 @@ namespace Volo.Abp.EventBus.Distributed public interface IEventInbox { Task EnqueueAsync(IncomingEventInfo incomingEvent); - - Task> GetWaitingEventsAsync(int maxCount); - + + Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default); + Task MarkAsProcessedAsync(Guid id); - + Task ExistsByMessageIdAsync(string messageId); Task DeleteOldEventsAsync(); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs index 0b50993e8e..cc00ee6654 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/IEventOutbox.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; namespace Volo.Abp.EventBus.Distributed @@ -7,9 +8,9 @@ namespace Volo.Abp.EventBus.Distributed public interface IEventOutbox { Task EnqueueAsync(OutgoingEventInfo outgoingEvent); - - Task> GetWaitingEventsAsync(int maxCount); - + + Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default); + Task DeleteAsync(Guid id); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs index d98e144ada..886a7744d1 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.Options; using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.EventBus.Distributed; @@ -10,21 +12,24 @@ using Volo.Abp.Uow; namespace Volo.Abp.MongoDB.DistributedEvents { - public class MongoDbContextEventInbox : IMongoDbContextEventInbox + public class MongoDbContextEventInbox : IMongoDbContextEventInbox where TMongoDbContext : IHasEventInbox { protected IMongoDbContextProvider DbContextProvider { get; } + protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } protected IClock Clock { get; } - + public MongoDbContextEventInbox( IMongoDbContextProvider dbContextProvider, - IClock clock) + IClock clock, + IOptions distributedEventsOptions) { DbContextProvider = dbContextProvider; Clock = clock; + DistributedEventsOptions = distributedEventsOptions.Value; } - + [UnitOfWork] public virtual async Task EnqueueAsync(IncomingEventInfo incomingEvent) { @@ -45,9 +50,9 @@ namespace Volo.Abp.MongoDB.DistributedEvents } [UnitOfWork] - public virtual async Task> GetWaitingEventsAsync(int maxCount) + public virtual async Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default) { - var dbContext = await DbContextProvider.GetDbContextAsync(); + var dbContext = await DbContextProvider.GetDbContextAsync(cancellationToken); var outgoingEventRecords = await dbContext .IncomingEvents @@ -55,8 +60,8 @@ namespace Volo.Abp.MongoDB.DistributedEvents .Where(x => !x.Processed) .OrderBy(x => x.CreationTime) .Take(maxCount) - .ToListAsync(); - + .ToListAsync(cancellationToken: cancellationToken); + return outgoingEventRecords .Select(x => x.ToIncomingEventInfo()) .ToList(); @@ -65,17 +70,44 @@ namespace Volo.Abp.MongoDB.DistributedEvents [UnitOfWork] public async Task MarkAsProcessedAsync(Guid id) { - throw new NotImplementedException(); + var dbContext = await DbContextProvider.GetDbContextAsync(); + var incomingEvent = await dbContext.IncomingEvents.Find(x => x.Id.Equals(id)).FirstOrDefaultAsync(); + if (incomingEvent != null) + { + incomingEvent.MarkAsProcessed(Clock.Now); + + if (dbContext.SessionHandle != null) + { + await dbContext.IncomingEvents.ReplaceOneAsync(dbContext.SessionHandle, Builders.Filter.Eq(e => e.Id, incomingEvent.Id), incomingEvent); + } + else + { + await dbContext.IncomingEvents.ReplaceOneAsync(Builders.Filter.Eq(e => e.Id, incomingEvent.Id), incomingEvent); + } + } } - public Task ExistsByMessageIdAsync(string messageId) + [UnitOfWork] + public async Task ExistsByMessageIdAsync(string messageId) { - throw new NotImplementedException(); + var dbContext = await DbContextProvider.GetDbContextAsync(); + return await dbContext.IncomingEvents.AsQueryable().AnyAsync(x => x.MessageId == messageId); } - public Task DeleteOldEventsAsync() + [UnitOfWork] + public async Task DeleteOldEventsAsync() { - throw new NotImplementedException(); + var dbContext = await DbContextProvider.GetDbContextAsync(); + var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + + if (dbContext.SessionHandle != null) + { + await dbContext.IncomingEvents.DeleteManyAsync(dbContext.SessionHandle, x => x.Processed && x.CreationTime < timeToKeepEvents); + } + else + { + await dbContext.IncomingEvents.DeleteManyAsync(x => x.Processed && x.CreationTime < timeToKeepEvents); + } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs index 1bec9e0834..df8aa108ee 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs @@ -1,27 +1,72 @@ using System; using System.Collections.Generic; +using System.Linq; +using System.Threading; using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Uow; namespace Volo.Abp.MongoDB.DistributedEvents { - public class MongoDbContextEventOutbox : IMongoDbContextEventOutbox + public class MongoDbContextEventOutbox : IMongoDbContextEventOutbox where TMongoDbContext : IHasEventOutbox { - public Task EnqueueAsync(OutgoingEventInfo outgoingEvent) + protected IMongoDbContextProvider MongoDbContextProvider { get; } + + public MongoDbContextEventOutbox(IMongoDbContextProvider mongoDbContextProvider) + { + MongoDbContextProvider = mongoDbContextProvider; + } + + [UnitOfWork] + public async Task EnqueueAsync(OutgoingEventInfo outgoingEvent) { - throw new NotImplementedException(); + var dbContext = (IHasEventOutbox) await MongoDbContextProvider.GetDbContextAsync(); + if (dbContext.SessionHandle != null) + { + await dbContext.OutgoingEvents.InsertOneAsync( + dbContext.SessionHandle, + new OutgoingEventRecord(outgoingEvent) + ); + } + else + { + await dbContext.OutgoingEvents.InsertOneAsync( + new OutgoingEventRecord(outgoingEvent) + ); + } } - public Task> GetWaitingEventsAsync(int maxCount) + [UnitOfWork] + public async Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default) { - throw new NotImplementedException(); + var dbContext = (IHasEventOutbox) await MongoDbContextProvider.GetDbContextAsync(cancellationToken); + + var outgoingEventRecords = await dbContext + .OutgoingEvents.AsQueryable() + .OrderBy(x => x.CreationTime) + .Take(maxCount) + .ToListAsync(cancellationToken: cancellationToken); + + return outgoingEventRecords + .Select(x => x.ToOutgoingEventInfo()) + .ToList(); } - public Task DeleteAsync(Guid id) + [UnitOfWork] + public async Task DeleteAsync(Guid id) { - throw new NotImplementedException(); + var dbContext = (IHasEventOutbox) await MongoDbContextProvider.GetDbContextAsync(); + if (dbContext.SessionHandle != null) + { + await dbContext.OutgoingEvents.DeleteOneAsync(dbContext.SessionHandle, x => x.Id.Equals(id)); + } + else + { + await dbContext.OutgoingEvents.DeleteOneAsync(x => x.Id.Equals(id)); + } } } -} \ No newline at end of file +} diff --git a/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json index 1ed30c80a9..5359c021b7 100644 --- a/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json @@ -16,4 +16,4 @@ "Redis": { "Configuration": "127.0.0.1" } -} \ No newline at end of file +} diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj index cfd73d51bb..a503c6f6c0 100644 --- a/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj @@ -6,4 +6,16 @@ DistDemoApp + + + + + + + + + Always + + + diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoAppMongoDbKafkaModule.cs b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoAppMongoDbKafkaModule.cs new file mode 100644 index 0000000000..b2e41b6ca7 --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoAppMongoDbKafkaModule.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.EventBus.Kafka; +using Volo.Abp.Modularity; +using Volo.Abp.MongoDB; +using Volo.Abp.MongoDB.DistributedEvents; + +namespace DistDemoApp +{ + [DependsOn( + typeof(AbpMongoDbModule), + typeof(AbpEventBusKafkaModule), + typeof(DistDemoAppSharedModule) + )] + public class DistDemoAppMongoDbKafkaModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMongoDbContext(options => + { + options.AddDefaultRepositories(); + }); + + Configure(options => + { + options.Outboxes.Configure(config => + { + config.UseMongoDbContext(); + }); + + options.Inboxes.Configure(config => + { + config.UseMongoDbContext(); + }); + }); + } + } +} diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs b/test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs index d0e4cdf4ca..b048c17389 100644 --- a/test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/Program.cs @@ -1,12 +1,57 @@ using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; namespace DistDemoApp { - class Program + public class Program { - static void Main(string[] args) + public static async Task Main(string[] args) { - Console.WriteLine("Hello World!"); + Log.Logger = new LoggerConfiguration() +#if DEBUG + .MinimumLevel.Debug() +#else + .MinimumLevel.Information() +#endif + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .Enrich.FromLogContext() + .WriteTo.Async(c => c.File("Logs/logs.txt")) + .WriteTo.Async(c => c.Console()) + .CreateLogger(); + + try + { + Log.Information("Starting console host."); + await CreateHostBuilder(args).RunConsoleAsync(); + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "Host terminated unexpectedly!"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + internal static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .UseAutofac() + .UseSerilog() + .ConfigureAppConfiguration((context, config) => + { + //setup your additional configuration sources + }) + .ConfigureServices((hostContext, services) => + { + services.AddApplication(); + }); } -} \ No newline at end of file +} diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/TodoMongoDbContext.cs b/test/DistEvents/DistDemoApp.MongoDbKafka/TodoMongoDbContext.cs new file mode 100644 index 0000000000..a7f1b78f86 --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/TodoMongoDbContext.cs @@ -0,0 +1,26 @@ +using MongoDB.Driver; +using Volo.Abp.Data; +using Volo.Abp.MongoDB; +using Volo.Abp.MongoDB.DistributedEvents; + +namespace DistDemoApp +{ + [ConnectionStringName("Default")] + public class TodoMongoDbContext : AbpMongoDbContext, IHasEventOutbox, IHasEventInbox + { + public IMongoCollection TodoItems => Collection(); + public IMongoCollection TodoSummaries => Collection(); + + public IMongoCollection OutgoingEvents + { + get => Collection(); + set {} + } + public IMongoCollection IncomingEvents + { + get => Collection(); + set {} + } + } + +} diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json b/test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json new file mode 100644 index 0000000000..d8c528fe87 --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json @@ -0,0 +1,19 @@ +{ + "ConnectionStrings": { + "Default": "mongodb://localhost:27018,localhost:27019,localhost:27020/DistEventsDemo" + }, + "Kafka": { + "Connections": { + "Default": { + "BootstrapServers": "localhost:9092" + } + }, + "EventBus": { + "GroupId": "DistDemoApp", + "TopicName": "DistDemoTopic" + } + }, + "Redis": { + "Configuration": "127.0.0.1" + } +} diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj b/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj new file mode 100644 index 0000000000..c102adb382 --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj @@ -0,0 +1,21 @@ + + + + Exe + net5.0 + DistDemoApp + + + + + + + + + + + Always + + + + diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoAppMongoDbRebusModule.cs b/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoAppMongoDbRebusModule.cs new file mode 100644 index 0000000000..21dab7b9b5 --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoAppMongoDbRebusModule.cs @@ -0,0 +1,53 @@ +using Microsoft.Extensions.DependencyInjection; +using Rebus.Persistence.InMem; +using Rebus.Transport.InMem; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.EventBus.Rebus; +using Volo.Abp.Modularity; +using Volo.Abp.MongoDB; +using Volo.Abp.MongoDB.DistributedEvents; + +namespace DistDemoApp +{ + [DependsOn( + typeof(AbpMongoDbModule), + typeof(AbpEventBusRebusModule), + typeof(DistDemoAppSharedModule) + )] + public class DistDemoAppMongoDbRebusModule : AbpModule + { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(options => + { + options.InputQueueName = "eventbus"; + options.Configurer = rebusConfigurer => + { + rebusConfigurer.Transport(t => t.UseInMemoryTransport(new InMemNetwork(), "eventbus")); + rebusConfigurer.Subscriptions(s => s.StoreInMemory()); + }; + }); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMongoDbContext(options => + { + options.AddDefaultRepositories(); + }); + + Configure(options => + { + options.Outboxes.Configure(config => + { + config.UseMongoDbContext(); + }); + + options.Inboxes.Configure(config => + { + config.UseMongoDbContext(); + }); + }); + } + } +} diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/Program.cs b/test/DistEvents/DistDemoApp.MongoDbRebus/Program.cs new file mode 100644 index 0000000000..a79ad1b1bf --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/Program.cs @@ -0,0 +1,57 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; + +namespace DistDemoApp +{ + public class Program + { + public static async Task Main(string[] args) + { + Log.Logger = new LoggerConfiguration() +#if DEBUG + .MinimumLevel.Debug() +#else + .MinimumLevel.Information() +#endif + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .Enrich.FromLogContext() + .WriteTo.Async(c => c.File("Logs/logs.txt")) + .WriteTo.Async(c => c.Console()) + .CreateLogger(); + + try + { + Log.Information("Starting console host."); + await CreateHostBuilder(args).RunConsoleAsync(); + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "Host terminated unexpectedly!"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + + } + + internal static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .UseAutofac() + .UseSerilog() + .ConfigureAppConfiguration((context, config) => + { + //setup your additional configuration sources + }) + .ConfigureServices((hostContext, services) => + { + services.AddApplication(); + }); + } +} diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs b/test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs new file mode 100644 index 0000000000..a7f1b78f86 --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs @@ -0,0 +1,26 @@ +using MongoDB.Driver; +using Volo.Abp.Data; +using Volo.Abp.MongoDB; +using Volo.Abp.MongoDB.DistributedEvents; + +namespace DistDemoApp +{ + [ConnectionStringName("Default")] + public class TodoMongoDbContext : AbpMongoDbContext, IHasEventOutbox, IHasEventInbox + { + public IMongoCollection TodoItems => Collection(); + public IMongoCollection TodoSummaries => Collection(); + + public IMongoCollection OutgoingEvents + { + get => Collection(); + set {} + } + public IMongoCollection IncomingEvents + { + get => Collection(); + set {} + } + } + +} diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json b/test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json new file mode 100644 index 0000000000..d8c528fe87 --- /dev/null +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json @@ -0,0 +1,19 @@ +{ + "ConnectionStrings": { + "Default": "mongodb://localhost:27018,localhost:27019,localhost:27020/DistEventsDemo" + }, + "Kafka": { + "Connections": { + "Default": { + "BootstrapServers": "localhost:9092" + } + }, + "EventBus": { + "GroupId": "DistDemoApp", + "TopicName": "DistDemoTopic" + } + }, + "Redis": { + "Configuration": "127.0.0.1" + } +} diff --git a/test/DistEvents/DistEventsDemo.sln b/test/DistEvents/DistEventsDemo.sln index 4e53ba6367..e6c3348a5f 100644 --- a/test/DistEvents/DistEventsDemo.sln +++ b/test/DistEvents/DistEventsDemo.sln @@ -6,6 +6,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistDemoApp.MongoDbKafka", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistDemoApp.Shared", "DistDemoApp.Shared\DistDemoApp.Shared.csproj", "{C515F4E2-0ED3-4561-BC58-FC633B50E2EB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistDemoApp.MongoDbRebus", "DistDemoApp.MongoDbRebus\DistDemoApp.MongoDbRebus.csproj", "{4FB63540-4CC5-4A7B-900B-F5FCD907456E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -24,5 +26,9 @@ Global {C515F4E2-0ED3-4561-BC58-FC633B50E2EB}.Debug|Any CPU.Build.0 = Debug|Any CPU {C515F4E2-0ED3-4561-BC58-FC633B50E2EB}.Release|Any CPU.ActiveCfg = Release|Any CPU {C515F4E2-0ED3-4561-BC58-FC633B50E2EB}.Release|Any CPU.Build.0 = Release|Any CPU + {4FB63540-4CC5-4A7B-900B-F5FCD907456E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FB63540-4CC5-4A7B-900B-F5FCD907456E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FB63540-4CC5-4A7B-900B-F5FCD907456E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FB63540-4CC5-4A7B-900B-F5FCD907456E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal From f6d0e454b85daffe1d640a7b0953c1aba9f9fe74 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 28 Sep 2021 15:59:43 +0300 Subject: [PATCH 32/55] Move SettingTabsService to @abp/ng.setting-management/config package from @abp/ng.core --- .../packages/core/src/lib/services/routes.service.ts | 3 --- .../config/src/providers/route.provider.ts | 3 ++- .../config/src/providers/setting-tab.provider.ts | 2 +- .../packages/setting-management/config/src/public-api.ts | 5 +++-- .../packages/setting-management/config/src/services/index.ts | 1 + .../config/src/services/settings-tab.service.ts | 5 +++++ .../src/lib/components/setting-management.component.ts | 3 ++- 7 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 npm/ng-packs/packages/setting-management/config/src/services/index.ts create mode 100644 npm/ng-packs/packages/setting-management/config/src/services/settings-tab.service.ts diff --git a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts index 13461491e3..d2aba62c09 100644 --- a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts @@ -181,6 +181,3 @@ export abstract class AbstractNavTreeService @Injectable({ providedIn: 'root' }) export class RoutesService extends AbstractNavTreeService {} - -@Injectable({ providedIn: 'root' }) -export class SettingTabsService extends AbstractNavTreeService {} diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts index 9d272b8be0..de80336feb 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts @@ -1,8 +1,9 @@ -import { eLayoutType, RoutesService, SettingTabsService } from '@abp/ng.core'; +import { eLayoutType, RoutesService } from '@abp/ng.core'; import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; import { APP_INITIALIZER } from '@angular/core'; import { debounceTime, map } from 'rxjs/operators'; import { eSettingManagementRouteNames } from '../enums/route-names'; +import { SettingTabsService } from '../services/settings-tab.service'; export const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [ { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts index f88e3c3020..200c80e2c3 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts @@ -1,7 +1,7 @@ -import { SettingTabsService } from '@abp/ng.core'; import { APP_INITIALIZER } from '@angular/core'; import { EmailSettingGroupComponent } from '../components/email-setting-group/email-setting-group.component'; import { eSettingManamagementSettingTabNames } from '../enums/setting-tab-names'; +import { SettingTabsService } from '../services/settings-tab.service'; export const SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS = [ { diff --git a/npm/ng-packs/packages/setting-management/config/src/public-api.ts b/npm/ng-packs/packages/setting-management/config/src/public-api.ts index c33f10d4d2..56141f7c3d 100644 --- a/npm/ng-packs/packages/setting-management/config/src/public-api.ts +++ b/npm/ng-packs/packages/setting-management/config/src/public-api.ts @@ -1,5 +1,6 @@ +export * from './components/email-setting-group/email-setting-group.component'; export * from './enums'; export * from './providers'; -export * from './setting-management-config.module'; export * from './proxy'; -export * from './components/email-setting-group/email-setting-group.component'; +export * from './services/index'; +export * from './setting-management-config.module'; diff --git a/npm/ng-packs/packages/setting-management/config/src/services/index.ts b/npm/ng-packs/packages/setting-management/config/src/services/index.ts new file mode 100644 index 0000000000..4d033922c2 --- /dev/null +++ b/npm/ng-packs/packages/setting-management/config/src/services/index.ts @@ -0,0 +1 @@ +export * from './settings-tab.service'; diff --git a/npm/ng-packs/packages/setting-management/config/src/services/settings-tab.service.ts b/npm/ng-packs/packages/setting-management/config/src/services/settings-tab.service.ts new file mode 100644 index 0000000000..7e35070016 --- /dev/null +++ b/npm/ng-packs/packages/setting-management/config/src/services/settings-tab.service.ts @@ -0,0 +1,5 @@ +import { Injectable } from '@angular/core'; +import { ABP, AbstractNavTreeService } from '@abp/ng.core'; + +@Injectable({ providedIn: 'root' }) +export class SettingTabsService extends AbstractNavTreeService {} diff --git a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts index f72a222cdd..4404939c36 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts +++ b/npm/ng-packs/packages/setting-management/src/lib/components/setting-management.component.ts @@ -1,5 +1,6 @@ -import { ABP, SettingTabsService } from '@abp/ng.core'; +import { ABP } from '@abp/ng.core'; import { Component, OnDestroy, OnInit, TrackByFunction } from '@angular/core'; +import { SettingTabsService } from '@abp/ng.setting-management/config'; import { Subscription } from 'rxjs'; @Component({ From b7e4fe0e76a5788c3e9ccc2c059a125c039bf073 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 28 Sep 2021 16:05:28 +0300 Subject: [PATCH 33/55] rename file --- .../setting-management/config/src/providers/route.provider.ts | 2 +- .../config/src/providers/setting-tab.provider.ts | 2 +- .../packages/setting-management/config/src/services/index.ts | 2 +- .../{settings-tab.service.ts => settings-tabs.service.ts} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename npm/ng-packs/packages/setting-management/config/src/services/{settings-tab.service.ts => settings-tabs.service.ts} (100%) diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts index de80336feb..200a5feb15 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts @@ -3,7 +3,7 @@ import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; import { APP_INITIALIZER } from '@angular/core'; import { debounceTime, map } from 'rxjs/operators'; import { eSettingManagementRouteNames } from '../enums/route-names'; -import { SettingTabsService } from '../services/settings-tab.service'; +import { SettingTabsService } from '../services/settings-tabs.service'; export const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [ { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts index 200c80e2c3..f05104c177 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts @@ -1,7 +1,7 @@ import { APP_INITIALIZER } from '@angular/core'; import { EmailSettingGroupComponent } from '../components/email-setting-group/email-setting-group.component'; import { eSettingManamagementSettingTabNames } from '../enums/setting-tab-names'; -import { SettingTabsService } from '../services/settings-tab.service'; +import { SettingTabsService } from '../services/settings-tabs.service'; export const SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS = [ { diff --git a/npm/ng-packs/packages/setting-management/config/src/services/index.ts b/npm/ng-packs/packages/setting-management/config/src/services/index.ts index 4d033922c2..a130d0a4a9 100644 --- a/npm/ng-packs/packages/setting-management/config/src/services/index.ts +++ b/npm/ng-packs/packages/setting-management/config/src/services/index.ts @@ -1 +1 @@ -export * from './settings-tab.service'; +export * from './settings-tabs.service'; diff --git a/npm/ng-packs/packages/setting-management/config/src/services/settings-tab.service.ts b/npm/ng-packs/packages/setting-management/config/src/services/settings-tabs.service.ts similarity index 100% rename from npm/ng-packs/packages/setting-management/config/src/services/settings-tab.service.ts rename to npm/ng-packs/packages/setting-management/config/src/services/settings-tabs.service.ts From 0dce9e8feb949f77053fc2e269a5d14cbf511ae8 Mon Sep 17 00:00:00 2001 From: Mehmet Erim <34455572+mehmet-erim@users.noreply.github.com> Date: Tue, 28 Sep 2021 17:17:50 +0300 Subject: [PATCH 34/55] Update public-api.ts --- .../packages/setting-management/config/src/public-api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/setting-management/config/src/public-api.ts b/npm/ng-packs/packages/setting-management/config/src/public-api.ts index 56141f7c3d..83eb57e505 100644 --- a/npm/ng-packs/packages/setting-management/config/src/public-api.ts +++ b/npm/ng-packs/packages/setting-management/config/src/public-api.ts @@ -2,5 +2,5 @@ export * from './components/email-setting-group/email-setting-group.component'; export * from './enums'; export * from './providers'; export * from './proxy'; -export * from './services/index'; +export * from './services'; export * from './setting-management-config.module'; From f0f61884b76a1c6d3e44c194912bf8e052a1be15 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 28 Sep 2021 23:43:48 +0800 Subject: [PATCH 35/55] Improve performance --- .../DistributedEvents/DbContextEventInbox.cs | 26 ++++++++--------- .../DistributedEvents/DbContextEventOutbox.cs | 10 +++---- .../MongoDbContextEventInbox.cs | 28 +++++++++---------- .../MongoDbContextEventOutbox.cs | 6 ++-- 4 files changed, 31 insertions(+), 39 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index 86fc78cab3..5bee24d754 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -57,35 +57,31 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents } [UnitOfWork] - public async Task MarkAsProcessedAsync(Guid id) + public virtual async Task MarkAsProcessedAsync(Guid id) { - //TODO: Optimize? var dbContext = await DbContextProvider.GetDbContextAsync(); - var incomingEvent = await dbContext.IncomingEvents.FindAsync(id); - if (incomingEvent != null) - { - incomingEvent.MarkAsProcessed(Clock.Now); - } + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"UPDATE {tableName} SET Processed = 1, ProcessedTime = '{Clock.Now}' WHERE Id = '{id}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); } [UnitOfWork] - public async Task ExistsByMessageIdAsync(string messageId) + public virtual async Task ExistsByMessageIdAsync(string messageId) { - //TODO: Optimize var dbContext = await DbContextProvider.GetDbContextAsync(); return await dbContext.IncomingEvents.AnyAsync(x => x.MessageId == messageId); } [UnitOfWork] - public async Task DeleteOldEventsAsync() + public virtual async Task DeleteOldEventsAsync() { - //TODO: Optimize var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); - var oldEvents = await dbContext.IncomingEvents - .Where(x => x.Processed && x.CreationTime < timeToKeepEvents) - .ToListAsync(); - dbContext.IncomingEvents.RemoveRange(oldEvents); + + var sql = $"DELETE FROM {tableName} WHERE Processed = 1 AND CreationTime < '{timeToKeepEvents}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs index 435bc70398..f0b4d3b98c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -49,13 +49,11 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents [UnitOfWork] public virtual async Task DeleteAsync(Guid id) { - //TODO: Optimize? var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); - var outgoingEvent = await dbContext.OutgoingEvents.FindAsync(id); - if (outgoingEvent != null) - { - dbContext.Remove(outgoingEvent); - } + var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"DELETE FROM {tableName} WHERE Id = '{id}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); } } } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs index 886a7744d1..62927d2279 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs @@ -68,34 +68,32 @@ namespace Volo.Abp.MongoDB.DistributedEvents } [UnitOfWork] - public async Task MarkAsProcessedAsync(Guid id) + public virtual async Task MarkAsProcessedAsync(Guid id) { var dbContext = await DbContextProvider.GetDbContextAsync(); - var incomingEvent = await dbContext.IncomingEvents.Find(x => x.Id.Equals(id)).FirstOrDefaultAsync(); - if (incomingEvent != null) - { - incomingEvent.MarkAsProcessed(Clock.Now); - if (dbContext.SessionHandle != null) - { - await dbContext.IncomingEvents.ReplaceOneAsync(dbContext.SessionHandle, Builders.Filter.Eq(e => e.Id, incomingEvent.Id), incomingEvent); - } - else - { - await dbContext.IncomingEvents.ReplaceOneAsync(Builders.Filter.Eq(e => e.Id, incomingEvent.Id), incomingEvent); - } + var filter = Builders.Filter.Eq(x => x.Id, id); + var update = Builders.Update.Set(x => x.Processed, true).Set(x => x.ProcessedTime, Clock.Now); + + if (dbContext.SessionHandle != null) + { + await dbContext.IncomingEvents.UpdateOneAsync(dbContext.SessionHandle, filter, update); + } + else + { + await dbContext.IncomingEvents.UpdateOneAsync(filter, update); } } [UnitOfWork] - public async Task ExistsByMessageIdAsync(string messageId) + public virtual async Task ExistsByMessageIdAsync(string messageId) { var dbContext = await DbContextProvider.GetDbContextAsync(); return await dbContext.IncomingEvents.AsQueryable().AnyAsync(x => x.MessageId == messageId); } [UnitOfWork] - public async Task DeleteOldEventsAsync() + public virtual async Task DeleteOldEventsAsync() { var dbContext = await DbContextProvider.GetDbContextAsync(); var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs index df8aa108ee..dad0294d1c 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventOutbox.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.MongoDB.DistributedEvents } [UnitOfWork] - public async Task EnqueueAsync(OutgoingEventInfo outgoingEvent) + public virtual async Task EnqueueAsync(OutgoingEventInfo outgoingEvent) { var dbContext = (IHasEventOutbox) await MongoDbContextProvider.GetDbContextAsync(); if (dbContext.SessionHandle != null) @@ -40,7 +40,7 @@ namespace Volo.Abp.MongoDB.DistributedEvents } [UnitOfWork] - public async Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default) + public virtual async Task> GetWaitingEventsAsync(int maxCount, CancellationToken cancellationToken = default) { var dbContext = (IHasEventOutbox) await MongoDbContextProvider.GetDbContextAsync(cancellationToken); @@ -56,7 +56,7 @@ namespace Volo.Abp.MongoDB.DistributedEvents } [UnitOfWork] - public async Task DeleteAsync(Guid id) + public virtual async Task DeleteAsync(Guid id) { var dbContext = (IHasEventOutbox) await MongoDbContextProvider.GetDbContextAsync(); if (dbContext.SessionHandle != null) From eb85c9e5ff51e3687cde2b17f40531f59768140e Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Wed, 29 Sep 2021 11:46:54 +0300 Subject: [PATCH 36/55] update docs --- docs/en/Modules/Setting-Management.md | 2 +- docs/zh-Hans/Modules/Setting-Management.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Modules/Setting-Management.md b/docs/en/Modules/Setting-Management.md index 4eedcc969d..68b06372eb 100644 --- a/docs/en/Modules/Setting-Management.md +++ b/docs/en/Modules/Setting-Management.md @@ -278,7 +278,7 @@ Open the `app.component.ts` and modify the file as shown below: ```js import { Component } from '@angular/core'; -import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService +import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent @Component(/* component metadata */) diff --git a/docs/zh-Hans/Modules/Setting-Management.md b/docs/zh-Hans/Modules/Setting-Management.md index acb4469fea..c99397e4b4 100644 --- a/docs/zh-Hans/Modules/Setting-Management.md +++ b/docs/zh-Hans/Modules/Setting-Management.md @@ -249,7 +249,7 @@ yarn ng generate component my-settings ```js import { Component } from '@angular/core'; -import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService +import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent @Component(/* component metadata */) @@ -273,4 +273,4 @@ export class AppComponent { 导航到 `/setting-management` 路由你会看到以下变化: -![Custom Settings Tab](../images/custom-settings.png) \ No newline at end of file +![Custom Settings Tab](../images/custom-settings.png) From bc4944c19d3612a6087bbdb8e901fb584f3a9e43 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 29 Sep 2021 17:06:59 +0800 Subject: [PATCH 37/55] Add ISqlAdapter --- .../DistributedEvents/PostgreSqlAdapter.cs | 25 +++++++++++++++++ .../AbpEntityFrameworkCorePostgreSqlModule.cs | 9 ++++++- .../AbpEntityFrameworkCoreModule.cs | 5 ++++ .../AbpEfCoreDistributedEventBusOptions.cs | 19 +++++++++++++ .../DistributedEvents/DbContextEventInbox.cs | 20 +++++++++++--- .../DistributedEvents/DbContextEventOutbox.cs | 12 +++++++-- .../DistributedEvents/DefaultSqlAdapter.cs | 27 +++++++++++++++++++ .../DistributedEvents/ISqlAdapter.cs | 13 +++++++++ 8 files changed, 124 insertions(+), 6 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs new file mode 100644 index 0000000000..0c84ec929e --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs @@ -0,0 +1,25 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class PostgreSqlAdapter : ISqlAdapter + { + public string NormalizeTableName(string tableName) + { + return $"\"{tableName}\""; + } + + public string NormalizeColumnName(string columnName) + { + return $"\"{columnName}\""; + } + + public string NormalizeColumnNameEqualsValue(string columnName, object value) + { + return $"\"{columnName}\" = '{value}'"; + } + + public string NormalizeValue(object value) + { + return $"'{value}'"; + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs index 4e76b89113..7d8c87c63a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs @@ -1,4 +1,6 @@ -using Volo.Abp.Guids; +using Npgsql; +using Volo.Abp.EntityFrameworkCore.DistributedEvents; +using Volo.Abp.Guids; using Volo.Abp.Modularity; namespace Volo.Abp.EntityFrameworkCore.PostgreSql @@ -17,6 +19,11 @@ namespace Volo.Abp.EntityFrameworkCore.PostgreSql options.DefaultSequentialGuidType = SequentialGuidType.SequentialAsString; } }); + + Configure(options => + { + options.SqlAdapters.TryAdd(nameof(NpgsqlConnection).ToLower(), new PostgreSqlAdapter()); + }); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs index 90b541bc73..349116d6eb 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs @@ -26,6 +26,11 @@ namespace Volo.Abp.EntityFrameworkCore }); }); + Configure(options => + { + options.SqlAdapters.Add(DefaultSqlAdapter.Name, new DefaultSqlAdapter()); + }); + context.Services.TryAddTransient(typeof(IDbContextProvider<>), typeof(UnitOfWorkDbContextProvider<>)); context.Services.AddTransient(typeof(IDbContextEventOutbox<>), typeof(DbContextEventOutbox<>)); context.Services.AddTransient(typeof(IDbContextEventInbox<>), typeof(DbContextEventInbox<>)); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs new file mode 100644 index 0000000000..9497552a09 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class AbpEfCoreDistributedEventBusOptions + { + public Dictionary SqlAdapters { get; set; } + + public ISqlAdapter GetSqlAdapter(string connectionType) + { + return SqlAdapters.TryGetValue(connectionType, out var sqlAdapter) ? sqlAdapter : SqlAdapters[DefaultSqlAdapter.Name]; + } + + public AbpEfCoreDistributedEventBusOptions() + { + SqlAdapters = new Dictionary(); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index 5bee24d754..d8f18c6f32 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -16,15 +16,18 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { protected IDbContextProvider DbContextProvider { get; } protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } + protected AbpEfCoreDistributedEventBusOptions EfCoreDistributedEventBusOptions { get; } protected IClock Clock { get; } public DbContextEventInbox( IDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions) + IOptions distributedEventsOptions, + IOptions efCoreDistributedEventBusOptions) { DbContextProvider = dbContextProvider; Clock = clock; + EfCoreDistributedEventBusOptions = efCoreDistributedEventBusOptions.Value; DistributedEventsOptions = distributedEventsOptions.Value; } @@ -61,8 +64,14 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + var connectionName = dbContext.Database.GetDbConnection().GetType().Name.ToLower(); + var sqlAdapter = EfCoreDistributedEventBusOptions.GetSqlAdapter(connectionName); + + var sql = $"UPDATE {sqlAdapter.NormalizeTableName(tableName)} SET " + + $"{sqlAdapter.NormalizeColumnNameEqualsValue("Processed", 1)}, " + + $"{sqlAdapter.NormalizeColumnNameEqualsValue("ProcessedTime", Clock.Now)} WHERE " + + $"{sqlAdapter.NormalizeColumnNameEqualsValue("Id", id)}"; - var sql = $"UPDATE {tableName} SET Processed = 1, ProcessedTime = '{Clock.Now}' WHERE Id = '{id}'"; await dbContext.Database.ExecuteSqlRawAsync(sql); } @@ -79,8 +88,13 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + var connectionName = dbContext.Database.GetDbConnection().GetType().Name.ToLower(); + var sqlAdapter = EfCoreDistributedEventBusOptions.GetSqlAdapter(connectionName); + + var sql = $"DELETE FROM {sqlAdapter.NormalizeTableName(tableName)} WHERE " + + $"{sqlAdapter.NormalizeColumnNameEqualsValue("Processed", 1)} AND " + + $"{sqlAdapter.NormalizeColumnName("CreationTime")} < {sqlAdapter.NormalizeValue(timeToKeepEvents)}"; - var sql = $"DELETE FROM {tableName} WHERE Processed = 1 AND CreationTime < '{timeToKeepEvents}'"; await dbContext.Database.ExecuteSqlRawAsync(sql); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs index f0b4d3b98c..5451a0a30a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Uow; @@ -13,11 +14,14 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents where TDbContext : IHasEventOutbox { protected IDbContextProvider DbContextProvider { get; } + protected AbpEfCoreDistributedEventBusOptions EfCoreDistributedEventBusOptions { get; } public DbContextEventOutbox( - IDbContextProvider dbContextProvider) + IDbContextProvider dbContextProvider, + IOptions efCoreDistributedEventBusOptions) { DbContextProvider = dbContextProvider; + EfCoreDistributedEventBusOptions = efCoreDistributedEventBusOptions.Value; } [UnitOfWork] @@ -51,8 +55,12 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); + var connectionName = dbContext.Database.GetDbConnection().GetType().Name.ToLower(); + var sqlAdapter = EfCoreDistributedEventBusOptions.GetSqlAdapter(connectionName); + + var sql = $"DELETE FROM {sqlAdapter.NormalizeTableName(tableName)} WHERE " + + $"{sqlAdapter.NormalizeColumnNameEqualsValue("Id", id)}"; - var sql = $"DELETE FROM {tableName} WHERE Id = '{id}'"; await dbContext.Database.ExecuteSqlRawAsync(sql); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs new file mode 100644 index 0000000000..8a86af7434 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs @@ -0,0 +1,27 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class DefaultSqlAdapter : ISqlAdapter + { + public const string Name = "default"; + + public string NormalizeTableName(string tableName) + { + return tableName; + } + + public string NormalizeColumnName(string columnName) + { + return columnName; + } + + public string NormalizeColumnNameEqualsValue(string columnName, object value) + { + return $"{columnName} = '{value}'"; + } + + public string NormalizeValue(object value) + { + return $"'{value}'"; + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs new file mode 100644 index 0000000000..9b366f00ab --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs @@ -0,0 +1,13 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface ISqlAdapter + { + string NormalizeTableName(string tableName); + + string NormalizeColumnName(string columnName); + + string NormalizeColumnNameEqualsValue(string columnName, object value); + + string NormalizeValue(object value); + } +} From 3cc326d3cbf41dba17d255cb0916f6d3e48c6989 Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 29 Sep 2021 14:23:58 +0300 Subject: [PATCH 38/55] add angular v4.x to v5.0 migration guide --- docs/en/Migration-Guides/Abp-5_0-Angular.md | 101 ++++++++++++++++++++ docs/en/Migration-Guides/Abp-5_0.md | 5 + docs/en/Migration-Guides/Index.md | 10 +- 3 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 docs/en/Migration-Guides/Abp-5_0-Angular.md create mode 100644 docs/en/Migration-Guides/Abp-5_0.md diff --git a/docs/en/Migration-Guides/Abp-5_0-Angular.md b/docs/en/Migration-Guides/Abp-5_0-Angular.md new file mode 100644 index 0000000000..6cdb7af7c9 --- /dev/null +++ b/docs/en/Migration-Guides/Abp-5_0-Angular.md @@ -0,0 +1,101 @@ +# Angular UI v4.x to v5.0 Migration Guide + +## Breaking Changes + +### Overall + +See the overall list of breaking changes: + +- Bootstrap 5 implementation [#10067](https://github.com/abpframework/abp/issues/10067) +- Remove NGXS dependency & states [#9952](https://github.com/abpframework/abp/issues/9952) +- Install @angular/localize package to startup templates [#10099](https://github.com/abpframework/abp/issues/10099) +- Create new secondary entrypoints and move the related proxies to there [#10060](https://github.com/abpframework/abp/issues/10060) +- Move SettingTabsService to @abp/ng.setting-management/config package from @abp/ng.core [#10061](https://github.com/abpframework/abp/issues/10061) +- Make the @abp/ng.account dependent on @abp/ng.identity [#10059](https://github.com/abpframework/abp/issues/10059) +- Set default abp-modal size medium [#10118](https://github.com/abpframework/abp/issues/10118) +- Update all dependency versions to the latest [#9806](https://github.com/abpframework/abp/issues/9806) +- Chart.js big include with CommonJS warning [#7472](https://github.com/abpframework/abp/issues/7472) + +### Angular v12 + +The new ABP Angular UI is based on Angular v12. We started to compile Angular UI packages with the Ivy compilation. Therefore, **new packages only work with Angular v12**. If you are still on the older version of Angular v12, you have to update to Angular v12. The update is usually very easy. See [Angular Update Guide](https://update.angular.io/?l=2&v=11.0-12.0) for further information. + +### Bootstrap 5 + +TODO + +### NGXS has been removed + +We aim to make the ABP Framework free of any state-management solutions. ABP developers should be able to use the ABP Framework with any library/framework of their choice. So, we decided to remove NGXS from ABP packages. + +If you'd like to use NGXS after upgrading to v5.0, you have to install the NGXS to your project. The package can be installed with the following command: + +```bash +npm install @ngxs/store + +# or + +yarn add @ngxs/store +``` + +NGXS states and actions, some namespaces have been removed. See [this issue](https://github.com/abpframework/abp/issues/9952) for the details. + +If you don't want to use the NGXS, you should remove all NGXS related imports, injections, etc., from your project. + +### @angular/localize package + +[`@angular/localize`](https://angular.io/api/localize) dependency has been removed from `@abp/ng.core` package. The package must be installed in your app. Run the following command to install: + +```bash +npm install @angular/localize + +# or + +yarn add @angular/localize +``` + +> ABP Angular UI packages are not dependent on the `@angular/localize` package. However, some packages (like `@ng-bootstrap/ng-bootstrap`) depend on the package. Thus, this package needs to be installed in your project. + +### Proxy endpoints + +New endpoints named proxy have been created, related proxies have moved. +For example; before v5.0, `IdentityUserService` could be imported from `@abp/ng.identity`. As of v5.0, the service can be imported from `@abp/ng.identity/proxy`. See an example: + +```ts +import { IdentityUserService } from '@abp/ng.identity/proxy'; + +@Component({}) +export class YourComponent { + constructor(private identityUserService: IdentityUserService) {} +} +``` + +Following proxies have been affected: + +- `@abp/ng.account` to `@abp/ng.account.core/proxy` +- `@abp/ng.feature-management` to `@abp/ng.feature-management/proxy` +- `@abp/ng.identity` to `@abp/ng.identity/proxy` +- `@abp/ng.permission-management` to `@abp/ng.permission-management/proxy` +- `@abp/ng.tenant-management` to `@abp/ng.tenant-management/proxy` +- **ProfileService** is deleted from `@abp/ng.core`. Instead, you can import it from `@abp/ng.identity/proxy` + +### SettingTabsService + +**SettingTabsService** has moved from `@abp/ng.core` to `@abp/ng.setting-management/config`. + +### ChartComponent + +`ChartComponent` has moved from `@abp/ng.theme.shared` to `@abp/ng.components/chart.js`. To use the component, you need to import the `ChartModule` to your module as follows: + +```ts +import { ChartModule } from '@abp/ng.components/chart.js'; + +@NgModule({ + imports: [ + ChartModule, + // ... + ], + // ... +}) +export class YourFeatureModule {} +``` diff --git a/docs/en/Migration-Guides/Abp-5_0.md b/docs/en/Migration-Guides/Abp-5_0.md new file mode 100644 index 0000000000..7e5a00a75b --- /dev/null +++ b/docs/en/Migration-Guides/Abp-5_0.md @@ -0,0 +1,5 @@ +# ABP Framework 3.3 to 4.0 Migration Guide + +## Angular UI + +See the [Angular UI Migration Guide](Abp-5_0-Angular.md). diff --git a/docs/en/Migration-Guides/Index.md b/docs/en/Migration-Guides/Index.md index c7bee5a82a..909f6c0998 100644 --- a/docs/en/Migration-Guides/Index.md +++ b/docs/en/Migration-Guides/Index.md @@ -1,7 +1,7 @@ # ABP Framework Migration Guides -* [4.2 to 4.3](Abp-4_3.md) -* [4.x to 4.2](Abp-4_2.md) -* [3.3.x to 4.0](Abp-4_0.md) -* [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md) - +- [4.x to 5.0](Abp-5_0.md) +- [4.2 to 4.3](Abp-4_3.md) +- [4.x to 4.2](Abp-4_2.md) +- [3.3.x to 4.0](Abp-4_0.md) +- [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md) From 240ec5b9ed048cb66828107255cffc414bf33a2a Mon Sep 17 00:00:00 2001 From: Mehmet Erim Date: Wed, 29 Sep 2021 14:25:52 +0300 Subject: [PATCH 39/55] Update Abp-5_0.md --- docs/en/Migration-Guides/Abp-5_0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Migration-Guides/Abp-5_0.md b/docs/en/Migration-Guides/Abp-5_0.md index 7e5a00a75b..5ae3fc87fd 100644 --- a/docs/en/Migration-Guides/Abp-5_0.md +++ b/docs/en/Migration-Guides/Abp-5_0.md @@ -1,4 +1,4 @@ -# ABP Framework 3.3 to 4.0 Migration Guide +# ABP Framework v4.x to v5.0 Migration Guide ## Angular UI From b809ee50e329d341f64f271c3d0eb05568d56379 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 30 Sep 2021 00:01:57 +0800 Subject: [PATCH 40/55] Refactor --- .../MySQLInboxConfigExtensions.cs | 13 +++++ .../MySQLOutboxConfigExtensions.cs | 13 +++++ .../IOracleDbContextEventInbox.cs | 8 ++++ .../IOracleDbContextEventOutbox.cs | 7 +++ .../OracleDbContextEventInbox.cs | 47 +++++++++++++++++++ .../OracleDbContextEventOutbox.cs | 31 ++++++++++++ .../OracleInboxConfigExtensions.cs | 13 +++++ .../OracleOutboxConfigExtensions.cs | 13 +++++ ...bpEntityFrameworkCoreOracleDevartModule.cs | 7 ++- .../IOracleDbContextEventInbox.cs | 8 ++++ .../IOracleDbContextEventOutbox.cs | 7 +++ .../OracleDbContextEventInbox.cs | 47 +++++++++++++++++++ .../OracleDbContextEventOutbox.cs | 31 ++++++++++++ .../OracleInboxConfigExtensions.cs | 13 +++++ .../OracleOutboxConfigExtensions.cs | 13 +++++ .../AbpEntityFrameworkCoreOracleModule.cs | 7 ++- .../IPostgreSqlDbContextEventInbox.cs | 8 ++++ .../IPostgreSqlDbContextEventOutbox.cs | 7 +++ .../DistributedEvents/PostgreSqlAdapter.cs | 25 ---------- .../PostgreSqlDbContextEventInbox.cs | 43 +++++++++++++++++ .../PostgreSqlDbContextEventOutbox.cs | 25 ++++++++++ .../PostgreSqlInboxConfigExtensions.cs | 13 +++++ .../PostgreSqlOutboxConfigExtensions.cs | 13 +++++ .../AbpEntityFrameworkCorePostgreSqlModule.cs | 8 ++-- .../SqlServerInboxConfigExtensions.cs | 13 +++++ .../SqlServerOutboxConfigExtensions.cs | 13 +++++ .../SqliteInboxConfigExtensions.cs | 13 +++++ .../SqliteOutboxConfigExtensions.cs | 13 +++++ .../AbpEntityFrameworkCoreModule.cs | 9 ++-- .../AbpEfCoreDistributedEventBusOptions.cs | 19 -------- .../DistributedEvents/DbContextEventInbox.cs | 33 ++++--------- .../DistributedEvents/DbContextEventOutbox.cs | 19 +++----- .../DistributedEvents/DefaultSqlAdapter.cs | 27 ----------- .../DistributedEvents/ISqlAdapter.cs | 13 ----- .../ISqlRawDbContextEventInbox.cs | 7 +++ .../ISqlRawDbContextEventOutbox.cs | 7 +++ .../SqlRawDbContextEventInbox.cs | 43 +++++++++++++++++ .../SqlRawDbContextEventOutbox.cs | 26 ++++++++++ 38 files changed, 543 insertions(+), 132 deletions(-) create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLOutboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventOutbox.cs delete mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerOutboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteInboxConfigExtensions.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteOutboxConfigExtensions.cs delete mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs delete mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs delete mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventOutbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs create mode 100644 framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLInboxConfigExtensions.cs new file mode 100644 index 0000000000..ecda92702b --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class MySQLInboxConfigExtensions + { + public static void UseMySQL(this InboxConfig outboxConfig) + where TDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventInbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLOutboxConfigExtensions.cs new file mode 100644 index 0000000000..8657ba92ab --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/Volo/Abp/EntityFrameworkCore/DistributedEvents/MySQLOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class MySQLOutboxConfigExtensions + { + public static void UseMySQL(this OutboxConfig outboxConfig) + where TDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventOutbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs new file mode 100644 index 0000000000..0cc7ae5531 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IOracleDbContextEventInbox : IDbContextEventInbox + where TDbContext : IHasEventInbox + { + + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs new file mode 100644 index 0000000000..a588f36e43 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IOracleDbContextEventOutbox : IDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs new file mode 100644 index 0000000000..d5f1b7afcc --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs @@ -0,0 +1,47 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Timing; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class OracleDbContextEventInbox : DbContextEventInbox , IOracleDbContextEventInbox + where TDbContext : IHasEventInbox + { + public OracleDbContextEventInbox( + IDbContextProvider dbContextProvider, + IClock clock, + IOptions distributedEventsOptions) : base(dbContextProvider, clock, distributedEventsOptions) + { + } + + [UnitOfWork] + public override async Task MarkAsProcessedAsync(Guid id) + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"UPDATE \"{tableName}\" SET \"Processed\" = '1', \"ProcessedTime\" = TO_DATE('{Clock.Now}', 'yyyy-mm-dd hh24:mi:ss') WHERE \"Id\" = HEXTORAW('{GuidToOracleType(id)}')"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + [UnitOfWork] + public override async Task DeleteOldEventsAsync() + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + + var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + protected virtual string GuidToOracleType(Guid id) + { + return BitConverter.ToString(id.ToByteArray()).Replace("-", "").ToUpper(); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs new file mode 100644 index 0000000000..a5c4566ced --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs @@ -0,0 +1,31 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class OracleDbContextEventOutbox : DbContextEventOutbox , IOracleDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + public OracleDbContextEventOutbox(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + [UnitOfWork] + public override async Task DeleteAsync(Guid id) + { + var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"DELETE FROM \"{tableName}\" WHERE \"Id\" = HEXTORAW('{GuidToOracleType(id)}')"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + protected virtual string GuidToOracleType(Guid id) + { + return BitConverter.ToString(id.ToByteArray()).Replace("-", "").ToUpper(); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs new file mode 100644 index 0000000000..ca79019e28 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class OracleInboxConfigExtensions + { + public static void UseOracle(this InboxConfig outboxConfig) + where TDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(IOracleDbContextEventInbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs new file mode 100644 index 0000000000..e2d7d33761 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class OracleOutboxConfigExtensions + { + public static void UseOracle(this OutboxConfig outboxConfig) + where TDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(IOracleDbContextEventOutbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/Oracle/Devart/AbpEntityFrameworkCoreOracleDevartModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/Oracle/Devart/AbpEntityFrameworkCoreOracleDevartModule.cs index 9580219cfc..76d0ecdd21 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/Oracle/Devart/AbpEntityFrameworkCoreOracleDevartModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/Oracle/Devart/AbpEntityFrameworkCoreOracleDevartModule.cs @@ -1,4 +1,6 @@ -using Volo.Abp.Guids; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EntityFrameworkCore.DistributedEvents; +using Volo.Abp.Guids; using Volo.Abp.Modularity; namespace Volo.Abp.EntityFrameworkCore.Oracle.Devart @@ -17,6 +19,9 @@ namespace Volo.Abp.EntityFrameworkCore.Oracle.Devart options.DefaultSequentialGuidType = SequentialGuidType.SequentialAsBinary; } }); + + context.Services.AddTransient(typeof(IOracleDbContextEventOutbox<>), typeof(OracleDbContextEventOutbox<>)); + context.Services.AddTransient(typeof(IOracleDbContextEventInbox<>), typeof(OracleDbContextEventInbox<>)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs new file mode 100644 index 0000000000..0cc7ae5531 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventInbox.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IOracleDbContextEventInbox : IDbContextEventInbox + where TDbContext : IHasEventInbox + { + + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs new file mode 100644 index 0000000000..a588f36e43 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/IOracleDbContextEventOutbox.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IOracleDbContextEventOutbox : IDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs new file mode 100644 index 0000000000..d5f1b7afcc --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs @@ -0,0 +1,47 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Timing; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class OracleDbContextEventInbox : DbContextEventInbox , IOracleDbContextEventInbox + where TDbContext : IHasEventInbox + { + public OracleDbContextEventInbox( + IDbContextProvider dbContextProvider, + IClock clock, + IOptions distributedEventsOptions) : base(dbContextProvider, clock, distributedEventsOptions) + { + } + + [UnitOfWork] + public override async Task MarkAsProcessedAsync(Guid id) + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"UPDATE \"{tableName}\" SET \"Processed\" = '1', \"ProcessedTime\" = TO_DATE('{Clock.Now}', 'yyyy-mm-dd hh24:mi:ss') WHERE \"Id\" = HEXTORAW('{GuidToOracleType(id)}')"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + [UnitOfWork] + public override async Task DeleteOldEventsAsync() + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + + var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + protected virtual string GuidToOracleType(Guid id) + { + return BitConverter.ToString(id.ToByteArray()).Replace("-", "").ToUpper(); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs new file mode 100644 index 0000000000..a5c4566ced --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventOutbox.cs @@ -0,0 +1,31 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class OracleDbContextEventOutbox : DbContextEventOutbox , IOracleDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + public OracleDbContextEventOutbox(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + [UnitOfWork] + public override async Task DeleteAsync(Guid id) + { + var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"DELETE FROM \"{tableName}\" WHERE \"Id\" = HEXTORAW('{GuidToOracleType(id)}')"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + protected virtual string GuidToOracleType(Guid id) + { + return BitConverter.ToString(id.ToByteArray()).Replace("-", "").ToUpper(); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs new file mode 100644 index 0000000000..ca79019e28 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class OracleInboxConfigExtensions + { + public static void UseOracle(this InboxConfig outboxConfig) + where TDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(IOracleDbContextEventInbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs new file mode 100644 index 0000000000..e2d7d33761 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class OracleOutboxConfigExtensions + { + public static void UseOracle(this OutboxConfig outboxConfig) + where TDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(IOracleDbContextEventOutbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/Oracle/AbpEntityFrameworkCoreOracleModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/Oracle/AbpEntityFrameworkCoreOracleModule.cs index b7cbaec1a1..7716ae6150 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/Oracle/AbpEntityFrameworkCoreOracleModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/Oracle/AbpEntityFrameworkCoreOracleModule.cs @@ -1,4 +1,6 @@ -using Volo.Abp.Guids; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EntityFrameworkCore.DistributedEvents; +using Volo.Abp.Guids; using Volo.Abp.Modularity; namespace Volo.Abp.EntityFrameworkCore.Oracle @@ -15,6 +17,9 @@ namespace Volo.Abp.EntityFrameworkCore.Oracle options.DefaultSequentialGuidType = SequentialGuidType.SequentialAsBinary; } }); + + context.Services.AddTransient(typeof(IOracleDbContextEventOutbox<>), typeof(OracleDbContextEventOutbox<>)); + context.Services.AddTransient(typeof(IOracleDbContextEventInbox<>), typeof(OracleDbContextEventInbox<>)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventInbox.cs new file mode 100644 index 0000000000..5c24d79f88 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventInbox.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IPostgreSqlDbContextEventInbox : IDbContextEventInbox + where TDbContext : IHasEventInbox + { + + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventOutbox.cs new file mode 100644 index 0000000000..7e6bc4bd59 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/IPostgreSqlDbContextEventOutbox.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface IPostgreSqlDbContextEventOutbox : IDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs deleted file mode 100644 index 0c84ec929e..0000000000 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlAdapter.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace Volo.Abp.EntityFrameworkCore.DistributedEvents -{ - public class PostgreSqlAdapter : ISqlAdapter - { - public string NormalizeTableName(string tableName) - { - return $"\"{tableName}\""; - } - - public string NormalizeColumnName(string columnName) - { - return $"\"{columnName}\""; - } - - public string NormalizeColumnNameEqualsValue(string columnName, object value) - { - return $"\"{columnName}\" = '{value}'"; - } - - public string NormalizeValue(object value) - { - return $"'{value}'"; - } - } -} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs new file mode 100644 index 0000000000..4560bdb2c4 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs @@ -0,0 +1,43 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Timing; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class PostgreSqlDbContextEventInbox : DbContextEventInbox, IPostgreSqlDbContextEventInbox + where TDbContext : IHasEventInbox + { + public PostgreSqlDbContextEventInbox( + IDbContextProvider dbContextProvider, + IClock clock, + IOptions distributedEventsOptions) + : base(dbContextProvider, clock, distributedEventsOptions) + { + } + + [UnitOfWork] + public override async Task MarkAsProcessedAsync(Guid id) + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"UPDATE \"{tableName}\" SET \"Processed\" = '1', \"ProcessedTime\" = '{Clock.Now}' WHERE \"Id\" = '{id}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + [UnitOfWork] + public override async Task DeleteOldEventsAsync() + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + + var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < '{timeToKeepEvents}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs new file mode 100644 index 0000000000..c5e79a0014 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventOutbox.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class PostgreSqlDbContextEventOutbox : DbContextEventOutbox , IPostgreSqlDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + public PostgreSqlDbContextEventOutbox(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + [UnitOfWork] + public override async Task DeleteAsync(Guid id) + { + var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"DELETE FROM \"{tableName}\" WHERE \"Id\" = '{id}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs new file mode 100644 index 0000000000..55afc4794d --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class PostgreSqlInboxConfigExtensions + { + public static void UsePostgreSql(this InboxConfig outboxConfig) + where TDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(IPostgreSqlDbContextEventInbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs new file mode 100644 index 0000000000..5a65d15c90 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class PostgreSqlOutboxConfigExtensions + { + public static void UsePostgreSql(this OutboxConfig outboxConfig) + where TDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(IPostgreSqlDbContextEventOutbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs index 7d8c87c63a..55c1a4af42 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/PostgreSql/AbpEntityFrameworkCorePostgreSqlModule.cs @@ -1,4 +1,4 @@ -using Npgsql; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.Guids; using Volo.Abp.Modularity; @@ -20,10 +20,8 @@ namespace Volo.Abp.EntityFrameworkCore.PostgreSql } }); - Configure(options => - { - options.SqlAdapters.TryAdd(nameof(NpgsqlConnection).ToLower(), new PostgreSqlAdapter()); - }); + context.Services.AddTransient(typeof(IPostgreSqlDbContextEventOutbox<>), typeof(PostgreSqlDbContextEventOutbox<>)); + context.Services.AddTransient(typeof(IPostgreSqlDbContextEventInbox<>), typeof(PostgreSqlDbContextEventInbox<>)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerInboxConfigExtensions.cs new file mode 100644 index 0000000000..60adf600c7 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class SqlServerInboxConfigExtensions + { + public static void UseSqlServer(this InboxConfig outboxConfig) + where TDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventInbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerOutboxConfigExtensions.cs new file mode 100644 index 0000000000..9022d5c7e6 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlServerOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class SqlServerOutboxConfigExtensions + { + public static void UseSqlServer(this OutboxConfig outboxConfig) + where TDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventOutbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteInboxConfigExtensions.cs new file mode 100644 index 0000000000..ccc92d4eb1 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteInboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class SqliteInboxConfigExtensions + { + public static void UseSqlite(this InboxConfig outboxConfig) + where TDbContext : IHasEventInbox + { + outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventInbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteOutboxConfigExtensions.cs new file mode 100644 index 0000000000..c1d9949c19 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqliteOutboxConfigExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.EventBus.Distributed; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public static class SqliteOutboxConfigExtensions + { + public static void UseSqlite(this OutboxConfig outboxConfig) + where TDbContext : IHasEventOutbox + { + outboxConfig.ImplementationType = typeof(ISqlRawDbContextEventOutbox); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs index 349116d6eb..f7834c1835 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs @@ -5,6 +5,7 @@ using Volo.Abp.Domain; using Volo.Abp.EntityFrameworkCore.DependencyInjection; using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.Modularity; +using Volo.Abp.Uow; using Volo.Abp.Uow.EntityFrameworkCore; namespace Volo.Abp.EntityFrameworkCore @@ -26,14 +27,12 @@ namespace Volo.Abp.EntityFrameworkCore }); }); - Configure(options => - { - options.SqlAdapters.Add(DefaultSqlAdapter.Name, new DefaultSqlAdapter()); - }); - context.Services.TryAddTransient(typeof(IDbContextProvider<>), typeof(UnitOfWorkDbContextProvider<>)); context.Services.AddTransient(typeof(IDbContextEventOutbox<>), typeof(DbContextEventOutbox<>)); context.Services.AddTransient(typeof(IDbContextEventInbox<>), typeof(DbContextEventInbox<>)); + + context.Services.AddTransient(typeof(ISqlRawDbContextEventOutbox<>), typeof(SqlRawDbContextEventOutbox<>)); + context.Services.AddTransient(typeof(ISqlRawDbContextEventInbox<>), typeof(SqlRawDbContextEventInbox<>)); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs deleted file mode 100644 index 9497552a09..0000000000 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/AbpEfCoreDistributedEventBusOptions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections.Generic; - -namespace Volo.Abp.EntityFrameworkCore.DistributedEvents -{ - public class AbpEfCoreDistributedEventBusOptions - { - public Dictionary SqlAdapters { get; set; } - - public ISqlAdapter GetSqlAdapter(string connectionType) - { - return SqlAdapters.TryGetValue(connectionType, out var sqlAdapter) ? sqlAdapter : SqlAdapters[DefaultSqlAdapter.Name]; - } - - public AbpEfCoreDistributedEventBusOptions() - { - SqlAdapters = new Dictionary(); - } - } -} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index d8f18c6f32..982d335d17 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -16,18 +16,15 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { protected IDbContextProvider DbContextProvider { get; } protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } - protected AbpEfCoreDistributedEventBusOptions EfCoreDistributedEventBusOptions { get; } protected IClock Clock { get; } public DbContextEventInbox( IDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions, - IOptions efCoreDistributedEventBusOptions) + IOptions distributedEventsOptions) { DbContextProvider = dbContextProvider; Clock = clock; - EfCoreDistributedEventBusOptions = efCoreDistributedEventBusOptions.Value; DistributedEventsOptions = distributedEventsOptions.Value; } @@ -63,16 +60,11 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public virtual async Task MarkAsProcessedAsync(Guid id) { var dbContext = await DbContextProvider.GetDbContextAsync(); - var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); - var connectionName = dbContext.Database.GetDbConnection().GetType().Name.ToLower(); - var sqlAdapter = EfCoreDistributedEventBusOptions.GetSqlAdapter(connectionName); - - var sql = $"UPDATE {sqlAdapter.NormalizeTableName(tableName)} SET " + - $"{sqlAdapter.NormalizeColumnNameEqualsValue("Processed", 1)}, " + - $"{sqlAdapter.NormalizeColumnNameEqualsValue("ProcessedTime", Clock.Now)} WHERE " + - $"{sqlAdapter.NormalizeColumnNameEqualsValue("Id", id)}"; - - await dbContext.Database.ExecuteSqlRawAsync(sql); + var incomingEvent = await dbContext.IncomingEvents.FindAsync(id); + if (incomingEvent != null) + { + incomingEvent.MarkAsProcessed(Clock.Now); + } } [UnitOfWork] @@ -86,16 +78,11 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public virtual async Task DeleteOldEventsAsync() { var dbContext = await DbContextProvider.GetDbContextAsync(); - var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); - var connectionName = dbContext.Database.GetDbConnection().GetType().Name.ToLower(); - var sqlAdapter = EfCoreDistributedEventBusOptions.GetSqlAdapter(connectionName); - - var sql = $"DELETE FROM {sqlAdapter.NormalizeTableName(tableName)} WHERE " + - $"{sqlAdapter.NormalizeColumnNameEqualsValue("Processed", 1)} AND " + - $"{sqlAdapter.NormalizeColumnName("CreationTime")} < {sqlAdapter.NormalizeValue(timeToKeepEvents)}"; - - await dbContext.Database.ExecuteSqlRawAsync(sql); + var oldEvents = await dbContext.IncomingEvents + .Where(x => x.Processed && x.CreationTime < timeToKeepEvents) + .ToListAsync(); + dbContext.IncomingEvents.RemoveRange(oldEvents); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs index 5451a0a30a..0b8909b966 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventOutbox.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Options; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Uow; @@ -14,14 +13,11 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents where TDbContext : IHasEventOutbox { protected IDbContextProvider DbContextProvider { get; } - protected AbpEfCoreDistributedEventBusOptions EfCoreDistributedEventBusOptions { get; } public DbContextEventOutbox( - IDbContextProvider dbContextProvider, - IOptions efCoreDistributedEventBusOptions) + IDbContextProvider dbContextProvider) { DbContextProvider = dbContextProvider; - EfCoreDistributedEventBusOptions = efCoreDistributedEventBusOptions.Value; } [UnitOfWork] @@ -54,14 +50,11 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public virtual async Task DeleteAsync(Guid id) { var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); - var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); - var connectionName = dbContext.Database.GetDbConnection().GetType().Name.ToLower(); - var sqlAdapter = EfCoreDistributedEventBusOptions.GetSqlAdapter(connectionName); - - var sql = $"DELETE FROM {sqlAdapter.NormalizeTableName(tableName)} WHERE " + - $"{sqlAdapter.NormalizeColumnNameEqualsValue("Id", id)}"; - - await dbContext.Database.ExecuteSqlRawAsync(sql); + var outgoingEvent = await dbContext.OutgoingEvents.FindAsync(id); + if (outgoingEvent != null) + { + dbContext.Remove(outgoingEvent); + } } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs deleted file mode 100644 index 8a86af7434..0000000000 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DefaultSqlAdapter.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace Volo.Abp.EntityFrameworkCore.DistributedEvents -{ - public class DefaultSqlAdapter : ISqlAdapter - { - public const string Name = "default"; - - public string NormalizeTableName(string tableName) - { - return tableName; - } - - public string NormalizeColumnName(string columnName) - { - return columnName; - } - - public string NormalizeColumnNameEqualsValue(string columnName, object value) - { - return $"{columnName} = '{value}'"; - } - - public string NormalizeValue(object value) - { - return $"'{value}'"; - } - } -} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs deleted file mode 100644 index 9b366f00ab..0000000000 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlAdapter.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Volo.Abp.EntityFrameworkCore.DistributedEvents -{ - public interface ISqlAdapter - { - string NormalizeTableName(string tableName); - - string NormalizeColumnName(string columnName); - - string NormalizeColumnNameEqualsValue(string columnName, object value); - - string NormalizeValue(object value); - } -} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventInbox.cs new file mode 100644 index 0000000000..d86e3f36ed --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventInbox.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface ISqlRawDbContextEventInbox : IDbContextEventInbox + where TDbContext : IHasEventInbox + { + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventOutbox.cs new file mode 100644 index 0000000000..776cc2f93c --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/ISqlRawDbContextEventOutbox.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public interface ISqlRawDbContextEventOutbox : IDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs new file mode 100644 index 0000000000..04bef7579d --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs @@ -0,0 +1,43 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Timing; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class SqlRawDbContextEventInbox : DbContextEventInbox , ISqlRawDbContextEventInbox + where TDbContext : IHasEventInbox + { + public SqlRawDbContextEventInbox( + IDbContextProvider dbContextProvider, + IClock clock, + IOptions distributedEventsOptions) + : base(dbContextProvider, clock, distributedEventsOptions) + { + } + + [UnitOfWork] + public override async Task MarkAsProcessedAsync(Guid id) + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"UPDATE {tableName} SET Processed = '1', ProcessedTime = '{Clock.Now}' WHERE Id = '{id}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + + [UnitOfWork] + public override async Task DeleteOldEventsAsync() + { + var dbContext = await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); + var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + + var sql = $"DELETE FROM {tableName} WHERE Processed = '1' AND CreationTime < '{timeToKeepEvents}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs new file mode 100644 index 0000000000..6c890ef9f8 --- /dev/null +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs @@ -0,0 +1,26 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Uow; + +namespace Volo.Abp.EntityFrameworkCore.DistributedEvents +{ + public class SqlRawDbContextEventOutbox : DbContextEventOutbox , ISqlRawDbContextEventOutbox + where TDbContext : IHasEventOutbox + { + public SqlRawDbContextEventOutbox(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + [UnitOfWork] + public override async Task DeleteAsync(Guid id) + { + var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); + var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); + + var sql = $"DELETE FROM {tableName} WHERE Id = '{id}'"; + await dbContext.Database.ExecuteSqlRawAsync(sql); + } + } +} From 28da0b837c35184068644dd0b599da79f2d9a098 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 30 Sep 2021 00:35:31 +0800 Subject: [PATCH 41/55] Improve --- .../DistributedEvents/PostgreSqlInboxConfigExtensions.cs | 2 +- .../DistributedEvents/PostgreSqlOutboxConfigExtensions.cs | 2 +- .../DistributedEvents/SqlRawDbContextEventInbox.cs | 2 +- .../DistributedEvents/SqlRawDbContextEventOutbox.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs index 55afc4794d..f4bb462a1c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlInboxConfigExtensions.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { public static class PostgreSqlInboxConfigExtensions { - public static void UsePostgreSql(this InboxConfig outboxConfig) + public static void UseNpgsql(this InboxConfig outboxConfig) where TDbContext : IHasEventInbox { outboxConfig.ImplementationType = typeof(IPostgreSqlDbContextEventInbox); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs index 5a65d15c90..853ae9ba59 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlOutboxConfigExtensions.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { public static class PostgreSqlOutboxConfigExtensions { - public static void UsePostgreSql(this OutboxConfig outboxConfig) + public static void UseNpgsql(this OutboxConfig outboxConfig) where TDbContext : IHasEventOutbox { outboxConfig.ImplementationType = typeof(IPostgreSqlDbContextEventOutbox); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs index 04bef7579d..ce7302755a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); - var sql = $"UPDATE {tableName} SET Processed = '1', ProcessedTime = '{Clock.Now}' WHERE Id = '{id}'"; + var sql = $"UPDATE {tableName} SET Processed = '1', ProcessedTime = '{Clock.Now}' WHERE Id = '{id.ToString().ToUpper()}'"; await dbContext.Database.ExecuteSqlRawAsync(sql); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs index 6c890ef9f8..8748e6dc09 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventOutbox.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents var dbContext = (IHasEventOutbox) await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.OutgoingEvents.EntityType.GetSchemaQualifiedTableName(); - var sql = $"DELETE FROM {tableName} WHERE Id = '{id}'"; + var sql = $"DELETE FROM {tableName} WHERE Id = '{id.ToString().ToUpper()}'"; await dbContext.Database.ExecuteSqlRawAsync(sql); } } From 2eddc9aa2b7d4001501f097e95bb04b6325a53ad Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 30 Sep 2021 14:38:26 +0800 Subject: [PATCH 42/55] Add an options to disable the `AbpMongoDbDateTimeSerializer`. --- .../Volo/Abp/MongoDB/AbpMongoDbOptions.cs | 18 ++++++++ .../Volo/Abp/MongoDB/MongoModelBuilder.cs | 19 +++++---- .../Serializer/MongoDB_DateTimeKind_Tests.cs | 41 ++++++++++++++++++- 3 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbOptions.cs diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbOptions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbOptions.cs new file mode 100644 index 0000000000..21502e0cf8 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbOptions.cs @@ -0,0 +1,18 @@ +using Volo.Abp.Timing; + +namespace Volo.Abp.MongoDB +{ + public class AbpMongoDbOptions + { + /// + /// Serializer the datetime based on in MongoDb. + /// Default: true. + /// + public bool UseAbpClockHandleDateTime { get; set; } + + public AbpMongoDbOptions() + { + UseAbpClockHandleDateTime = true; + } + } +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs index 1f155fc21d..03f3b52572 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoModelBuilder.cs @@ -28,7 +28,7 @@ namespace Volo.Abp.MongoDB { lock (SyncObj) { - var clockOptions = dbContext.LazyServiceProvider?.LazyGetService>(); + var useAbpClockHandleDateTime = dbContext.LazyServiceProvider.LazyGetRequiredService>().Value.UseAbpClockHandleDateTime; var entityModels = _entityModelBuilders .Select(x => x.Value) @@ -41,7 +41,7 @@ namespace Volo.Abp.MongoDB { var map = entityModel.As().GetMap(); - if (clockOptions != null) + if (useAbpClockHandleDateTime) { var dateTimePropertyInfos = entityModel.EntityType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) .Where(property => @@ -58,11 +58,11 @@ namespace Volo.Abp.MongoDB if (property.PropertyType == typeof(DateTime?)) { - map.MapProperty(property.Name).SetSerializer(new NullableSerializer().WithSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, disableDateTimeNormalization))); + map.MapProperty(property.Name).SetSerializer(new NullableSerializer().WithSerializer(new AbpMongoDbDateTimeSerializer(GetDateTimeKind(dbContext), disableDateTimeNormalization))); } else { - map.MapProperty(property.Name).SetSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, disableDateTimeNormalization)); + map.MapProperty(property.Name).SetSerializer(new AbpMongoDbDateTimeSerializer(GetDateTimeKind(dbContext), disableDateTimeNormalization)); } }); } @@ -86,7 +86,7 @@ namespace Volo.Abp.MongoDB var map = new BsonClassMap(baseClass); map.ConfigureAbpConventions(); - if (clockOptions != null) + if (useAbpClockHandleDateTime) { var dateTimePropertyInfos = baseClass.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) .Where(property => @@ -99,11 +99,11 @@ namespace Volo.Abp.MongoDB { if (property.PropertyType == typeof(DateTime?)) { - map.MapProperty(property.Name).SetSerializer(new NullableSerializer().WithSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, false))); + map.MapProperty(property.Name).SetSerializer(new NullableSerializer().WithSerializer(new AbpMongoDbDateTimeSerializer(GetDateTimeKind(dbContext), false))); } else { - map.MapProperty(property.Name).SetSerializer(new AbpMongoDbDateTimeSerializer(clockOptions.Value.Kind, false)); + map.MapProperty(property.Name).SetSerializer(new AbpMongoDbDateTimeSerializer(GetDateTimeKind(dbContext), false)); } }); } @@ -116,6 +116,11 @@ namespace Volo.Abp.MongoDB } } + private DateTimeKind GetDateTimeKind(AbpMongoDbContext dbContext) + { + return dbContext.LazyServiceProvider.LazyGetRequiredService>().Value.Kind; + } + public virtual void Entity(Action> buildAction = null) { var model = (IMongoEntityModelBuilder)_entityModelBuilders.GetOrAdd( diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs index f691145d60..39a685380b 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Serializer/MongoDB_DateTimeKind_Tests.cs @@ -1,8 +1,11 @@ using System; using System.Reflection; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; +using Shouldly; +using Volo.Abp.TestApp.Domain; using Volo.Abp.TestApp.Testing; using Volo.Abp.Timing; using Xunit; @@ -10,7 +13,7 @@ using Xunit; namespace Volo.Abp.MongoDB.Serializer { [Collection(MongoTestCollection.Name)] - public abstract class MongoDB_DateTimeKind_Tests : DateTimeKind_Tests, IDisposable + public abstract class MongoDB_DateTimeKind_Tests : DateTimeKind_Tests { protected override void AfterAddApplication(IServiceCollection services) { @@ -78,4 +81,40 @@ namespace Volo.Abp.MongoDB.Serializer base.AfterAddApplication(services); } } + + [Collection(MongoTestCollection.Name)] + public class DisableDateTimeKindTests : TestAppTestBase + { + protected IPersonRepository PersonRepository { get; } + + public DisableDateTimeKindTests() + { + PersonRepository = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + services.Configure(x => x.UseAbpClockHandleDateTime = false); + base.AfterAddApplication(services); + } + + [Fact] + public async Task DateTime_Kind_Should_Be_Normalized_By_MongoDb_Test() + { + var personId = Guid.NewGuid(); + await PersonRepository.InsertAsync(new Person(personId, "bob lee", 18) + { + Birthday = DateTime.Parse("2020-01-01 00:00:00"), + LastActive = DateTime.Parse("2020-01-01 00:00:00"), + }, true); + + var person = await PersonRepository.GetAsync(personId); + + person.ShouldNotBeNull(); + person.CreationTime.Kind.ShouldBe(DateTimeKind.Utc); + + person.Birthday.ShouldNotBeNull(); + person.Birthday.Value.Kind.ShouldBe(DateTimeKind.Utc); + } + } } From 1962158928e65839f4b154bef20c9df30fb40961 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 30 Sep 2021 15:09:42 +0800 Subject: [PATCH 43/55] Create Abp-5_0.md --- docs/en/Migration-Guides/Abp-5_0.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/en/Migration-Guides/Abp-5_0.md diff --git a/docs/en/Migration-Guides/Abp-5_0.md b/docs/en/Migration-Guides/Abp-5_0.md new file mode 100644 index 0000000000..7f23f5ed19 --- /dev/null +++ b/docs/en/Migration-Guides/Abp-5_0.md @@ -0,0 +1,10 @@ +# ABP Framework 4.x to 5.0 Migration Guide + +## MongoDB + +Framework will serializer the datetime based on [AbpClockOptions](https://docs.abp.io/en/abp/latest/Timing#clock-options) start from 5.0, before `DateTime` values in MongoDB are [always saved as UTC](https://mongodb.github.io/mongo-csharp-driver/2.13/reference/bson/mapping/#datetime-serialization-options). + +You can disable this behavior by configure `AbpMongoDbOptions`. +```cs +services.Configure(x => x.UseAbpClockHandleDateTime = false); +``` From 3ee9f57c9dd50a6ecb77b121cb74808aaae17e47 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 30 Sep 2021 15:17:19 +0800 Subject: [PATCH 44/55] Improve --- .../Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj | 2 +- .../Volo/Abp/Domain/AbpDddDomainModule.cs | 3 ++- .../DistributedEvents/OracleDbContextEventInbox.cs | 6 ++++-- .../DistributedEvents/OracleDbContextEventInbox.cs | 7 ++++--- .../PostgreSqlDbContextEventInbox.cs | 7 ++++--- .../AbpEntityFrameworkCoreModule.cs | 2 -- .../DistributedEvents/DbContextEventInbox.cs | 9 +++++---- .../DistributedEvents/SqlRawDbContextEventInbox.cs | 8 ++++---- .../Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs | 11 ++++++++--- .../Volo/Abp/EventBus/Boxes/InboxProcessor.cs | 8 ++++---- .../Volo/Abp/EventBus/Boxes/OutboxSender.cs | 4 ++-- .../Distributed/AbpDistributedEventBusOptions.cs | 8 -------- .../Abp/MongoDB/DistributedEvents/IHasEventInbox.cs | 4 ++-- .../MongoDB/DistributedEvents/IHasEventOutbox.cs | 4 ++-- .../DistributedEvents/MongoDbContextEventInbox.cs | 9 +++++---- .../DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs | 13 +++---------- 16 files changed, 50 insertions(+), 55 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj index 87879334af..68c90489ff 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs index 523a6ee4f2..38e2d9fc84 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.Domain.Repositories; using Volo.Abp.EventBus; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.ExceptionHandling; using Volo.Abp.Guids; using Volo.Abp.Modularity; @@ -18,7 +19,7 @@ namespace Volo.Abp.Domain [DependsOn( typeof(AbpAuditingModule), typeof(AbpDataModule), - typeof(AbpEventBusModule), + typeof(AbpEventBusBoxesModule), typeof(AbpGuidsModule), typeof(AbpMultiTenancyModule), typeof(AbpThreadingModule), diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs index d5f1b7afcc..ee73291e58 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Timing; using Volo.Abp.Uow; @@ -14,7 +15,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public OracleDbContextEventInbox( IDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions) : base(dbContextProvider, clock, distributedEventsOptions) + IOptions eventBusBoxesOptions) + : base(dbContextProvider, clock, eventBusBoxesOptions) { } @@ -33,7 +35,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); - var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + var timeToKeepEvents = Clock.Now.Add(- EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents); var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')"; await dbContext.Database.ExecuteSqlRawAsync(sql); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs index d5f1b7afcc..6d6d04d267 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs @@ -2,7 +2,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; -using Volo.Abp.EventBus.Distributed; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.Timing; using Volo.Abp.Uow; @@ -14,7 +14,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public OracleDbContextEventInbox( IDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions) : base(dbContextProvider, clock, distributedEventsOptions) + IOptions eventBusBoxesOptions) + : base(dbContextProvider, clock, eventBusBoxesOptions) { } @@ -33,7 +34,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); - var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents; var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')"; await dbContext.Database.ExecuteSqlRawAsync(sql); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs index 4560bdb2c4..fedff90dec 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo/Abp/EntityFrameworkCore/DistributedEvents/PostgreSqlDbContextEventInbox.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Timing; using Volo.Abp.Uow; @@ -14,8 +15,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public PostgreSqlDbContextEventInbox( IDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions) - : base(dbContextProvider, clock, distributedEventsOptions) + IOptions eventBusBoxesOptions) + : base(dbContextProvider, clock, eventBusBoxesOptions) { } @@ -34,7 +35,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); - var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents; var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < '{timeToKeepEvents}'"; await dbContext.Database.ExecuteSqlRawAsync(sql); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs index f7834c1835..96c245be2e 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs @@ -2,10 +2,8 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.Domain; -using Volo.Abp.EntityFrameworkCore.DependencyInjection; using Volo.Abp.EntityFrameworkCore.DistributedEvents; using Volo.Abp.Modularity; -using Volo.Abp.Uow; using Volo.Abp.Uow.EntityFrameworkCore; namespace Volo.Abp.EntityFrameworkCore diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs index 982d335d17..242b601177 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs @@ -5,6 +5,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Timing; using Volo.Abp.Uow; @@ -15,17 +16,17 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents where TDbContext : IHasEventInbox { protected IDbContextProvider DbContextProvider { get; } - protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } + protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; } protected IClock Clock { get; } public DbContextEventInbox( IDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions) + IOptions eventBusBoxesOptions) { DbContextProvider = dbContextProvider; Clock = clock; - DistributedEventsOptions = distributedEventsOptions.Value; + EventBusBoxesOptions = eventBusBoxesOptions.Value; } [UnitOfWork] @@ -78,7 +79,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public virtual async Task DeleteOldEventsAsync() { var dbContext = await DbContextProvider.GetDbContextAsync(); - var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents; var oldEvents = await dbContext.IncomingEvents .Where(x => x.Processed && x.CreationTime < timeToKeepEvents) .ToListAsync(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs index ce7302755a..cb764ede17 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/SqlRawDbContextEventInbox.cs @@ -2,7 +2,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; -using Volo.Abp.EventBus.Distributed; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.Timing; using Volo.Abp.Uow; @@ -14,8 +14,8 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents public SqlRawDbContextEventInbox( IDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions) - : base(dbContextProvider, clock, distributedEventsOptions) + IOptions eventBusBoxesOptions) + : base(dbContextProvider, clock, eventBusBoxesOptions) { } @@ -34,7 +34,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); - var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents; var sql = $"DELETE FROM {tableName} WHERE Processed = '1' AND CreationTime < '{timeToKeepEvents}'"; await dbContext.Database.ExecuteSqlRawAsync(sql); diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs index da91d672d3..1d72666c42 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/AbpEventBusBoxesOptions.cs @@ -26,10 +26,14 @@ namespace Volo.Abp.EventBus.Boxes public TimeSpan PeriodTimeSpan { get; set; } /// - /// Delay time of and /// Default: 15 seconds /// - public TimeSpan DelayTimeSpan { get; set; } + public TimeSpan DistributedLockWaitDuration { get; set; } + + /// + /// Default: 2 hours + /// + public TimeSpan WaitTimeToDeleteProcessedInboxEvents { get; set; } public AbpEventBusBoxesOptions() { @@ -37,7 +41,8 @@ namespace Volo.Abp.EventBus.Boxes InboxWaitingEventMaxCount = 1000; OutboxWaitingEventMaxCount = 1000; PeriodTimeSpan = TimeSpan.FromSeconds(2); - DelayTimeSpan = TimeSpan.FromSeconds(15); + DistributedLockWaitDuration = TimeSpan.FromSeconds(15); + WaitTimeToDeleteProcessedInboxEvents = TimeSpan.FromHours(2); } } } diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs index 29cca3d624..e3c71771ad 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/InboxProcessor.cs @@ -49,7 +49,7 @@ namespace Volo.Abp.EventBus.Boxes UnitOfWorkManager = unitOfWorkManager; Clock = clock; EventBusBoxesOptions = eventBusBoxesOptions.Value; - Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Seconds; + Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Milliseconds; Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; StoppingTokenSource = new CancellationTokenSource(); @@ -120,21 +120,21 @@ namespace Volo.Abp.EventBus.Boxes else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); - await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DelayTimeSpan.Milliseconds, StoppingToken); + await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DistributedLockWaitDuration.Milliseconds, StoppingToken); } } } protected virtual async Task DeleteOldEventsAsync() { - if (LastCleanTime != null && LastCleanTime > Clock.Now.Add(EventBusBoxesOptions.CleanOldEventTimeIntervalSpan)) + if (LastCleanTime != null && LastCleanTime + EventBusBoxesOptions.CleanOldEventTimeIntervalSpan > Clock.Now) { return; } await Inbox.DeleteOldEventsAsync(); - LastCleanTime = DateTime.Now; + LastCleanTime = Clock.Now; } } } diff --git a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs index e8a05c60ba..32545227c3 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs +++ b/framework/src/Volo.Abp.EventBus.Boxes/Volo/Abp/EventBus/Boxes/OutboxSender.cs @@ -39,7 +39,7 @@ namespace Volo.Abp.EventBus.Boxes DistributedEventBus = distributedEventBus; DistributedLockProvider = distributedLockProvider; EventBusBoxesOptions = eventBusBoxesOptions.Value; - Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Seconds; + Timer.Period = EventBusBoxesOptions.PeriodTimeSpan.Milliseconds; Timer.Elapsed += TimerOnElapsed; Logger = NullLogger.Instance; StoppingTokenSource = new CancellationTokenSource(); @@ -100,7 +100,7 @@ namespace Volo.Abp.EventBus.Boxes else { Logger.LogDebug("Could not obtain the distributed lock: " + DistributedLockName); - await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DelayTimeSpan.Milliseconds, StoppingToken); + await TaskDelayHelper.DelayAsync(EventBusBoxesOptions.DistributedLockWaitDuration.Milliseconds, StoppingToken); } } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs index 5b71542665..ab8fe6823b 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpDistributedEventBusOptions.cs @@ -1,4 +1,3 @@ -using System; using Volo.Abp.Collections; namespace Volo.Abp.EventBus.Distributed @@ -10,18 +9,11 @@ namespace Volo.Abp.EventBus.Distributed public OutboxConfigDictionary Outboxes { get; } public InboxConfigDictionary Inboxes { get; } - - /// - /// Default: -2 hours - /// - public TimeSpan InboxKeepEventTimeSpan { get; set; } - public AbpDistributedEventBusOptions() { Handlers = new TypeList(); Outboxes = new OutboxConfigDictionary(); Inboxes = new InboxConfigDictionary(); - InboxKeepEventTimeSpan = TimeSpan.FromHours(-2); } } } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs index 387e860bce..792a85e124 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventInbox.cs @@ -4,6 +4,6 @@ namespace Volo.Abp.MongoDB.DistributedEvents { public interface IHasEventInbox : IAbpMongoDbContext { - IMongoCollection IncomingEvents { get; set; } + IMongoCollection IncomingEvents { get; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs index cf57aaa699..ab4bc10f35 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IHasEventOutbox.cs @@ -4,6 +4,6 @@ namespace Volo.Abp.MongoDB.DistributedEvents { public interface IHasEventOutbox : IAbpMongoDbContext { - IMongoCollection OutgoingEvents { get; set; } + IMongoCollection OutgoingEvents { get; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs index 62927d2279..3cf5485512 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.Options; using MongoDB.Driver; using MongoDB.Driver.Linq; +using Volo.Abp.EventBus.Boxes; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Timing; using Volo.Abp.Uow; @@ -16,17 +17,17 @@ namespace Volo.Abp.MongoDB.DistributedEvents where TMongoDbContext : IHasEventInbox { protected IMongoDbContextProvider DbContextProvider { get; } - protected AbpDistributedEventBusOptions DistributedEventsOptions { get; } + protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; } protected IClock Clock { get; } public MongoDbContextEventInbox( IMongoDbContextProvider dbContextProvider, IClock clock, - IOptions distributedEventsOptions) + IOptions eventBusBoxesOptions) { DbContextProvider = dbContextProvider; Clock = clock; - DistributedEventsOptions = distributedEventsOptions.Value; + EventBusBoxesOptions = eventBusBoxesOptions.Value; } @@ -96,7 +97,7 @@ namespace Volo.Abp.MongoDB.DistributedEvents public virtual async Task DeleteOldEventsAsync() { var dbContext = await DbContextProvider.GetDbContextAsync(); - var timeToKeepEvents = Clock.Now.Add(DistributedEventsOptions.InboxKeepEventTimeSpan); + var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents; if (dbContext.SessionHandle != null) { diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs b/test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs index a7f1b78f86..95370bb4d2 100644 --- a/test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/TodoMongoDbContext.cs @@ -11,16 +11,9 @@ namespace DistDemoApp public IMongoCollection TodoItems => Collection(); public IMongoCollection TodoSummaries => Collection(); - public IMongoCollection OutgoingEvents - { - get => Collection(); - set {} - } - public IMongoCollection IncomingEvents - { - get => Collection(); - set {} - } + public IMongoCollection OutgoingEvents => Collection(); + + public IMongoCollection IncomingEvents => Collection(); } } From 5291b97738c8e972d1491641e431eab4ba6dfdef Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 30 Sep 2021 15:20:50 +0800 Subject: [PATCH 45/55] Update OracleDbContextEventInbox.cs --- .../DistributedEvents/OracleDbContextEventInbox.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs index ee73291e58..c19ca6746a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo/Abp/EntityFrameworkCore/DistributedEvents/OracleDbContextEventInbox.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.EntityFrameworkCore.DistributedEvents { var dbContext = await DbContextProvider.GetDbContextAsync(); var tableName = dbContext.IncomingEvents.EntityType.GetSchemaQualifiedTableName(); - var timeToKeepEvents = Clock.Now.Add(- EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents); + var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents; var sql = $"DELETE FROM \"{tableName}\" WHERE \"Processed\" = '1' AND \"CreationTime\" < TO_DATE('{timeToKeepEvents}', 'yyyy-mm-dd hh24:mi:ss')"; await dbContext.Database.ExecuteSqlRawAsync(sql); From 99a45164fdd7b296912b2bc63979696fab80b52d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 30 Sep 2021 11:03:09 +0300 Subject: [PATCH 46/55] Remove ApplyAbpConcepts usage --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 508da4801f..8e7926f9ae 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -155,10 +155,6 @@ namespace Volo.Abp.EntityFrameworkCore { try { - ApplyAbpConcepts(); - - var eventReport = CreateEventReport(); - var auditLog = AuditingManager?.Current?.Log; List entityChangeList = null; if (auditLog != null) From 9364884ad5c7d55e1b2f7d83983bb5ae7f59578e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 30 Sep 2021 16:25:01 +0800 Subject: [PATCH 47/55] Update distDemoApp to NET6.0 --- .../DistDemoApp.MongoDbKafka.csproj | 2 +- .../DistDemoApp.MongoDbRebus.csproj | 2 +- .../DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj index a503c6f6c0..dbb980b427 100644 --- a/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/DistDemoApp.MongoDbKafka.csproj @@ -2,7 +2,7 @@ Exe - net5.0 + net6.0 DistDemoApp diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj b/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj index c102adb382..5698855ebb 100644 --- a/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/DistDemoApp.MongoDbRebus.csproj @@ -2,7 +2,7 @@ Exe - net5.0 + net6.0 DistDemoApp diff --git a/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj b/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj index 4dc9d1dd64..4f5cb8ad84 100644 --- a/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj +++ b/test/DistEvents/DistDemoApp.Shared/DistDemoApp.Shared.csproj @@ -1,10 +1,10 @@ - net5.0 + net6.0 DistDemoApp - + @@ -13,7 +13,7 @@ - + From a989d56168000e5a82f46846a7bc0c46ed994ba9 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Thu, 30 Sep 2021 11:31:36 +0300 Subject: [PATCH 48/55] Add missing localizations --- .../Admin/Localization/Resources/en.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index f7094c94a7..9410a7813f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -312,7 +312,6 @@ "PaymentStateSetTo" : "Payment state set to {0}", "ChangeState": "Change State", "Permission:TrialLicense" : "Trial License", - "Permission:ManageTrialLicense": "Manage Trial License", "Menu:TrialLicenses": "Trial Licenses", "TrialLicenses": "Trial Licenses", "UserNameFilter": "Username", @@ -340,8 +339,8 @@ "Activated": "Activated", "PurchasedToNormalLicense": "Purchased", "Expired": "Expired", - "TrialLicenseDeletionWarningMessage": "Trial license and if any organization and qa organization will be deleted!", - "IsTrial": "Is trial", + "TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!", + "LicenseCategoryFilter": "License category", "Volo.AbpIo.Commercial:030000": "You already used your trial period.", "Volo.AbpIo.Commercial:030001": "This organization name already exists.", "Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!", @@ -349,6 +348,7 @@ "Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!", "Volo.AbpIo.Commercial:030005": "Start date and end date cannot be given when the trial license is in the requested state!", "Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!", - "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!" + "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!", + "Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!", } } From 3ea4d9988ee1b5ef9950c3edc23e5be6ce80c792 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 30 Sep 2021 15:02:12 +0300 Subject: [PATCH 49/55] remove bom from text files. closes #10189 --- .../AbpIoLocalization/Community/Localization/Resources/en.json | 2 +- .../Community/Localization/Resources/ro-RO.json | 2 +- docs/cs/Entity-Framework-Core-PostgreSQL.md | 2 +- docs/cs/Getting-Started-AspNetCore-Application.md | 2 +- docs/cs/Getting-Started-Console-Application.md | 2 +- docs/cs/Index.md | 2 +- docs/en/API/Application-Configuration.md | 2 +- docs/en/API/Swagger-Integration.md | 2 +- docs/en/Audit-Logging.md | 2 +- docs/en/Best-Practices/Application-Services.md | 2 +- docs/en/Best-Practices/Data-Transfer-Objects.md | 2 +- docs/en/Best-Practices/Domain-Services.md | 2 +- docs/en/Best-Practices/Entity-Framework-Core-Integration.md | 2 +- docs/en/Best-Practices/Index.md | 2 +- docs/en/Best-Practices/Module-Architecture.md | 2 +- docs/en/Best-Practices/MongoDB-Integration.md | 2 +- docs/en/CLI.md | 2 +- docs/en/Configuration.md | 2 +- docs/en/Dependency-Injection.md | 2 +- docs/en/Domain-Services.md | 2 +- docs/en/Emailing.md | 2 +- docs/en/Entity-Framework-Core-Migrations.md | 2 +- docs/en/Entity-Framework-Core-MySQL.md | 2 +- docs/en/Entity-Framework-Core-Oracle-Devart.md | 2 +- docs/en/Entity-Framework-Core-Oracle-Official.md | 2 +- docs/en/Entity-Framework-Core-Oracle.md | 2 +- docs/en/Entity-Framework-Core-Other-DBMS.md | 2 +- docs/en/Entity-Framework-Core-PostgreSQL.md | 2 +- docs/en/Entity-Framework-Core-SQLite.md | 2 +- docs/en/Getting-Started-AspNetCore-Application.md | 2 +- docs/en/Getting-Started-React-Native.md | 2 +- docs/en/Getting-Started-With-Startup-Templates.md | 2 +- docs/en/Index.md | 2 +- docs/en/Integration-Tests.md | 2 +- docs/en/Json-Serialization.md | 2 +- docs/en/MailKit.md | 2 +- docs/en/Module-Development-Basics.md | 2 +- docs/en/Object-Extensions.md | 2 +- docs/en/Options.md | 2 +- docs/en/RabbitMq.md | 2 +- docs/en/Road-Map.md | 2 +- docs/en/SMS-Sending.md | 2 +- docs/en/Settings.md | 2 +- docs/en/Specifications.md | 2 +- docs/en/Startup-Templates/Application.md | 2 +- docs/en/Startup-Templates/Index.md | 2 +- docs/en/Startup-Templates/Module.md | 2 +- docs/en/Testing.md | 2 +- docs/en/Timing.md | 2 +- docs/es/Index.md | 2 +- docs/pt-BR/Audit-Logging.md | 2 +- docs/pt-BR/Domain-Services.md | 2 +- docs/pt-BR/Emailing.md | 2 +- docs/pt-BR/Integration-Tests.md | 2 +- docs/pt-BR/SMS-Sending.md | 2 +- docs/pt-BR/Settings.md | 2 +- docs/pt-BR/Specifications.md | 2 +- docs/pt-BR/Testing.md | 2 +- docs/zh-Hans/Best-Practices/Application-Services.md | 2 +- docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md | 2 +- docs/zh-Hans/Best-Practices/Domain-Services.md | 2 +- .../zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md | 2 +- docs/zh-Hans/Best-Practices/Index.md | 2 +- docs/zh-Hans/Best-Practices/Module-Architecture.md | 2 +- docs/zh-Hans/Domain-Services.md | 2 +- docs/zh-Hans/Entity-Framework-Core-Migrations.md | 2 +- docs/zh-Hans/Getting-Started-AspNetCore-Application.md | 2 +- docs/zh-Hans/Index.md | 2 +- docs/zh-Hans/Module-Development-Basics.md | 2 +- docs/zh-Hans/Startup-Templates/Application.md | 2 +- docs/zh-Hans/Startup-Templates/Index.md | 2 +- docs/zh-Hans/Startup-Templates/Module.md | 2 +- .../src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml | 2 +- .../src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml | 2 +- .../Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd | 2 +- .../Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml | 2 +- .../Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd | 2 +- .../wwwroot/libs/abp/js/abp.js | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml | 2 +- .../Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd | 2 +- .../Pages/Abp/MultiTenancy/tenant-switch.js | 2 +- .../Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json | 2 +- .../Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json | 2 +- .../Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json | 2 +- .../Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json | 2 +- .../datatables/datatables-styles.css | 2 +- .../datatables/datatables-styles.min.css | 2 +- .../datatables/datatables-styles.scss | 2 +- .../jquery-form/jquery-form-extensions.js | 2 +- .../aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js | 2 +- .../abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js | 2 +- .../sweetalert2/abp-sweetalert2.js | 2 +- .../abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js | 2 +- .../libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Auditing/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Auditing/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Authorization/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Authorization/FodyWeavers.xsd | 2 +- .../Volo/Abp/Authorization/Localization/en.json | 2 +- .../Volo/Abp/Authorization/Localization/ro-RO.json | 2 +- .../Volo/Abp/Authorization/Localization/tr.json | 2 +- .../Volo/Abp/Authorization/Localization/zh-Hans.json | 2 +- framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Autofac/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Autofac/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml | 2 +- .../src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Caching/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Caching/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Cli/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Cli/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Core/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Core/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Dapper/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Dapper/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Data/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Data/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd | 2 +- .../Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json | 2 +- .../Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json | 2 +- framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Emailing/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Emailing/FodyWeavers.xsd | 2 +- .../Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json | 2 +- .../Volo/Abp/Emailing/Localization/zh-Hant.json | 2 +- .../Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl | 2 +- .../Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl | 2 +- .../src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml | 2 +- .../src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd | 2 +- .../Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xml | 2 +- .../Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xml | 2 +- .../src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml | 2 +- .../src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml | 2 +- .../src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml | 2 +- .../src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.EventBus/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.EventBus/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd | 2 +- .../Volo/Abp/ExceptionHandling/Localization/tr.json | 2 +- framework/src/Volo.Abp.Features/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Features/FodyWeavers.xsd | 2 +- .../Volo.Abp.Features/Volo/Abp/Features/Localization/en.json | 2 +- .../Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json | 2 +- .../Volo.Abp.Features/Volo/Abp/Features/Localization/tr.json | 2 +- .../Volo/Abp/Features/Localization/zh-Hans.json | 2 +- framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xsd | 2 +- .../Volo/Abp/GlobalFeatures/Localization/en.json | 2 +- .../Volo/Abp/GlobalFeatures/Localization/ro-RO.json | 2 +- .../Volo/Abp/GlobalFeatures/Localization/tr.json | 2 +- .../Volo/Abp/GlobalFeatures/Localization/zh-Hans.json | 2 +- framework/src/Volo.Abp.Guids/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Guids/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.HangFire/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.HangFire/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Http.Client/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Http/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Http/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Json/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Json/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Kafka/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Kafka/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Ldap/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Ldap/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/tr.json | 2 +- .../src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/zh-Hant.json | 2 +- .../src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Localization/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Localization/FodyWeavers.xsd | 2 +- .../Volo/Abp/Localization/Resources/AbpLocalization/ar.json | 2 +- framework/src/Volo.Abp.MailKit/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.MailKit/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Minify/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Minify/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.MongoDB/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Quartz/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Quartz/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Security/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Security/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Serialization/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Serialization/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Settings/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Settings/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Sms/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Sms/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Specifications/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Specifications/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js | 2 +- framework/src/Volo.Abp.TestBase/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.TestBase/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.TextTemplating/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.TextTemplating/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Threading/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Threading/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Timing/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Timing/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd | 2 +- .../Volo/Abp/Ui/Navigation/Localization/Resource/ar.json | 2 +- .../Volo/Abp/Ui/Navigation/Localization/Resource/tr.json | 2 +- framework/src/Volo.Abp.UI/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.UI/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json | 2 +- framework/src/Volo.Abp.Uow/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Uow/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp.Validation/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.Validation/FodyWeavers.xsd | 2 +- .../Volo/Abp/Validation/Localization/tr.json | 2 +- framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml | 2 +- framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp/FodyWeavers.xml | 2 +- framework/src/Volo.Abp/FodyWeavers.xsd | 2 +- framework/src/Volo.Abp/README.md | 2 +- .../Volo/Abp/AspNetCore/Mvc/Localization/Resource/ar.json | 2 +- .../Volo/Abp/AspNetCore/Mvc/Localization/Resource/tr.json | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js | 2 +- .../Properties/launchSettings.json | 2 +- .../test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js | 2 +- .../Volo/Abp/Emailing/Localization/ar.json | 2 +- .../Volo/Abp/Http/Localization/en.json | 2 +- framework/test/Volo.Abp.IdentityModel.Tests/appsettings.json | 2 +- .../Abp/Localization/TestResources/Base/CountryNames/ar.json | 2 +- .../Abp/Localization/TestResources/Base/CountryNames/cs.json | 2 +- .../Abp/Localization/TestResources/Base/CountryNames/en.json | 2 +- .../Abp/Localization/TestResources/Base/CountryNames/pl-PL.json | 2 +- .../Volo/Abp/Localization/TestResources/Base/Validation/ar.json | 2 +- .../Volo/Abp/Localization/TestResources/Base/Validation/cs.json | 2 +- .../Volo/Abp/Localization/TestResources/Base/Validation/en.json | 2 +- .../Abp/Localization/TestResources/Base/Validation/pl-PL.json | 2 +- .../Volo/Abp/Localization/TestResources/Source/ar.json | 2 +- .../Volo/Abp/Localization/TestResources/Source/cs.json | 2 +- .../Volo/Abp/Localization/TestResources/Source/en.json | 2 +- .../Volo/Abp/Localization/TestResources/Source/pl-PL.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/ar.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/cs.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/en.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/es.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/it.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/pl-PL.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json | 2 +- .../Scriban/SampleTemplates/ShowDecimalNumber.tpl | 2 +- .../Scriban/SampleTemplates/TestTemplateLayout1.tpl | 2 +- .../TextTemplating/Scriban/SampleTemplates/WelcomeEmail/en.tpl | 2 +- .../TextTemplating/Scriban/SampleTemplates/WelcomeEmail/tr.tpl | 2 +- .../Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl | 2 +- .../src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd | 2 +- .../account/src/Volo.Abp.Account.Application/FodyWeavers.xml | 2 +- .../account/src/Volo.Abp.Account.Application/FodyWeavers.xsd | 2 +- .../Volo/Abp/Account/Emailing/Templates/PasswordResetLink.tpl | 2 +- modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xml | 2 +- modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xsd | 2 +- .../account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml | 2 +- .../account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml | 2 +- modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd | 2 +- modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml | 2 +- modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd | 2 +- .../Components/ProfileManagementGroup/Password/Default.js | 2 +- .../Components/ProfileManagementGroup/PersonalInfo/Default.js | 2 +- .../src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.css | 2 +- .../account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js | 2 +- .../src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd | 2 +- .../Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd | 2 +- .../Volo.Abp.BackgroundJobs.DemoApp.HangFire/appsettings.json | 2 +- .../app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml | 2 +- .../app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd | 2 +- .../app/Volo.Abp.BackgroundJobs.DemoApp/appsettings.json | 2 +- .../src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml | 2 +- .../src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd | 2 +- .../Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml | 2 +- .../src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd | 2 +- .../wwwroot/themes/basic/layout.js | 2 +- .../Pages/Components/highlightCode.js | 2 +- .../abp.resourcemapping.js | 2 +- .../compilerconfig.json | 2 +- .../wwwroot/css/demo.css | 2 +- .../wwwroot/css/demo.min.css | 2 +- .../wwwroot/css/demo.scss | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xml | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xsd | 2 +- .../Properties/launchSettings.json | 2 +- .../wwwroot/demo/styles/main.css | 2 +- .../Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xml | 2 +- .../Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xsd | 2 +- .../Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd | 2 +- .../blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml | 2 +- .../blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd | 2 +- modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml | 2 +- modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd | 2 +- .../blogging/app/Volo.BloggingTestApp/abp.resourcemapping.js | 2 +- modules/blogging/app/Volo.BloggingTestApp/appsettings.json | 2 +- modules/blogging/app/Volo.BloggingTestApp/gulpfile.js | 2 +- .../Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xml | 2 +- .../Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xsd | 2 +- .../src/Volo.Blogging.Admin.Application/FodyWeavers.xml | 2 +- .../src/Volo.Blogging.Admin.Application/FodyWeavers.xsd | 2 +- .../src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xml | 2 +- .../src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xsd | 2 +- .../blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xml | 2 +- .../blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xsd | 2 +- modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xml | 2 +- modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xsd | 2 +- .../Pages/Blogging/Admin/Blogs/create.js | 2 +- .../Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js | 2 +- .../Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js | 2 +- .../blogging/src/Volo.Blogging.Admin.Web/compilerconfig.json | 2 +- .../Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml | 2 +- .../Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd | 2 +- .../src/Volo.Blogging.Application.Contracts/FodyWeavers.xml | 2 +- .../src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd | 2 +- modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml | 2 +- modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd | 2 +- .../blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml | 2 +- .../blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd | 2 +- modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml | 2 +- modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd | 2 +- .../src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd | 2 +- .../blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml | 2 +- .../blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml | 2 +- modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd | 2 +- modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml | 2 +- modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd | 2 +- modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml | 2 +- modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd | 2 +- .../blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.css | 2 +- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.min.css | 2 +- .../blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.scss | 2 +- .../blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js | 2 +- .../blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js | 2 +- .../blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css | 2 +- modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js | 2 +- .../blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.scss | 2 +- .../src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.css | 2 +- .../Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.min.css | 2 +- .../src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css | 2 +- .../Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.min.css | 2 +- modules/blogging/src/Volo.Blogging.Web/compilerconfig.json | 2 +- .../demo/Volo.ClientSimulation.Demo/FodyWeavers.xml | 2 +- .../demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd | 2 +- .../Volo.ClientSimulation.Demo/Properties/launchSettings.json | 2 +- .../demo/Volo.ClientSimulation.Demo/abp.resourcemapping.js | 2 +- .../src/Volo.ClientSimulation.Web/FodyWeavers.xml | 2 +- .../src/Volo.ClientSimulation.Web/FodyWeavers.xsd | 2 +- .../Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js | 2 +- .../Pages/ClientSimulation/SimulationArea.css | 2 +- .../Pages/ClientSimulation/SimulationArea.js | 2 +- .../Pages/ClientSimulation/SimulationArea.min.css | 2 +- .../Pages/ClientSimulation/SimulationArea.scss | 2 +- .../src/Volo.ClientSimulation.Web/compilerconfig.json | 2 +- .../client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml | 2 +- .../client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd | 2 +- .../Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json | 2 +- modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json | 2 +- .../Volo.CmsKit.IdentityServer/Properties/launchSettings.json | 2 +- .../host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js | 2 +- .../cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json | 2 +- modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js | 2 +- .../host/Volo.CmsKit.Web.Host/Properties/launchSettings.json | 2 +- .../cms-kit/host/Volo.CmsKit.Web.Host/abp.resourcemapping.js | 2 +- modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/index.js | 2 +- .../host/Volo.CmsKit.Web.Unified/Properties/launchSettings.json | 2 +- .../cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js | 2 +- modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json | 2 +- modules/cms-kit/host/Volo.CmsKit.Web.Unified/gulpfile.js | 2 +- .../src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xml | 2 +- .../src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xsd | 2 +- .../cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xml | 2 +- .../cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xsd | 2 +- .../src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xml | 2 +- .../src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xsd | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.css | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.css | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/createModal.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/index.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/updateModal.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.css | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.css | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.js | 2 +- .../Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.css | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.css | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js | 2 +- .../Pages/CmsKit/Tags/Components/TagEditor/default.js | 2 +- .../src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Index.js | 2 +- .../src/Volo.CmsKit.Application.Contracts/FodyWeavers.xml | 2 +- .../src/Volo.CmsKit.Application.Contracts/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xsd | 2 +- .../Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xml | 2 +- .../Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xsd | 2 +- .../cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xml | 2 +- .../cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xsd | 2 +- .../src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xml | 2 +- .../src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xsd | 2 +- .../cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xsd | 2 +- .../Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xml | 2 +- .../Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xsd | 2 +- .../cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xml | 2 +- .../cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xsd | 2 +- .../src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xml | 2 +- .../src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xsd | 2 +- modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xsd | 2 +- .../Pages/CmsKit/Shared/Components/Commenting/default.css | 2 +- .../Pages/CmsKit/Shared/Components/Commenting/default.js | 2 +- .../Pages/CmsKit/Shared/Components/Rating/default.css | 2 +- .../Pages/CmsKit/Shared/Components/Rating/default.js | 2 +- .../CmsKit/Shared/Components/ReactionSelection/default.css | 2 +- .../Pages/CmsKit/Shared/Components/ReactionSelection/default.js | 2 +- .../Pages/CmsKit/Shared/Components/Tags/default.css | 2 +- .../Pages/Public/CmsKit/Blogs/blogPost.css | 2 +- .../Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css | 2 +- .../Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/index.css | 2 +- .../Pages/Public/CmsKit/highlightOnLoad.js | 2 +- modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xml | 2 +- modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xsd | 2 +- .../Volo.CmsKit.HttpApi.Client.ConsoleTestApp/appsettings.json | 2 +- modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml | 2 +- modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd | 2 +- modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml | 2 +- modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd | 2 +- modules/docs/app/VoloDocs.Migrator/appsettings.json | 2 +- modules/docs/app/VoloDocs.Web/FodyWeavers.xml | 2 +- modules/docs/app/VoloDocs.Web/FodyWeavers.xsd | 2 +- .../VoloDocs.Web/Localization/Resources/VoloDocs/Web/cs.json | 2 +- .../VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json | 2 +- .../VoloDocs.Web/Localization/Resources/VoloDocs/Web/pl-PL.json | 2 +- .../VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json | 2 +- .../VoloDocs.Web/Localization/Resources/VoloDocs/Web/sl.json | 2 +- modules/docs/app/VoloDocs.Web/abp.resourcemapping.js | 2 +- modules/docs/app/VoloDocs.Web/appsettings.json | 2 +- .../src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml | 2 +- .../src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd | 2 +- .../Localization/Resources/Docs/ApplicationContracts/cs.json | 2 +- .../Localization/Resources/Docs/ApplicationContracts/en.json | 2 +- .../Localization/Resources/Docs/ApplicationContracts/pl-PL.json | 2 +- .../Localization/Resources/Docs/ApplicationContracts/ro-RO.json | 2 +- .../Localization/Resources/Docs/ApplicationContracts/sl.json | 2 +- modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd | 2 +- .../Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.css | 2 +- .../src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js | 2 +- .../Pages/Docs/Admin/Documents/index.min.css | 2 +- .../Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.scss | 2 +- .../src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js | 2 +- .../src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js | 2 +- .../src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js | 2 +- .../src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js | 2 +- modules/docs/src/Volo.Docs.Admin.Web/compilerconfig.json | 2 +- .../docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml | 2 +- .../docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.Application/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd | 2 +- .../src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/cs.json | 2 +- .../src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json | 2 +- .../Volo.Docs.Domain/Volo/Docs/Localization/Domain/pl-PL.json | 2 +- .../Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json | 2 +- .../src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sl.json | 2 +- modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd | 2 +- modules/docs/src/Volo.Docs.Web/FodyWeavers.xml | 2 +- modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd | 2 +- .../src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.css | 2 +- .../src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.js | 2 +- .../Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.less | 2 +- .../Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.min.css | 2 +- .../docs/src/Volo.Docs.Web/Pages/Documents/Project/index.css | 2 +- .../src/Volo.Docs.Web/Pages/Documents/Project/index.min.css | 2 +- .../docs/src/Volo.Docs.Web/Pages/Documents/Project/index.scss | 2 +- .../Pages/Documents/Shared/ErrorComponent/error.js | 2 +- .../docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css | 2 +- .../src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css | 2 +- modules/docs/src/Volo.Docs.Web/compilerconfig.json | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml | 2 +- .../src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd | 2 +- .../Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xml | 2 +- .../Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xml | 2 +- .../src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xsd | 2 +- .../Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml | 2 +- .../Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/ar.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/tr.json | 2 +- .../src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml | 2 +- .../Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml | 2 +- .../src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml | 2 +- .../src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd | 2 +- .../Pages/FeatureManagement/feature-management-modal.js | 2 +- .../src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd | 2 +- .../identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml | 2 +- .../identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd | 2 +- .../identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml | 2 +- .../identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xsd | 2 +- modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xml | 2 +- modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd | 2 +- .../Volo/Abp/Identity/Localization/tr.json | 2 +- modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml | 2 +- modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd | 2 +- modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml | 2 +- modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd | 2 +- modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml | 2 +- modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd | 2 +- modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml | 2 +- modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js | 2 +- .../src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js | 2 +- modules/identity/src/Volo.Abp.Identity.Web/compilerconfig.json | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml | 2 +- .../src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd | 2 +- .../Volo/Abp/IdentityServer/Localization/Resources/ar.json | 2 +- .../Volo/Abp/IdentityServer/Localization/Resources/cs.json | 2 +- .../Volo/Abp/IdentityServer/Localization/Resources/pt-BR.json | 2 +- .../Volo/Abp/IdentityServer/Localization/Resources/sl.json | 2 +- .../Volo/Abp/IdentityServer/Localization/Resources/tr.json | 2 +- .../src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd | 2 +- .../Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../Volo.Abp.PermissionManagement.Application/FodyWeavers.xml | 2 +- .../Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd | 2 +- .../Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xml | 2 +- .../Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xml | 2 +- .../src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xsd | 2 +- .../Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml | 2 +- .../Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd | 2 +- .../Volo/Abp/PermissionManagement/Localization/Domain/ar.json | 2 +- .../Volo/Abp/PermissionManagement/Localization/Domain/tr.json | 2 +- .../src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml | 2 +- .../src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml | 2 +- .../src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd | 2 +- .../AbpPermissionManagement/permission-management-modal.css | 2 +- .../AbpPermissionManagement/permission-management-modal.js | 2 +- .../Properties/launchSettings.json | 2 +- .../Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js | 2 +- .../app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.SettingManagement.Application/FodyWeavers.xml | 2 +- .../src/Volo.Abp.SettingManagement.Application/FodyWeavers.xsd | 2 +- .../Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xml | 2 +- .../Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml | 2 +- .../src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd | 2 +- .../Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml | 2 +- .../Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd | 2 +- .../Localization/Resources/AbpSettingManagement/ar.json | 2 +- .../Localization/Resources/AbpSettingManagement/tr.json | 2 +- .../src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xml | 2 +- .../Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xml | 2 +- .../src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml | 2 +- .../src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd | 2 +- .../SettingManagement/Components/EmailSettingGroup/Default.js | 2 +- .../Pages/SettingManagement/Index.js | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd | 2 +- .../Volo/Abp/TenantManagement/Localization/Resources/ar.json | 2 +- .../Volo/Abp/TenantManagement/Localization/Resources/tr.json | 2 +- .../src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml | 2 +- .../Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml | 2 +- .../src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.TenantManagement.Web/compilerconfig.json | 2 +- modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml | 2 +- modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd | 2 +- modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml | 2 +- modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd | 2 +- modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml | 2 +- modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd | 2 +- .../src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml | 2 +- .../src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd | 2 +- modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml | 2 +- modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd | 2 +- .../app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xml | 2 +- .../app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xsd | 2 +- .../Properties/launchSettings.json | 2 +- .../Volo.Abp.VirtualFileExplorer.DemoApp/abp.resourcemapping.js | 2 +- .../app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json | 2 +- .../src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xml | 2 +- .../src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xsd | 2 +- .../Pages/VirtualFileExplorer/index.css | 2 +- .../Pages/VirtualFileExplorer/index.js | 2 +- npm/ng-packs/packages/schematics/src/mocks/api-definition.json | 2 +- npm/packs/anchor-js/abp.resourcemapping.js | 2 +- npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js | 2 +- npm/packs/bootstrap-datepicker/abp.resourcemapping.js | 2 +- npm/packs/bootstrap/abp.resourcemapping.js | 2 +- npm/packs/chart.js/abp.resourcemapping.js | 2 +- npm/packs/clipboard/abp.resourcemapping.js | 2 +- npm/packs/codemirror/abp.resourcemapping.js | 2 +- npm/packs/core/abp.resourcemapping.js | 2 +- npm/packs/core/src/abp.css | 2 +- npm/packs/cropperjs/abp.resourcemapping.js | 2 +- npm/packs/datatables.net-bs4/abp.resourcemapping.js | 2 +- npm/packs/datatables.net/abp.resourcemapping.js | 2 +- npm/packs/flag-icon-css/abp.resourcemapping.js | 2 +- npm/packs/font-awesome/abp.resourcemapping.js | 2 +- npm/packs/highlight.js/abp.resourcemapping.js | 2 +- npm/packs/jquery-form/abp.resourcemapping.js | 2 +- npm/packs/jquery-validation-unobtrusive/abp.resourcemapping.js | 2 +- npm/packs/jquery-validation/abp.resourcemapping.js | 2 +- npm/packs/jquery/abp.resourcemapping.js | 2 +- npm/packs/jstree/abp.resourcemapping.js | 2 +- npm/packs/lodash/abp.resourcemapping.js | 2 +- npm/packs/luxon/abp.resourcemapping.js | 2 +- npm/packs/malihu-custom-scrollbar-plugin/abp.resourcemapping.js | 2 +- npm/packs/markdown-it/abp.resourcemapping.js | 2 +- npm/packs/owl.carousel/abp.resourcemapping.js | 2 +- npm/packs/popper.js/abp.resourcemapping.js | 2 +- npm/packs/prismjs/abp.resourcemapping.js | 2 +- npm/packs/select2/abp.resourcemapping.js | 2 +- npm/packs/signalr/abp.resourcemapping.js | 2 +- npm/packs/slugify/abp.resourcemapping.js | 2 +- npm/packs/star-rating-svg/abp.resourcemapping.js | 2 +- npm/packs/sweetalert2/abp.resourcemapping.js | 2 +- npm/packs/timeago/abp.resourcemapping.js | 2 +- npm/packs/toastr/abp.resourcemapping.js | 2 +- npm/packs/tui-editor/abp.resourcemapping.js | 2 +- npm/packs/uppy/abp.resourcemapping.js | 2 +- npm/packs/utils/abp.resourcemapping.js | 2 +- npm/packs/vee-validate/abp.resourcemapping.js | 2 +- npm/packs/vue/abp.resourcemapping.js | 2 +- .../Pages/Index.razor.css | 2 +- .../wwwroot/blazor-global-styles.css | 2 +- .../wwwroot/global-styles.css | 2 +- .../Pages/Index.razor.css | 2 +- .../wwwroot/blazor-global-styles.css | 2 +- .../wwwroot/global-styles.css | 2 +- .../MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.css | 2 +- .../src/MyCompanyName.MyProjectName.Blazor/wwwroot/main.css | 2 +- .../Localization/MyProjectName/ar.json | 2 +- .../Localization/MyProjectName/tr.json | 2 +- .../Properties/launchSettings.json | 2 +- .../abp.resourcemapping.js | 2 +- .../wwwroot/global-styles.css | 2 +- .../Properties/launchSettings.json | 2 +- .../abp.resourcemapping.js | 2 +- .../wwwroot/global-styles.css | 2 +- .../src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.css | 2 +- .../src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.js | 2 +- .../Properties/launchSettings.json | 2 +- .../MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js | 2 +- .../wwwroot/global-styles.css | 2 +- .../src/MyCompanyName.MyProjectName.Web/Pages/Index.css | 2 +- .../src/MyCompanyName.MyProjectName.Web/Pages/Index.js | 2 +- .../src/MyCompanyName.MyProjectName.Web/abp.resourcemapping.js | 2 +- .../src/MyCompanyName.MyProjectName.Web/appsettings.json | 2 +- .../MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css | 2 +- .../appsettings.json | 2 +- .../MyCompanyName.MyProjectName.Web.Tests/xunit.runner.json | 2 +- .../console/src/MyCompanyName.MyProjectName/appsettings.json | 2 +- .../MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xsd | 2 +- .../MyCompanyName.MyProjectName.Blazor.Host/wwwroot/main.css | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../Pages/Index.razor.css | 2 +- .../Properties/launchSettings.json | 2 +- .../wwwroot/blazor-global-styles.css | 2 +- .../wwwroot/global-styles.css | 2 +- .../MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd | 2 +- .../Properties/launchSettings.json | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json | 2 +- .../MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd | 2 +- .../Properties/launchSettings.json | 2 +- .../abp.resourcemapping.js | 2 +- .../MyCompanyName.MyProjectName.IdentityServer/appsettings.json | 2 +- .../host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml | 2 +- .../host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd | 2 +- .../Properties/launchSettings.json | 2 +- .../MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js | 2 +- .../MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd | 2 +- .../Properties/launchSettings.json | 2 +- .../abp.resourcemapping.js | 2 +- .../MyCompanyName.MyProjectName.Web.Unified/appsettings.json | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml | 2 +- .../src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd | 2 +- .../MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xml | 2 +- .../src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xsd | 2 +- .../MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd | 2 +- .../src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml | 2 +- .../src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd | 2 +- .../src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml | 2 +- .../src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd | 2 +- .../src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml | 2 +- .../src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd | 2 +- .../src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml | 2 +- .../src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd | 2 +- .../FodyWeavers.xml | 2 +- .../FodyWeavers.xsd | 2 +- .../appsettings.json | 2 +- .../MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml | 2 +- .../MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd | 2 +- .../test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml | 2 +- .../test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd | 2 +- templates/wpf/src/MyCompanyName.MyProjectName/appsettings.json | 2 +- .../AbpPerfTest.WithAbp/Properties/launchSettings.json | 2 +- .../AbpPerfTest.WithoutAbp/Properties/launchSettings.json | 2 +- test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json | 2 +- test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json | 2 +- test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json | 2 +- 1020 files changed, 1020 insertions(+), 1020 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 7be579f1fb..2da4a62481 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Permission:CommunityArticle": "Community Article", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json index 7b93754482..4c78f15d99 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "Permission:CommunityArticle": "Articol comunitar", diff --git a/docs/cs/Entity-Framework-Core-PostgreSQL.md b/docs/cs/Entity-Framework-Core-PostgreSQL.md index e09880c37c..dc50c8a742 100644 --- a/docs/cs/Entity-Framework-Core-PostgreSQL.md +++ b/docs/cs/Entity-Framework-Core-PostgreSQL.md @@ -1,4 +1,4 @@ -# Přepnutí na EF Core PostgreSQL providera +# Přepnutí na EF Core PostgreSQL providera Tento dokument vysvětluje, jak přepnout na poskytovatele databáze **PostgreSQL** pro **[spouštěcí šablonu aplikace](Startup-Templates/Application.md)**, která je dodávána s předem nakonfigurovaným SQL poskytovatelem. diff --git a/docs/cs/Getting-Started-AspNetCore-Application.md b/docs/cs/Getting-Started-AspNetCore-Application.md index 877976d037..e269a08ba2 100644 --- a/docs/cs/Getting-Started-AspNetCore-Application.md +++ b/docs/cs/Getting-Started-AspNetCore-Application.md @@ -1,4 +1,4 @@ -# Začínáme s ASP.NET Core MVC aplikací +# Začínáme s ASP.NET Core MVC aplikací Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**. diff --git a/docs/cs/Getting-Started-Console-Application.md b/docs/cs/Getting-Started-Console-Application.md index dc822ec297..a6ee50dbe6 100644 --- a/docs/cs/Getting-Started-Console-Application.md +++ b/docs/cs/Getting-Started-Console-Application.md @@ -1,4 +1,4 @@ -# Začínáme s konzolovou aplikací +# Začínáme s konzolovou aplikací Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**. diff --git a/docs/cs/Index.md b/docs/cs/Index.md index 0424c7120b..875f4e066e 100644 --- a/docs/cs/Index.md +++ b/docs/cs/Index.md @@ -1,4 +1,4 @@ -# ABP dokumentace +# ABP dokumentace ABP je **open source aplikační framework** se zaměřením na vývoj webových aplikací založených na ASP.NET Core, zároveň ho však lze využít i k vývoji jiných typů aplikací. diff --git a/docs/en/API/Application-Configuration.md b/docs/en/API/Application-Configuration.md index 3aea468f8c..8441459e02 100644 --- a/docs/en/API/Application-Configuration.md +++ b/docs/en/API/Application-Configuration.md @@ -1,4 +1,4 @@ -# Application Configuration Endpoint +# Application Configuration Endpoint ABP Framework provides a pre-built and standard endpoint that contains some useful information about the application/service. Here, the list of some fundamental information at this endpoint: diff --git a/docs/en/API/Swagger-Integration.md b/docs/en/API/Swagger-Integration.md index 48ce252940..2e7b331cfc 100644 --- a/docs/en/API/Swagger-Integration.md +++ b/docs/en/API/Swagger-Integration.md @@ -1,4 +1,4 @@ -# Swagger Integration +# Swagger Integration [Swagger (OpenAPI)](https://swagger.io/) is a language-agnostic specification for describing REST APIs. It allows both computers and humans to understand the capabilities of a REST API without direct access to the source code. Its main goals are to: diff --git a/docs/en/Audit-Logging.md b/docs/en/Audit-Logging.md index 67aee58dac..2076764345 100644 --- a/docs/en/Audit-Logging.md +++ b/docs/en/Audit-Logging.md @@ -1,4 +1,4 @@ -# Audit Logging +# Audit Logging [Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*". diff --git a/docs/en/Best-Practices/Application-Services.md b/docs/en/Best-Practices/Application-Services.md index ff8afe81d2..309b264522 100644 --- a/docs/en/Best-Practices/Application-Services.md +++ b/docs/en/Best-Practices/Application-Services.md @@ -1,4 +1,4 @@ -## Application Services Best Practices & Conventions +## Application Services Best Practices & Conventions * **Do** create an application service for each **aggregate root**. diff --git a/docs/en/Best-Practices/Data-Transfer-Objects.md b/docs/en/Best-Practices/Data-Transfer-Objects.md index 0fca0e86f2..5d6409af7d 100644 --- a/docs/en/Best-Practices/Data-Transfer-Objects.md +++ b/docs/en/Best-Practices/Data-Transfer-Objects.md @@ -1,4 +1,4 @@ -## Data Transfer Objects Best Practices & Conventions +## Data Transfer Objects Best Practices & Conventions * **Do** define DTOs in the **application contracts** package. * **Do** inherit from the pre-built **base DTO classes** where possible and necessary (like `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` and so on). diff --git a/docs/en/Best-Practices/Domain-Services.md b/docs/en/Best-Practices/Domain-Services.md index f8b7c31797..e651086673 100644 --- a/docs/en/Best-Practices/Domain-Services.md +++ b/docs/en/Best-Practices/Domain-Services.md @@ -1,4 +1,4 @@ -## Domain Services Best Practices & Conventions +## Domain Services Best Practices & Conventions > **This document is not ready yet. Please see the [Domain Services](../Domain-Services.md) document.** diff --git a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md index 90d62698de..bae484af27 100644 --- a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md +++ b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md @@ -1,4 +1,4 @@ -## Entity Framework Core Integration Best Practices +## Entity Framework Core Integration Best Practices > See [Entity Framework Core Integration document](../Entity-Framework-Core.md) for the basics of the EF Core integration. diff --git a/docs/en/Best-Practices/Index.md b/docs/en/Best-Practices/Index.md index 5c21b5b9ec..3cc10a17cc 100644 --- a/docs/en/Best-Practices/Index.md +++ b/docs/en/Best-Practices/Index.md @@ -1,4 +1,4 @@ -## Module Development Best Practices & Conventions +## Module Development Best Practices & Conventions ### Introduction diff --git a/docs/en/Best-Practices/Module-Architecture.md b/docs/en/Best-Practices/Module-Architecture.md index d9f833726f..b7e0d03db9 100644 --- a/docs/en/Best-Practices/Module-Architecture.md +++ b/docs/en/Best-Practices/Module-Architecture.md @@ -1,4 +1,4 @@ -## Module Architecture Best Practices & Conventions +## Module Architecture Best Practices & Conventions ### Solution Structure diff --git a/docs/en/Best-Practices/MongoDB-Integration.md b/docs/en/Best-Practices/MongoDB-Integration.md index 216468b71e..594244443e 100644 --- a/docs/en/Best-Practices/MongoDB-Integration.md +++ b/docs/en/Best-Practices/MongoDB-Integration.md @@ -1,4 +1,4 @@ -## MongoDB Integration +## MongoDB Integration * Do define a separated `MongoDbContext` interface and class for each module. diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 0638543e44..4b575ac6f6 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -1,4 +1,4 @@ -# ABP CLI +# ABP CLI ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions. diff --git a/docs/en/Configuration.md b/docs/en/Configuration.md index 6e638f7814..30d881c06e 100644 --- a/docs/en/Configuration.md +++ b/docs/en/Configuration.md @@ -1,3 +1,3 @@ -# Configuration +# Configuration ASP.NET Core has an flexible and extensible key-value based configuration system. In fact, the configuration system is a part of Microsoft.Extensions libraries and it is independent from ASP.NET Core. That means it can be used in any type of application. See [Microsoft's documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/) to learn the configuration infrastructure. ABP framework is 100% compatible with the configuration system. \ No newline at end of file diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md index f4398488e5..f347dc1dd7 100644 --- a/docs/en/Dependency-Injection.md +++ b/docs/en/Dependency-Injection.md @@ -1,4 +1,4 @@ -# Dependency Injection +# Dependency Injection ABP's Dependency Injection system is developed based on Microsoft's [dependency injection extension](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96) library (Microsoft.Extensions.DependencyInjection nuget package). So, it's documentation is valid in ABP too. diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md index 5a4f6393e1..6ad9b78cf0 100644 --- a/docs/en/Domain-Services.md +++ b/docs/en/Domain-Services.md @@ -1,4 +1,4 @@ -# Domain Services +# Domain Services ## Introduction diff --git a/docs/en/Emailing.md b/docs/en/Emailing.md index 50e7afc213..bfb3058862 100644 --- a/docs/en/Emailing.md +++ b/docs/en/Emailing.md @@ -1,4 +1,4 @@ -# Email Sending +# Email Sending ABP Framework provides various services, settings and integrations for sending emails; diff --git a/docs/en/Entity-Framework-Core-Migrations.md b/docs/en/Entity-Framework-Core-Migrations.md index 5d8ca01854..716038d412 100644 --- a/docs/en/Entity-Framework-Core-Migrations.md +++ b/docs/en/Entity-Framework-Core-Migrations.md @@ -1,4 +1,4 @@ -# EF Core Database Migrations +# EF Core Database Migrations This document begins by **introducing the default structure** provided by [the application startup template](Startup-Templates/Application.md) and **discusses various scenarios** you may want to implement for your own application. diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md index 92a9cfb36e..91e3ce986d 100644 --- a/docs/en/Entity-Framework-Core-MySQL.md +++ b/docs/en/Entity-Framework-Core-MySQL.md @@ -1,4 +1,4 @@ -# Switch to EF Core MySQL Provider +# Switch to EF Core MySQL Provider This document explains how to switch to the **MySQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Oracle-Devart.md b/docs/en/Entity-Framework-Core-Oracle-Devart.md index 95e05db427..ecd4f65e0c 100644 --- a/docs/en/Entity-Framework-Core-Oracle-Devart.md +++ b/docs/en/Entity-Framework-Core-Oracle-Devart.md @@ -1,4 +1,4 @@ -# Switch to EF Core Oracle Devart Provider +# Switch to EF Core Oracle Devart Provider This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Oracle-Official.md b/docs/en/Entity-Framework-Core-Oracle-Official.md index d983dc5e41..b273515ac1 100644 --- a/docs/en/Entity-Framework-Core-Oracle-Official.md +++ b/docs/en/Entity-Framework-Core-Oracle-Official.md @@ -1,4 +1,4 @@ -# Switch to EF Core Oracle Provider +# Switch to EF Core Oracle Provider This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Oracle.md b/docs/en/Entity-Framework-Core-Oracle.md index 8c265149ba..1e340302dc 100644 --- a/docs/en/Entity-Framework-Core-Oracle.md +++ b/docs/en/Entity-Framework-Core-Oracle.md @@ -1,4 +1,4 @@ -# Switch to EF Core Oracle Provider +# Switch to EF Core Oracle Provider This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-Other-DBMS.md b/docs/en/Entity-Framework-Core-Other-DBMS.md index 8c9078583d..9739dbdd02 100644 --- a/docs/en/Entity-Framework-Core-Other-DBMS.md +++ b/docs/en/Entity-Framework-Core-Other-DBMS.md @@ -1,4 +1,4 @@ -# Switch to Another DBMS for Entity Framework Core +# Switch to Another DBMS for Entity Framework Core **[The application startup template](Startup-Templates/Application.md)** comes with **SQL Server provider pre-configured** for the Entity Framework Core. However, EF Core supports [many other DBMSs](https://docs.microsoft.com/en-us/ef/core/providers/) and you can use any of them within your ABP based applications. diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md index f6a0c26806..4ddd3dd22a 100644 --- a/docs/en/Entity-Framework-Core-PostgreSQL.md +++ b/docs/en/Entity-Framework-Core-PostgreSQL.md @@ -1,4 +1,4 @@ -# Switch to EF Core PostgreSQL Provider +# Switch to EF Core PostgreSQL Provider This document explains how to switch to the **PostgreSQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Entity-Framework-Core-SQLite.md b/docs/en/Entity-Framework-Core-SQLite.md index 81d4b72de2..cbacf3baa5 100644 --- a/docs/en/Entity-Framework-Core-SQLite.md +++ b/docs/en/Entity-Framework-Core-SQLite.md @@ -1,4 +1,4 @@ -# Switch to EF Core SQLite Provider +# Switch to EF Core SQLite Provider This document explains how to switch to the **SQLite** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured. diff --git a/docs/en/Getting-Started-AspNetCore-Application.md b/docs/en/Getting-Started-AspNetCore-Application.md index 9202ed29f1..5eca211810 100644 --- a/docs/en/Getting-Started-AspNetCore-Application.md +++ b/docs/en/Getting-Started-AspNetCore-Application.md @@ -1,4 +1,4 @@ -# Getting Started ABP With AspNet Core MVC Web Application +# Getting Started ABP With AspNet Core MVC Web Application This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with the **[startup template](Getting-Started-AspNetCore-MVC-Template.md)**. diff --git a/docs/en/Getting-Started-React-Native.md b/docs/en/Getting-Started-React-Native.md index 08faac3608..9199d370dc 100644 --- a/docs/en/Getting-Started-React-Native.md +++ b/docs/en/Getting-Started-React-Native.md @@ -1,4 +1,4 @@ -# Getting Started with the React Native +# Getting Started with the React Native ````json //[doc-params] diff --git a/docs/en/Getting-Started-With-Startup-Templates.md b/docs/en/Getting-Started-With-Startup-Templates.md index be2bb201b8..9beb84bcef 100644 --- a/docs/en/Getting-Started-With-Startup-Templates.md +++ b/docs/en/Getting-Started-With-Startup-Templates.md @@ -1,4 +1,4 @@ -# Getting Started with the Startup Templates +# Getting Started with the Startup Templates See the following tutorials to learn how to get started with the ABP Framework using the pre-built application startup templates: diff --git a/docs/en/Index.md b/docs/en/Index.md index 8483d61612..84e1155b9c 100644 --- a/docs/en/Index.md +++ b/docs/en/Index.md @@ -1,4 +1,4 @@ -# ABP Documentation +# ABP Documentation ABP Framework is a complete **infrastructure** based on the **ASP.NET Core** to create **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**. diff --git a/docs/en/Integration-Tests.md b/docs/en/Integration-Tests.md index 35d66171a6..9ad4741822 100644 --- a/docs/en/Integration-Tests.md +++ b/docs/en/Integration-Tests.md @@ -1 +1 @@ -This document has been [moved to here](Testing.md). \ No newline at end of file +This document has been [moved to here](Testing.md). \ No newline at end of file diff --git a/docs/en/Json-Serialization.md b/docs/en/Json-Serialization.md index f0082ea9d6..7d6072c041 100644 --- a/docs/en/Json-Serialization.md +++ b/docs/en/Json-Serialization.md @@ -1,3 +1,3 @@ -# JSON +# JSON TODO \ No newline at end of file diff --git a/docs/en/MailKit.md b/docs/en/MailKit.md index de4b653f4d..b05a28f9ba 100644 --- a/docs/en/MailKit.md +++ b/docs/en/MailKit.md @@ -1,4 +1,4 @@ -# MailKit Integration +# MailKit Integration [MailKit](http://www.mimekit.net/) is a cross-platform, popular open source mail client library for .net. ABP Framework provides an integration package to use the MailKit as the [email sender](Emailing.md). diff --git a/docs/en/Module-Development-Basics.md b/docs/en/Module-Development-Basics.md index 4b76465a3e..63cbc31893 100644 --- a/docs/en/Module-Development-Basics.md +++ b/docs/en/Module-Development-Basics.md @@ -1,4 +1,4 @@ -# Modularity +# Modularity ## Introduction diff --git a/docs/en/Object-Extensions.md b/docs/en/Object-Extensions.md index 72265b2690..4c2b1b5454 100644 --- a/docs/en/Object-Extensions.md +++ b/docs/en/Object-Extensions.md @@ -1,4 +1,4 @@ -# Object Extensions +# Object Extensions ABP Framework provides an **object extension system** to allow you to **add extra properties** to an existing object **without modifying** the related class. This allows to extend functionalities implemented by a depended [application module](Modules/Index.md), especially when you want to [extend entities](Customizing-Application-Modules-Extending-Entities.md) and [DTOs](Customizing-Application-Modules-Overriding-Services.md) defined by the module. diff --git a/docs/en/Options.md b/docs/en/Options.md index b4f4f09140..76616aca28 100644 --- a/docs/en/Options.md +++ b/docs/en/Options.md @@ -1,4 +1,4 @@ -# Options +# Options Microsoft has introduced [the options pattern](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) that is used to configure a group of settings used by the framework services. This pattern is implemented by the [Microsoft.Extensions.Options](https://www.nuget.org/packages/Microsoft.Extensions.Options) NuGet package, so it is usable by any type of applications in addition to ASP.NET Core based applications. diff --git a/docs/en/RabbitMq.md b/docs/en/RabbitMq.md index 11dc305b41..9fc04aa5d6 100644 --- a/docs/en/RabbitMq.md +++ b/docs/en/RabbitMq.md @@ -1,3 +1,3 @@ -# RabbitMQ +# RabbitMQ TODO! \ No newline at end of file diff --git a/docs/en/Road-Map.md b/docs/en/Road-Map.md index 215f017a47..de0a45ffbb 100644 --- a/docs/en/Road-Map.md +++ b/docs/en/Road-Map.md @@ -1,4 +1,4 @@ -# ABP Framework Road Map +# ABP Framework Road Map This document provides a road map, release schedule and planned features for the ABP Framework. diff --git a/docs/en/SMS-Sending.md b/docs/en/SMS-Sending.md index bf37814100..0dca487a69 100644 --- a/docs/en/SMS-Sending.md +++ b/docs/en/SMS-Sending.md @@ -1,4 +1,4 @@ -# SMS Sending +# SMS Sending The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits; diff --git a/docs/en/Settings.md b/docs/en/Settings.md index 567cb02c4c..61c55f99b4 100644 --- a/docs/en/Settings.md +++ b/docs/en/Settings.md @@ -1,4 +1,4 @@ -# Settings +# Settings [Configuration system](Configuration.md) is a good way to configure the application on startup. In addition to the configurations, ABP provides another way to set and get some application settings. diff --git a/docs/en/Specifications.md b/docs/en/Specifications.md index bfe1d031d3..a9aeb2b050 100644 --- a/docs/en/Specifications.md +++ b/docs/en/Specifications.md @@ -1,4 +1,4 @@ -# Specifications +# Specifications Specification Pattern is used to define **named, reusable, combinable and testable filters** for entities and other business objects. diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md index 1fdf980ddc..5ad2dde24b 100644 --- a/docs/en/Startup-Templates/Application.md +++ b/docs/en/Startup-Templates/Application.md @@ -1,4 +1,4 @@ -# Application Startup Template +# Application Startup Template ## Introduction diff --git a/docs/en/Startup-Templates/Index.md b/docs/en/Startup-Templates/Index.md index b73779ecb8..09755151db 100644 --- a/docs/en/Startup-Templates/Index.md +++ b/docs/en/Startup-Templates/Index.md @@ -1,4 +1,4 @@ -# Startup Templates +# Startup Templates While you can start with an empty project and add needed packages manually, startup templates make easy and comfortable to start a new solution with the ABP framework. Click the name from the list below to see the documentation of the related startup template: diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md index cdcb964bef..c9ac6ccd48 100644 --- a/docs/en/Startup-Templates/Module.md +++ b/docs/en/Startup-Templates/Module.md @@ -1,4 +1,4 @@ -# Module Startup Template +# Module Startup Template This template can be used to create a **reusable [application module](../Modules/Index.md)** based on the [module development best practices & conventions](../Best-Practices/Index.md). It is also suitable for creating **microservices** (with or without UI). diff --git a/docs/en/Testing.md b/docs/en/Testing.md index 0a617174ed..e248ed51a6 100644 --- a/docs/en/Testing.md +++ b/docs/en/Testing.md @@ -1,4 +1,4 @@ -# Automated Testing +# Automated Testing ## Introduction diff --git a/docs/en/Timing.md b/docs/en/Timing.md index 790721e7a8..fce17de4cf 100644 --- a/docs/en/Timing.md +++ b/docs/en/Timing.md @@ -1,4 +1,4 @@ -# Timing +# Timing Working with times & [time zones](https://en.wikipedia.org/wiki/Time_zone) is always tricky, especially if you need to build a **global system** that is used by users in **different time zones**. diff --git a/docs/es/Index.md b/docs/es/Index.md index 772a0afc13..d05a4032da 100644 --- a/docs/es/Index.md +++ b/docs/es/Index.md @@ -1,4 +1,4 @@ -# Documentación de ABP +# Documentación de ABP ABP es un **marco de desarrollo de código abierto** enfocado en el desarrollo de aplicaciones web basadas en ASP.NET Core, pero tambien soporta el desarrollo de otro tipo de aplicaciones. diff --git a/docs/pt-BR/Audit-Logging.md b/docs/pt-BR/Audit-Logging.md index a714eebf14..609565d6f5 100644 --- a/docs/pt-BR/Audit-Logging.md +++ b/docs/pt-BR/Audit-Logging.md @@ -1,3 +1,3 @@ -# Audit Logging +# Audit Logging Façam \ No newline at end of file diff --git a/docs/pt-BR/Domain-Services.md b/docs/pt-BR/Domain-Services.md index c412c7b3b3..2a211453fa 100644 --- a/docs/pt-BR/Domain-Services.md +++ b/docs/pt-BR/Domain-Services.md @@ -1,3 +1,3 @@ -# ABP Documentation +# ABP Documentation Façam! \ No newline at end of file diff --git a/docs/pt-BR/Emailing.md b/docs/pt-BR/Emailing.md index a69b1cd7f3..ca704cad19 100644 --- a/docs/pt-BR/Emailing.md +++ b/docs/pt-BR/Emailing.md @@ -1,3 +1,3 @@ -# Emailing +# Emailing Façam! \ No newline at end of file diff --git a/docs/pt-BR/Integration-Tests.md b/docs/pt-BR/Integration-Tests.md index 712ceb5633..9d2f17264c 100644 --- a/docs/pt-BR/Integration-Tests.md +++ b/docs/pt-BR/Integration-Tests.md @@ -1,3 +1,3 @@ -# Integration Tests +# Integration Tests Façam! \ No newline at end of file diff --git a/docs/pt-BR/SMS-Sending.md b/docs/pt-BR/SMS-Sending.md index a69b1cd7f3..ca704cad19 100644 --- a/docs/pt-BR/SMS-Sending.md +++ b/docs/pt-BR/SMS-Sending.md @@ -1,3 +1,3 @@ -# Emailing +# Emailing Façam! \ No newline at end of file diff --git a/docs/pt-BR/Settings.md b/docs/pt-BR/Settings.md index 55d5536798..ffc08071a2 100644 --- a/docs/pt-BR/Settings.md +++ b/docs/pt-BR/Settings.md @@ -1,3 +1,3 @@ -# Settings +# Settings Façam! \ No newline at end of file diff --git a/docs/pt-BR/Specifications.md b/docs/pt-BR/Specifications.md index 0214f704ce..19a9db8a27 100644 --- a/docs/pt-BR/Specifications.md +++ b/docs/pt-BR/Specifications.md @@ -1,3 +1,3 @@ -# Specifications +# Specifications Façam! \ No newline at end of file diff --git a/docs/pt-BR/Testing.md b/docs/pt-BR/Testing.md index ec9f5626a9..231db64907 100644 --- a/docs/pt-BR/Testing.md +++ b/docs/pt-BR/Testing.md @@ -1,3 +1,3 @@ -# Testing +# Testing Façam! \ No newline at end of file diff --git a/docs/zh-Hans/Best-Practices/Application-Services.md b/docs/zh-Hans/Best-Practices/Application-Services.md index c99d67d518..0032fe1c11 100644 --- a/docs/zh-Hans/Best-Practices/Application-Services.md +++ b/docs/zh-Hans/Best-Practices/Application-Services.md @@ -1,4 +1,4 @@ -## 应用服务最佳实践 & 约定 +## 应用服务最佳实践 & 约定 * **推荐** 为每个 **聚合根** 创建一个应用服务. diff --git a/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md b/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md index 29e51501ea..7705dd179a 100644 --- a/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md +++ b/docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md @@ -1,4 +1,4 @@ -## 数据传输对象最佳实践 & 约定 +## 数据传输对象最佳实践 & 约定 * **推荐** 在 **application.contracts** 层中定义DTO. * **推荐** 在可能和必要的情况下从预构建的 **基础DTO类** 继承 (如 `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` 等). diff --git a/docs/zh-Hans/Best-Practices/Domain-Services.md b/docs/zh-Hans/Best-Practices/Domain-Services.md index d7916ffa96..c844b18060 100644 --- a/docs/zh-Hans/Best-Practices/Domain-Services.md +++ b/docs/zh-Hans/Best-Practices/Domain-Services.md @@ -1,3 +1,3 @@ -## 领域服务最佳实践 & 约定 +## 领域服务最佳实践 & 约定 TODO \ No newline at end of file diff --git a/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md b/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md index b01f7eab28..8a54ee85bb 100644 --- a/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md +++ b/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md @@ -1,4 +1,4 @@ -## Entity Framework Core 集成最佳实践 +## Entity Framework Core 集成最佳实践 > 有关EF Core 集成的基础知识,请参阅[Entity Framework Core 集成文档](../Entity-Framework-Core.md). diff --git a/docs/zh-Hans/Best-Practices/Index.md b/docs/zh-Hans/Best-Practices/Index.md index c99dec8604..863e397ac0 100644 --- a/docs/zh-Hans/Best-Practices/Index.md +++ b/docs/zh-Hans/Best-Practices/Index.md @@ -1,4 +1,4 @@ -## 模块开发最佳实践 & 约定 +## 模块开发最佳实践 & 约定 ### 介绍 diff --git a/docs/zh-Hans/Best-Practices/Module-Architecture.md b/docs/zh-Hans/Best-Practices/Module-Architecture.md index 648bf660b1..8a7cef183c 100644 --- a/docs/zh-Hans/Best-Practices/Module-Architecture.md +++ b/docs/zh-Hans/Best-Practices/Module-Architecture.md @@ -1,4 +1,4 @@ -## 模块化架构最佳实践 & 约定 +## 模块化架构最佳实践 & 约定 ### 解决方案结构 diff --git a/docs/zh-Hans/Domain-Services.md b/docs/zh-Hans/Domain-Services.md index 181efe0c43..9c9bb7dfd2 100644 --- a/docs/zh-Hans/Domain-Services.md +++ b/docs/zh-Hans/Domain-Services.md @@ -1,3 +1,3 @@ -# ABP Documentation +# ABP Documentation 待添加 diff --git a/docs/zh-Hans/Entity-Framework-Core-Migrations.md b/docs/zh-Hans/Entity-Framework-Core-Migrations.md index 8708516f76..9750d58612 100644 --- a/docs/zh-Hans/Entity-Framework-Core-Migrations.md +++ b/docs/zh-Hans/Entity-Framework-Core-Migrations.md @@ -1,4 +1,4 @@ - + # EF Core数据库迁移 本文首先介绍[应用程序启动模板](Startup-Templates/Application.md)提供的**默认结构**,并讨论你可能希望为自己的应用程序实现的**各种场景**. diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md index be5e50c2bd..1e676d0c67 100644 --- a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md +++ b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md @@ -1,4 +1,4 @@ -# 在AspNet Core MVC Web Application中使用ABP +# 在AspNet Core MVC Web Application中使用ABP 本教程将介绍如何开始以最少的依赖关系开始使用ABP开发. diff --git a/docs/zh-Hans/Index.md b/docs/zh-Hans/Index.md index d409f1e8ab..1cf45b3193 100644 --- a/docs/zh-Hans/Index.md +++ b/docs/zh-Hans/Index.md @@ -1,4 +1,4 @@ -# ABP 文档 +# ABP 文档 > 中文文档翻译来自[cnAbp](https://github.com/cnabp)组织,Abp中文网会持续跟进翻译,目前Abp vNext的英文文档还未完成,大家对整体框架没有深入的理解,翻译难免存在一些问题.敬请见谅.😀 diff --git a/docs/zh-Hans/Module-Development-Basics.md b/docs/zh-Hans/Module-Development-Basics.md index 1e1e9a42cd..b92ddad7fd 100644 --- a/docs/zh-Hans/Module-Development-Basics.md +++ b/docs/zh-Hans/Module-Development-Basics.md @@ -1,4 +1,4 @@ -## 模块化 +## 模块化 ### 介绍 diff --git a/docs/zh-Hans/Startup-Templates/Application.md b/docs/zh-Hans/Startup-Templates/Application.md index 534a26d8fb..b51976f75d 100644 --- a/docs/zh-Hans/Startup-Templates/Application.md +++ b/docs/zh-Hans/Startup-Templates/Application.md @@ -1,4 +1,4 @@ -# 应用程序启动模板 +# 应用程序启动模板 ## 介绍 diff --git a/docs/zh-Hans/Startup-Templates/Index.md b/docs/zh-Hans/Startup-Templates/Index.md index 268f51e98b..2977003723 100644 --- a/docs/zh-Hans/Startup-Templates/Index.md +++ b/docs/zh-Hans/Startup-Templates/Index.md @@ -1,4 +1,4 @@ -# 启动模板 +# 启动模板 虽然你可以从一个空项目开始并手动添加所需的包,但启动模板可以非常轻松,舒适地使用ABP框架启动新的解决方案. diff --git a/docs/zh-Hans/Startup-Templates/Module.md b/docs/zh-Hans/Startup-Templates/Module.md index aaab99a477..67e0ad3be2 100644 --- a/docs/zh-Hans/Startup-Templates/Module.md +++ b/docs/zh-Hans/Startup-Templates/Module.md @@ -1,4 +1,4 @@ -# MVC模块启动模板 +# MVC模块启动模板 可用此模板开发基于[模块开发最佳实践和约定](../Best-Practices/Index.md)的可**复用 [应用程序模块](../Modules/Index.md)** . 它同样适用于开发**微服务**. diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js b/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js index f22ee88c97..55bd36d0db 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; (function () { abp.utils = abp.utils || {}; diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Components/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js index 63b9d577d1..aa904f73e1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/tenant-switch.js @@ -1,4 +1,4 @@ -(function($) { +(function($) { var tenantSwitchModal = new abp.ModalManager(abp.appPath + 'Abp/MultiTenancy/TenantSwitchModal'); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json index fafc04a6ee..6af6463e71 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "GivenTenantIsNotExist": "المستأجر المحدد غير موجود: {0}", diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json index 0f63728c77..bc89095c31 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "GivenTenantIsNotExist": "Vybraný tenant neexistuje: {0}", diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json index 79d3e9640d..020688e50f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "GivenTenantIsNotExist": "Podany najemca nie istnieje: {0}", diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json index b5b6c374c1..4a6240dfa8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "GivenTenantIsNotExist": "İstenilen müşteri bulunamadı: {0}", diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json index b6108a03fa..9451f16d89 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/compilerconfig.json @@ -1,4 +1,4 @@ -[ +[ { "outputFile": "wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css", "inputFile": "wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss" diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css index 285b0482da..49945770b9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css @@ -1,4 +1,4 @@ -.dataTable { +.dataTable { width: 100% !important; border-spacing: 0 !important; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css index e70b9e330b..0f7a98c12b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css @@ -1 +1 @@ -.dataTable{width:100% !important;border-spacing:0 !important;}.table td,.table th{padding:8px 10px;}.dataTable tbody tr td button{cursor:pointer;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li{cursor:pointer;padding:5px;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li a{display:block;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li:hover{background:#f4f5f8;} \ No newline at end of file +.dataTable{width:100% !important;border-spacing:0 !important;}.table td,.table th{padding:8px 10px;}.dataTable tbody tr td button{cursor:pointer;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li{cursor:pointer;padding:5px;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li a{display:block;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li:hover{background:#f4f5f8;} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss index 7534888421..86fa21868a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss @@ -1,4 +1,4 @@ -.dataTable { +.dataTable { width: 100% !important; border-spacing: 0 !important; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js index 0e7b6698a6..7a2c08ca7e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { if (!$ || !$.fn.ajaxForm) { return; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js index 9c99a20acd..8fbf7871ce 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { if (!$) { return; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js index 3e3e24dc7a..547122d218 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { abp.widgets = abp.widgets || {}; abp.WidgetManager = function (opts) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js index f5b44fee44..273bf362aa 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert2/abp-sweetalert2.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; (function ($) { if (!Swal || !$) { return; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js index 01b29cdfd7..37a7c40166 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; (function () { if (!toastr) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js index e6061219b0..0433ed22ad 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; (function () { abp.ui = abp.ui || {}; abp.ui.extensions = abp.ui.extensions || {}; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.SignalR/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AspNetCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Auditing.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Auditing/FodyWeavers.xml b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Auditing/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Auditing/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd b/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Auditing/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Authorization.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Authorization/FodyWeavers.xml b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Authorization/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Authorization/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd b/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Authorization/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json index e7bc77c341..0e89764b33 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Volo.Authorization:010001": "Authorization failed! Given policy has not granted.", diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json index e330581c69..97794b03b8 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "Volo.Authorization:010001": "Autorizare eşuată! Politica dată nu a fost acordată.", diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json index b2d79bd949..f077822809 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Volo.Authorization:010001": "Yetkilendirme başarısız! Belirtilen izin sağlanmamış.", diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json index d0946ef6a5..81de414162 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/zh-Hans.json @@ -1,4 +1,4 @@ -{ +{ "culture": "zh-Hans", "texts": { "Volo.Authorization:010001": "授权失败! 提供的策略尚未授予.", diff --git a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml +++ b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.AutoMapper/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Autofac/FodyWeavers.xml b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Autofac/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Autofac/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd b/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Autofac/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BackgroundJobs/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BackgroundWorkers/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BlazoriseUI/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BlobStoring.Aws/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BlobStoring.Azure/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BlobStoring.Minio/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml +++ b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.BlobStoring/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Caching/FodyWeavers.xml b/framework/src/Volo.Abp.Caching/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Caching/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Caching/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Caching/FodyWeavers.xsd b/framework/src/Volo.Abp.Caching/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Caching/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Caching/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Castle.Core/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Cli.Core/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Cli/FodyWeavers.xml b/framework/src/Volo.Abp.Cli/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Cli/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Cli/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli/FodyWeavers.xsd b/framework/src/Volo.Abp.Cli/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Cli/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Cli/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Core/FodyWeavers.xml b/framework/src/Volo.Abp.Core/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Core/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Core/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.Core/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Core/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Core/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Dapper/FodyWeavers.xml b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Dapper/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Dapper/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd b/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Dapper/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Data/FodyWeavers.xml b/framework/src/Volo.Abp.Data/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Data/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Data/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Data/FodyWeavers.xsd b/framework/src/Volo.Abp.Data/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Data/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Data/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json index 5474677a84..ab4a51e1db 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "MaxResultCountExceededExceptionMessage": "لا يمكن أن يكون {0} أكثر من {1}! قم بزيادة{2}. {3} على الخادم للسماح بمزيد من النتائج." diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json index 428f348427..be09823ccd 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "MaxResultCountExceededExceptionMessage": "{0} en fazla {1} olabilir, daha büyük olamaz! Daha fazla sonuca izin vermek için {2}.{3}'ü sunucu tarafında artırın." diff --git a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Ddd.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Ddd.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml +++ b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.DistributedLocking/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Emailing/FodyWeavers.xml b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Emailing/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Emailing/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd b/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Emailing/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json index 242920c8d9..8189cc620d 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "DisplayName:Abp.Mailing.DefaultFromAddress": "Varsayılan gönderici adresi", diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json index 2bf2fa5240..53fdf5d23e 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/zh-Hant.json @@ -1,4 +1,4 @@ -{ +{ "culture": "zh-Hant", "texts": { "DisplayName:Abp.Mailing.DefaultFromAddress": "預設發信者地址", diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl index 57453a027f..4c64588666 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Layout.tpl @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl index 349de66b36..fa23fcba3f 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Templates/Message.tpl @@ -1 +1 @@ -{{model.message}} \ No newline at end of file +{{model.message}} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EntityFrameworkCore.MySQL/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EventBus.Boxes/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EventBus.Kafka/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EventBus.Rebus/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.EventBus/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.EventBus/FodyWeavers.xml +++ b/framework/src/Volo.Abp.EventBus/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.EventBus/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.EventBus/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml +++ b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json index a1c10f3d13..a75684ff1e 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "InternalServerErrorMessage": "Sayfa işlenirken sunucu tarafında beklenmedik bir hata oluştu!", diff --git a/framework/src/Volo.Abp.Features/FodyWeavers.xml b/framework/src/Volo.Abp.Features/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Features/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Features/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/FodyWeavers.xsd b/framework/src/Volo.Abp.Features/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Features/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Features/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en.json index de03dc11d0..a8cb9d25c5 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en.json +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Volo.Feature:010001": "Feature is not enabled: {FeatureName}", diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json index 07748edfd5..6754ab8115 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "Volo.Feature:010001": "Caracteristica nu este activată: {FeatureName}", diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/tr.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/tr.json index 4339c6ea71..61daf3f6d1 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/tr.json +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Volo.Feature:010001": "Bu özellik etkin değil: {FeatureName}", diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/zh-Hans.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/zh-Hans.json index 4c6d99c281..be90fcf76e 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/zh-Hans.json @@ -1,4 +1,4 @@ -{ +{ "culture": "zh-Hans", "texts": { "Volo.Feature:010001": "功能未启用: {FeatureName}", diff --git a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml +++ b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.FluentValidation/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xml b/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xml +++ b/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xsd b/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.GlobalFeatures/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/en.json b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/en.json index babf74ee59..9dfc69a148 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/en.json +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Volo.GlobalFeature:010001": "The '{ServiceName}' service needs to enable '{GlobalFeatureName}' feature." diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json index f2b0fa0d7b..7bbccfd247 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "Volo.GlobalFeature:010001": "Serviciul '{ServiceName}' trebuie să activeze caracteristica '{GlobalFeatureName}'." diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/tr.json b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/tr.json index 5f1ba62775..84cd776b37 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/tr.json +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Volo.GlobalFeature:010001": "'{ServiceName}' hizmetinin '{GlobalFeatureName}' özelliğini etkinleştirmesi gerekiyor." diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/zh-Hans.json b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/zh-Hans.json index ae55f0ce47..17349c4cfe 100644 --- a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/zh-Hans.json @@ -1,4 +1,4 @@ -{ +{ "culture": "zh-Hans", "texts": { "Volo.GlobalFeature:010001": "'{ServiceName}'服务需要启用'{GlobalFeatureName}'功能." diff --git a/framework/src/Volo.Abp.Guids/FodyWeavers.xml b/framework/src/Volo.Abp.Guids/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Guids/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Guids/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Guids/FodyWeavers.xsd b/framework/src/Volo.Abp.Guids/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Guids/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Guids/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.HangFire/FodyWeavers.xml b/framework/src/Volo.Abp.HangFire/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.HangFire/FodyWeavers.xml +++ b/framework/src/Volo.Abp.HangFire/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.HangFire/FodyWeavers.xsd b/framework/src/Volo.Abp.HangFire/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.HangFire/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.HangFire/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Http.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Http.Client.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Http.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Http/FodyWeavers.xml b/framework/src/Volo.Abp.Http/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Http/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Http/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http/FodyWeavers.xsd b/framework/src/Volo.Abp.Http/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Http/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Http/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml +++ b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.IdentityModel/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Json/FodyWeavers.xml b/framework/src/Volo.Abp.Json/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Json/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Json/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Json/FodyWeavers.xsd b/framework/src/Volo.Abp.Json/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Json/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Json/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Kafka/FodyWeavers.xml b/framework/src/Volo.Abp.Kafka/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Kafka/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Kafka/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Kafka/FodyWeavers.xsd b/framework/src/Volo.Abp.Kafka/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Kafka/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Kafka/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Ldap/FodyWeavers.xml b/framework/src/Volo.Abp.Ldap/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Ldap/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Ldap/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/FodyWeavers.xsd b/framework/src/Volo.Abp.Ldap/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Ldap/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Ldap/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/tr.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/tr.json index e6c90ea87c..7aab9cc2d7 100644 --- a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/tr.json +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "DisplayName:Abp.Ldap.ServerHost": "Sunucu Ana Bilgisayarı", diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/zh-Hant.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/zh-Hant.json index d8e30ea362..d8338f1d29 100644 --- a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/zh-Hant.json +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/zh-Hant.json @@ -1,4 +1,4 @@ -{ +{ "culture": "zh-Hant", "texts": { "DisplayName:Abp.Ldap.ServerHost": "服務器主機", diff --git a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Localization.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Localization/FodyWeavers.xml b/framework/src/Volo.Abp.Localization/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Localization/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Localization/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/FodyWeavers.xsd b/framework/src/Volo.Abp.Localization/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Localization/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Localization/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ar.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ar.json index c087a7c1ad..d07a19f041 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ar.json +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "DisplayName:Abp.Localization.DefaultLanguage": "اللغة الافتراضية", diff --git a/framework/src/Volo.Abp.MailKit/FodyWeavers.xml b/framework/src/Volo.Abp.MailKit/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.MailKit/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MailKit/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MailKit/FodyWeavers.xsd b/framework/src/Volo.Abp.MailKit/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.MailKit/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.MailKit/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.MemoryDb/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Minify/FodyWeavers.xml b/framework/src/Volo.Abp.Minify/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Minify/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Minify/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Minify/FodyWeavers.xsd b/framework/src/Volo.Abp.Minify/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Minify/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Minify/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xml b/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xsd b/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.MultiLingualObjects/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml +++ b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.MultiTenancy/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xml b/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xml +++ b/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xsd b/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.ObjectExtending/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml +++ b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.ObjectMapping/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Quartz/FodyWeavers.xml b/framework/src/Volo.Abp.Quartz/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Quartz/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Quartz/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Quartz/FodyWeavers.xsd b/framework/src/Volo.Abp.Quartz/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Quartz/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Quartz/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml +++ b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.RabbitMQ/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Security/FodyWeavers.xml b/framework/src/Volo.Abp.Security/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Security/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Security/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Security/FodyWeavers.xsd b/framework/src/Volo.Abp.Security/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Security/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Security/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Serialization/FodyWeavers.xml b/framework/src/Volo.Abp.Serialization/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Serialization/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Serialization/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Serialization/FodyWeavers.xsd b/framework/src/Volo.Abp.Serialization/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Serialization/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Serialization/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Settings/FodyWeavers.xml b/framework/src/Volo.Abp.Settings/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Settings/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Settings/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/FodyWeavers.xsd b/framework/src/Volo.Abp.Settings/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Settings/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Settings/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xml b/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xml index 0e5296674a..2ad59ce186 100644 --- a/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xsd b/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Sms.Aliyun/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Sms/FodyWeavers.xml b/framework/src/Volo.Abp.Sms/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Sms/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Sms/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Sms/FodyWeavers.xsd b/framework/src/Volo.Abp.Sms/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Sms/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Sms/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Specifications/FodyWeavers.xml b/framework/src/Volo.Abp.Specifications/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Specifications/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Specifications/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Specifications/FodyWeavers.xsd b/framework/src/Volo.Abp.Specifications/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Specifications/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Specifications/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xml b/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xsd b/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Swashbuckle/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js b/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js index ac85cf2559..0649b3c7fb 100644 --- a/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js +++ b/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; (function () { diff --git a/framework/src/Volo.Abp.TestBase/FodyWeavers.xml b/framework/src/Volo.Abp.TestBase/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.TestBase/FodyWeavers.xml +++ b/framework/src/Volo.Abp.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TestBase/FodyWeavers.xsd b/framework/src/Volo.Abp.TestBase/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.TestBase/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.TestBase/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xml b/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xml +++ b/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xsd b/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.TextTemplating.Core/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xml b/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xml +++ b/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xsd b/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.TextTemplating.Razor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xml b/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xml +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xsd b/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.TextTemplating.Scriban/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xml b/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xml +++ b/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xsd b/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.TextTemplating/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Threading/FodyWeavers.xml b/framework/src/Volo.Abp.Threading/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Threading/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Threading/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Threading/FodyWeavers.xsd b/framework/src/Volo.Abp.Threading/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Threading/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Threading/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Timing/FodyWeavers.xml b/framework/src/Volo.Abp.Timing/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Timing/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Timing/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/FodyWeavers.xsd b/framework/src/Volo.Abp.Timing/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Timing/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Timing/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml +++ b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.UI.Navigation/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ar.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ar.json index f4ddd1fdfd..0d4c4edb98 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ar.json +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Menu:Administration": "الإدارة" diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/tr.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/tr.json index 67c6da0197..a9d174b67d 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/tr.json +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Menu:Administration": "Yönetim" diff --git a/framework/src/Volo.Abp.UI/FodyWeavers.xml b/framework/src/Volo.Abp.UI/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.UI/FodyWeavers.xml +++ b/framework/src/Volo.Abp.UI/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/FodyWeavers.xsd b/framework/src/Volo.Abp.UI/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.UI/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.UI/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json index 630902d99e..4b18037f92 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Languages": "Diller", diff --git a/framework/src/Volo.Abp.Uow/FodyWeavers.xml b/framework/src/Volo.Abp.Uow/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Uow/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Uow/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/FodyWeavers.xsd b/framework/src/Volo.Abp.Uow/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Uow/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Uow/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Validation.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Validation/FodyWeavers.xml b/framework/src/Volo.Abp.Validation/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.Validation/FodyWeavers.xml +++ b/framework/src/Volo.Abp.Validation/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/FodyWeavers.xsd b/framework/src/Volo.Abp.Validation/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.Validation/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.Validation/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json index caeb19eebe..14b46e5837 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "'{0}' and '{1}' do not match.": "'{0}' ve '{1}' eşleşmiyor.", diff --git a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml +++ b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd +++ b/framework/src/Volo.Abp.VirtualFileSystem/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp/FodyWeavers.xml b/framework/src/Volo.Abp/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/framework/src/Volo.Abp/FodyWeavers.xml +++ b/framework/src/Volo.Abp/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/framework/src/Volo.Abp/FodyWeavers.xsd b/framework/src/Volo.Abp/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/framework/src/Volo.Abp/FodyWeavers.xsd +++ b/framework/src/Volo.Abp/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/framework/src/Volo.Abp/README.md b/framework/src/Volo.Abp/README.md index 3dee8799a1..0c73c3ec83 100644 --- a/framework/src/Volo.Abp/README.md +++ b/framework/src/Volo.Abp/README.md @@ -1,3 +1,3 @@ -# Volo.Abp +# Volo.Abp This package is a name holder. It just references to the `Volo.Abp.Core` package. \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/ar.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/ar.json index 986edffbf0..52923afa28 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/ar.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "BirthDate": "تاريخ الميلاد", diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/tr.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/tr.json index b99e81bec0..a68a3afd55 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/tr.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "DisplayName:PersonModel:BirthDate1": "Dogum gunu1", diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css index edfc4e2bd0..357594f869 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css @@ -1,3 +1,3 @@ -.lib1-css-content { +.lib1-css-content { color: red; } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js index 0e2f95a478..41c4ff027f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js @@ -1,3 +1,3 @@ -(function() { +(function() { //lib1-js-content })(); \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css index f1789fb234..090dfca6e2 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css @@ -1,3 +1,3 @@ -.lib2-css-content { +.lib2-css-content { color: blue; } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js index 531f167aa1..4b8e1c39ad 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js @@ -1,3 +1,3 @@ -(function() { +(function() { //lib2-js-content })(); \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Properties/launchSettings.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Properties/launchSettings.json index 0101a23bfc..a26573891e 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Properties/launchSettings.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js b/framework/test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js index 20a6856cb7..c3e8596309 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js +++ b/framework/test/Volo.Abp.AspNetCore.Tests/wwwroot/SampleFiles/test1.js @@ -1 +1 @@ -test1.js-content \ No newline at end of file +test1.js-content \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/ar.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/ar.json index b56de4f692..7ce12c8abf 100644 --- a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/ar.json +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "hello": "مرحبا" diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en.json b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en.json index 9c88edf323..cb5a9ef1d9 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en.json +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Volo.Abp.Http.DynamicProxying:10001": "Business exception with data: {0}" diff --git a/framework/test/Volo.Abp.IdentityModel.Tests/appsettings.json b/framework/test/Volo.Abp.IdentityModel.Tests/appsettings.json index f4d01ff407..9bd3ee7875 100644 --- a/framework/test/Volo.Abp.IdentityModel.Tests/appsettings.json +++ b/framework/test/Volo.Abp.IdentityModel.Tests/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "IdentityClients": { "Default": { "GrantType": "password", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/ar.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/ar.json index 0832930448..1b64463fd0 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/ar.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "USA": "الولايات المتحدة الامريكية", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/cs.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/cs.json index db2b0ccc4a..415fa45832 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/cs.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "USA": "Spojené státy americké", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en.json index 9bc0f26698..de4377bfbe 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "USA": "United States of America", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/pl-PL.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/pl-PL.json index a25b79d6d8..0a73019d6a 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/pl-PL.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "USA": "Stany Zjednoczone Ameryki", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/ar.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/ar.json index d515e91322..3fc4fc5568 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/ar.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "ThisFieldIsRequired": "الحقل مطلوب", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/cs.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/cs.json index f573dae436..a6842039c3 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/cs.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "ThisFieldIsRequired": "Toto pole je povinné", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json index ca45061cca..6fd963947c 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "ThisFieldIsRequired": "This field is required", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/pl-PL.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/pl-PL.json index cce4cfd722..85ae144ff0 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/pl-PL.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "ThisFieldIsRequired": "To pole jest wymagane", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/ar.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/ar.json index e951a66d09..2b1d6c6317 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/ar.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Hello {0}.": "مرحباً {0}.", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/cs.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/cs.json index 433cb0b72e..aa4bca6a86 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/cs.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "Hello {0}.": "Ahoj {0}.", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json index 098b3655ee..e18b39d241 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Hello {0}.": "Hello {0}.", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/pl-PL.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/pl-PL.json index e208fb12b3..304f60816e 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/pl-PL.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "Hello {0}.": "Witaj {0}.", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/ar.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/ar.json index 4b1ccb164a..93c8db23d1 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/ar.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "SeeYou": "الى لقاء" diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/cs.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/cs.json index a345698004..58a878e54e 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/cs.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "SeeYou": "Měj se" diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json index bcf2a995df..3edc3107a8 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "SeeYou": "See you" diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/es.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/es.json index f02a049420..b6136a5b1d 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/es.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/es.json @@ -1,4 +1,4 @@ -{ +{ "culture": "es", "texts": { "SeeYou": "Nos vemos" diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/it.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/it.json index 38d5f1ff1f..03f2cacb88 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/it.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/it.json @@ -1,4 +1,4 @@ -{ +{ "culture": "it", "texts": { "Hello {0}.": "Ciao {0}.", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/pl-PL.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/pl-PL.json index 5b754a7ae1..35172f0d54 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/pl-PL.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "SeeYou": "Do zobaczenia" diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json index c779d77a25..e411ad2c75 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/zh-Hant.json @@ -1,4 +1,4 @@ -{ +{ "culture": "zh-Hant", "texts": { "SeeYou": "再會" diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/ShowDecimalNumber.tpl b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/ShowDecimalNumber.tpl index 1c54056382..ec661f0b80 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/ShowDecimalNumber.tpl +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/ShowDecimalNumber.tpl @@ -1 +1 @@ -{{ model.amount}} \ No newline at end of file +{{ model.amount}} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/TestTemplateLayout1.tpl b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/TestTemplateLayout1.tpl index a780e210b0..ad15bafb34 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/TestTemplateLayout1.tpl +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/TestTemplateLayout1.tpl @@ -1 +1 @@ -*BEGIN*{{content}}*END* \ No newline at end of file +*BEGIN*{{content}}*END* \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/en.tpl b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/en.tpl index 1746eed52b..8deead5fbb 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/en.tpl +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/en.tpl @@ -1 +1 @@ -Welcome {{model.name}} to the abp.io! \ No newline at end of file +Welcome {{model.name}} to the abp.io! \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/tr.tpl b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/tr.tpl index 581016bc4d..a784117459 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/tr.tpl +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/SampleTemplates/WelcomeEmail/tr.tpl @@ -1 +1 @@ -Merhaba {{model.name}}, abp.io'ya hoşgeldiniz! \ No newline at end of file +Merhaba {{model.name}}, abp.io'ya hoşgeldiniz! \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl index d1b39f873c..147e4618fc 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/SampleTemplates/TestScribanTemplate.tpl @@ -1 +1 @@ -Hello {{model.name}}, {{L "HowAreYou" }} \ No newline at end of file +Hello {{model.name}}, {{L "HowAreYou" }} \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd +++ b/modules/account/src/Volo.Abp.Account.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Emailing/Templates/PasswordResetLink.tpl b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Emailing/Templates/PasswordResetLink.tpl index 05f21baf5b..61a274dc9e 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Emailing/Templates/PasswordResetLink.tpl +++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/Emailing/Templates/PasswordResetLink.tpl @@ -1,4 +1,4 @@ -

{{L "PasswordReset"}}

+

{{L "PasswordReset"}}

{{L "PasswordResetInfoInEmail"}}

diff --git a/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xsd +++ b/modules/account/src/Volo.Abp.Account.Blazor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd +++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd +++ b/modules/account/src/Volo.Abp.Account.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml +++ b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd +++ b/modules/account/src/Volo.Abp.Account.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/Default.js b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/Default.js index ef38f68466..bc01f152b3 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/Default.js +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/Password/Default.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { $(function () { var l = abp.localization.getResource("AbpAccount"); diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.js b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.js index 6f5642d07d..11fbf97063 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.js +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { $(function () { var l = abp.localization.getResource("AbpAccount"); diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.css b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.css index 75dcda385e..3c0d1b7cd6 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.css +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.css @@ -1,4 +1,4 @@ -.logoutiframe { +.logoutiframe { display: none; width:0; height: 0; diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js index 3300600b64..61dead22b4 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js @@ -1,4 +1,4 @@ -document.addEventListener('DOMContentLoaded', function (event) { +document.addEventListener('DOMContentLoaded', function (event) { setTimeout(function () { window.clientName = document.getElementById("redirectButton").getAttribute("cname"); window.location = document.getElementById('redirectButton').getAttribute('href'); diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/appsettings.json b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/appsettings.json index 3a8ae55ee8..68d3fb93cc 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/appsettings.json +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "Default": "Server=localhost;Database=BackgroundJobsDemoApp;Trusted_Connection=True" } diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/appsettings.json b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/appsettings.json index 3a8ae55ee8..68d3fb93cc 100644 --- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/appsettings.json +++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "Default": "Server=localhost;Database=BackgroundJobsDemoApp;Trusted_Connection=True" } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xml b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xml +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xsd b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xsd +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xml b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xml +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xsd b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xsd +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xml b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xml +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xsd b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xsd +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.js b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.js index 8a5b94c7c6..d87045c85e 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.js +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { $('.dropdown-menu a.dropdown-toggle').on('click', function (e) { if (!$(this).next().hasClass('show')) { $(this).parents('.dropdown-menu').first().find('.show').removeClass("show"); diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/highlightCode.js b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/highlightCode.js index a20784d518..c869366ec7 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/highlightCode.js +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/highlightCode.js @@ -1,4 +1,4 @@ -$(document).ready(function () { +$(document).ready(function () { $('pre code').each(function (i, block) { hljs.highlightBlock(block); }); diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js index d4d18c1f07..aad26e161d 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { //TODO: Make some aliases default: node_modules, libs "@node_modules": "./node_modules", "@libs": "./wwwroot/libs" diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json index ade33b1ebb..d5b753f72a 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json @@ -1,4 +1,4 @@ -[ +[ { "outputFile": "wwwroot/css/demo.css", "inputFile": "wwwroot/css/demo.scss" diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css index 297eea1679..0b97334725 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css @@ -1,4 +1,4 @@ -.demo-with-code { +.demo-with-code { padding-bottom: 10px; margin-bottom: 10px; } .demo-with-code .demo-area { diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css index 87e8a549a8..5975cfcff2 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css @@ -1 +1 @@ -.demo-with-code{padding-bottom:10px;margin-bottom:10px;}.demo-with-code .demo-area{margin-top:20px;margin-bottom:1em;}.demo-with-code .grid .col{background:#ffc9c9;border:1.5px solid #000;}.demo-with-code .large-row .row{min-height:10rem;background:#fcdede;margin-top:1rem;}.demo-with-code .code-area{border:1px solid #ddd;padding:10px;margin-top:10px;font-size:.9em;} \ No newline at end of file +.demo-with-code{padding-bottom:10px;margin-bottom:10px;}.demo-with-code .demo-area{margin-top:20px;margin-bottom:1em;}.demo-with-code .grid .col{background:#ffc9c9;border:1.5px solid #000;}.demo-with-code .large-row .row{min-height:10rem;background:#fcdede;margin-top:1rem;}.demo-with-code .code-area{border:1px solid #ddd;padding:10px;margin-top:10px;font-size:.9em;} \ No newline at end of file diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss index 04e085f22e..c3e440e3a3 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss @@ -1,4 +1,4 @@ -.demo-with-code { +.demo-with-code { padding-bottom: 10px; margin-bottom: 10px; diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xml b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xml index 00e1d9a1c1..86cee9e10c 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xml +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xsd b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xsd +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Properties/launchSettings.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Properties/launchSettings.json index e169e2d054..9bee4298ff 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Properties/launchSettings.json +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/demo/styles/main.css b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/demo/styles/main.css index 781074c39f..2935050f73 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/demo/styles/main.css +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/demo/styles/main.css @@ -1,4 +1,4 @@ -.abp-component-demo-section { +.abp-component-demo-section { border: 1px solid #999; padding: 10px; } diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xml b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xml +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xsd b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xsd +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xml b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xml +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xsd b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xsd +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xml b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xsd b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xml b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xml +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xsd b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xsd +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml +++ b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd +++ b/modules/blogging/app/Volo.BloggingTestApp/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp/abp.resourcemapping.js b/modules/blogging/app/Volo.BloggingTestApp/abp.resourcemapping.js index 56d68b1b51..82b2d4b649 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/abp.resourcemapping.js +++ b/modules/blogging/app/Volo.BloggingTestApp/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { "@node_modules": "./node_modules", "@libs": "./wwwroot/libs" diff --git a/modules/blogging/app/Volo.BloggingTestApp/appsettings.json b/modules/blogging/app/Volo.BloggingTestApp/appsettings.json index 6d3d120f4e..a0c192f0c8 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/appsettings.json +++ b/modules/blogging/app/Volo.BloggingTestApp/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "SqlServer": "Server=localhost;Database=BloggingTestApp;Trusted_Connection=True", "MongoDb": "mongodb://localhost:27017/BloggingTestApp" diff --git a/modules/blogging/app/Volo.BloggingTestApp/gulpfile.js b/modules/blogging/app/Volo.BloggingTestApp/gulpfile.js index 5dcf4c5c6f..f7ebc78f23 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/gulpfile.js +++ b/modules/blogging/app/Volo.BloggingTestApp/gulpfile.js @@ -1,4 +1,4 @@ -"use strict"; +"use strict"; var gulp = require("gulp"), path = require('path'), diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js index 599b2ad1f2..9232974753 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; $(function () { abp.modals.blogCreate = function () { var initModal = function (publicApi, args) { diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js index a459f7ff09..bf32d0944f 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; $(function () { abp.modals.blogEdit = function () { var initModal = function (publicApi, args) { diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js index aaa378cabd..ec636b2487 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource('Blogging'); var _createModal = new abp.ModalManager( abp.appPath + 'Blogging/Admin/Blogs/Create' diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/compilerconfig.json b/modules/blogging/src/Volo.Blogging.Admin.Web/compilerconfig.json index d8e67fbeca..afee711e4e 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/compilerconfig.json +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/compilerconfig.json @@ -1,4 +1,4 @@ -[ +[ { "outputFile": "Pages/Blog/Shared/Styles/blog.css", "inputFile": "Pages/Blog/Shared/Styles/blog.scss" diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml +++ b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd +++ b/modules/blogging/src/Volo.Blogging.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.css index 8b6fe32434..74663ff4dd 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.css @@ -1,4 +1,4 @@ -.vs-blog .hero-section .hero-article-img { +.vs-blog .hero-section .hero-article-img { min-height: 480px; background: center center no-repeat; background-size: cover; } diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.min.css index 9305116183..30722512aa 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.min.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.min.css @@ -1 +1 @@ -.vs-blog .hero-section .hero-article-img{min-height:480px;background:center center no-repeat;background-size:cover;} \ No newline at end of file +.vs-blog .hero-section .hero-article-img{min-height:480px;background:center center no-repeat;background-size:cover;} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.scss index 082173ba77..67bfd9bbb2 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.scss +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.scss @@ -1,4 +1,4 @@ -.vs-blog { +.vs-blog { .hero-section { .hero-article-img { min-height: 480px; diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js index 2038520457..5d63789eed 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { var l = abp.localization.getResource('Blogging'); var initSocialShareLinks = function () { diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js index 738e8668c4..f90bd744cd 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var $container = $('#edit-post-container'); var $editorContainer = $container.find('.edit-post-editor'); var $submitButton = $container.find('button[type=submit]'); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css index ff10946e1a..3bc0b09b9c 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.css @@ -1,4 +1,4 @@ -#qa-new-post-container .new-post-editor { +#qa-new-post-container .new-post-editor { background-color: #F9F9F9; min-height: 19.5em; } diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js index 89330e4a3b..48031bd8bc 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var $container = $('#qa-new-post-container'); var $editorContainer = $container.find('.new-post-editor'); var $submitButton = $container.find('button[type=submit]'); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.scss b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.scss index 2db020cbef..132c2c8ab5 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.scss +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.scss @@ -1,4 +1,4 @@ -#qa-new-post-container { +#qa-new-post-container { .new-post-editor { background-color: #F9F9F9; min-height: 19.5em; diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.css index 9fc6d4693d..a9d8fe5469 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.css @@ -1,4 +1,4 @@ -.hero-section { +.hero-section { padding: 0; } .hero-section .hero-articles { position: relative; diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.min.css index b4d8c94f86..1c8232d6e6 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.min.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/_home.min.css @@ -1 +1 @@ -.hero-section{padding:0;}.hero-section .hero-articles{position:relative;overflow:hidden;}.hero-section .hero-articles .hero-content h2{margin-top:.5rem;font-size:2em;font-weight:bold;}.hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}.hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}.hero-section .hero-articles .article-owner .article-infos{color:#000;}.hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}.hero-section .hero-articles .article-owner .article-infos img.article-avatar{display:inline-block;border-radius:50%;}.hero-section .hero-articles .img-container img{width:100%;}.hero-section .hero-articles:hover .img-container::after{opacity:1;}.article-owner .article-infos{color:#000;}.article-owner .article-infos a{color:rgba(0,0,0,.6);}.article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.article-owner .article-infos img.article-avatar{width:48px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.user-card h5 span{font-weight:300;opacity:.5;padding:0 5px;}.card-articles .card-content{padding:10px 0 10px;}.card-articles .card-content h3{margin:10px 0;}.card-articles .card-content h3 a{font-weight:700;}.card-articles .article-owner{text-align:left;}.card-articles .article-owner .article-infos{color:#000;}.card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}.card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.article-owner{font-size:.85em;}.user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}.user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}.user-link-icons a:hover{color:#fff;}.tags{margin:2rem 0;padding:0 0 1.25rem 0;}.tags .tag{display:inline-block;padding:4px 12px;background:rgba(208,208,208,.3);border-radius:4px;margin:0 2px 3px 0;color:#b1b1b1 !important;font-size:.85em;line-height:1.6em;text-transform:uppercase;transition:.25s;text-decoration:none;}.tags .tag:hover{background:#000;color:#fff !important;}.hero-section .tags{margin:1rem 0;padding:0 0 .5rem 0;}.list-group-item .tags{margin:1rem 0 0;padding:0 0;}.popular-tags a{display:block;font-size:.9em;}.popular-tags a span{float:right;opacity:.3;font-size:.9em;}.img-container{position:relative;overflow:hidden;border-radius:4px;background:#dcdcdc;} \ No newline at end of file +.hero-section{padding:0;}.hero-section .hero-articles{position:relative;overflow:hidden;}.hero-section .hero-articles .hero-content h2{margin-top:.5rem;font-size:2em;font-weight:bold;}.hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}.hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}.hero-section .hero-articles .article-owner .article-infos{color:#000;}.hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}.hero-section .hero-articles .article-owner .article-infos img.article-avatar{display:inline-block;border-radius:50%;}.hero-section .hero-articles .img-container img{width:100%;}.hero-section .hero-articles:hover .img-container::after{opacity:1;}.article-owner .article-infos{color:#000;}.article-owner .article-infos a{color:rgba(0,0,0,.6);}.article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.article-owner .article-infos img.article-avatar{width:48px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.user-card h5 span{font-weight:300;opacity:.5;padding:0 5px;}.card-articles .card-content{padding:10px 0 10px;}.card-articles .card-content h3{margin:10px 0;}.card-articles .card-content h3 a{font-weight:700;}.card-articles .article-owner{text-align:left;}.card-articles .article-owner .article-infos{color:#000;}.card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}.card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}.card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}.article-owner{font-size:.85em;}.user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}.user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}.user-link-icons a:hover{color:#fff;}.tags{margin:2rem 0;padding:0 0 1.25rem 0;}.tags .tag{display:inline-block;padding:4px 12px;background:rgba(208,208,208,.3);border-radius:4px;margin:0 2px 3px 0;color:#b1b1b1 !important;font-size:.85em;line-height:1.6em;text-transform:uppercase;transition:.25s;text-decoration:none;}.tags .tag:hover{background:#000;color:#fff !important;}.hero-section .tags{margin:1rem 0;padding:0 0 .5rem 0;}.list-group-item .tags{margin:1rem 0 0;padding:0 0;}.popular-tags a{display:block;font-size:.9em;}.popular-tags a span{float:right;opacity:.3;font-size:.9em;}.img-container{position:relative;overflow:hidden;border-radius:4px;background:#dcdcdc;} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css index 48a77ded7c..5dcc41376e 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.css @@ -1,4 +1,4 @@ -div.vs-blog { +div.vs-blog { position: relative; background: white; padding: 10px; diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.min.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.min.css index 5b3c0cf0b0..5c6b99aced 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.min.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Styles/blog.min.css @@ -1 +1 @@ -div.vs-blog{position:relative;background:#fff;padding:10px;font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:15px;}div.vs-blog .post-content{color:#555;}div.vs-blog .post-content a{text-decoration:underline !important;color:#555;}div.vs-blog .post-content a:hover{text-decoration:underline !important;color:#000;}div.vs-blog p{color:#444;}div.vs-blog p a{text-decoration:underline;}div.vs-blog h1,div.vs-blog h2,div.vs-blog h3,div.vs-blog h4,div.vs-blog h5,div.vs-blog h6,div.vs-blog .tab-title{font-family:Helvetica,Arial,sans-serif;font-weight:700;}div.vs-blog h1{font-size:2em;margin:1rem 0 1.5rem;line-height:1.25;}div.vs-blog h2,div.vs-blog .tab-title{font-size:1.5em;margin:1.5rem 0 .75rem;}div.vs-blog h3{font-size:1.25em;margin:1.5rem 0 .75rem;}div.vs-blog h4{font-size:1.125em;margin:1.5rem 0 .75rem;}div.vs-blog h5{font-size:1em;}div.vs-blog h6{font-size:1em;}div.vs-blog .lead{font-size:1.1rem;font-weight:300;}div.vs-blog img{max-width:100%;}div.vs-blog input,div.vs-blog select,div.vs-blog textarea,div.vs-blog .form-control,div.vs-blog .btn{border-radius:0;border-width:1px 1px 2px 1px;}div.vs-blog .navbar-toggler{background:#0ff;}div.vs-blog .no-border{border:0;}div.vs-blog .btn-rounded{border-radius:30px;}div.vs-blog .list-group .list-group-item{position:relative;display:block;padding:30px 0 30px;background:none;border-radius:0;border:0;}div.vs-blog .list-group .list-group-item:hover{background:none;}div.vs-blog .list-group .list-group-item+.list-group-item{border-top:1px solid #f5f5f5;padding:35px 0 30px;}div.vs-blog .list-group .list-group-item h3{margin-top:0;}div.vs-blog .list-group.small-list .list-group-item{padding:10px 0;}div.vs-blog .list-group.small-list .list-group-item+.list-group-item{padding:10px 0;}div.vs-blog .font-75{font-size:.75em;}div.vs-blog .font-85{font-size:.85em;}div.vs-blog .font-92{font-size:.92em;}div.vs-blog .font-100{font-size:1em;}div.vs-blog .font-125{font-size:1.125em;}div.vs-blog pre{background:#131323;padding:25px 30px;margin:1em 0 2em 0;}div.vs-blog .vs-blog-title{padding-bottom:15px;margin-bottom:25px;border-bottom:1px solid #ddd;}div.vs-blog .vs-blog-title h1,div.vs-blog .vs-blog-title h2,div.vs-blog .vs-blog-title h3,div.vs-blog .vs-blog-title h4,div.vs-blog .vs-blog-title h5,div.vs-blog .vs-blog-title h6{margin:0;padding:0;}div.vs-blog .vs-footer{padding-top:15px;margin-top:25px;border-top:1px solid #ddd;}div.vs-blog .vs-seperator{padding:0 4px;opacity:.3;}div.vs-blog .hero-section{padding:0;}div.vs-blog .hero-section .hero-articles{position:relative;overflow:hidden;}div.vs-blog .hero-section .hero-articles .hero-content h1{margin-top:2em;font-size:2em;font-weight:bold;line-height:1.25;}div.vs-blog .hero-section .hero-articles .hero-content h1 a{color:#000;font-weight:700;}div.vs-blog .hero-section .hero-articles .hero-content h1 a:hover{text-decoration:none;}div.vs-blog .hero-section .hero-articles .hero-content h2{margin-top:.5rem;font-size:1.75em;font-weight:bold;line-height:1.25;}div.vs-blog .hero-section .hero-articles .hero-content h2 a{color:#000;}div.vs-blog .hero-section .hero-articles .hero-content h2 a:hover{text-decoration:none;}div.vs-blog .hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}div.vs-blog .hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos{color:#000;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}div.vs-blog .hero-section .hero-articles .article-owner .article-infos img.article-avatar{display:inline-block;border-radius:50%;}div.vs-blog .hero-section .hero-articles .img-container img{width:100%;}div.vs-blog .hero-section .hero-articles:hover .img-container::after{opacity:1;}div.vs-blog .article-owner .article-infos{color:#000;}div.vs-blog .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .article-owner .article-infos img.article-avatar{width:48px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .user-card h5 span{font-weight:300;opacity:.5;padding:0 5px;}div.vs-blog .card-articles .card-content{padding:10px 0 10px;}div.vs-blog .card-articles .card-content h3{margin:10px 0;}div.vs-blog .card-articles .card-content h3 a{font-weight:700;}div.vs-blog .card-articles .article-owner{text-align:left;}div.vs-blog .card-articles .article-owner .article-infos{color:#000;}div.vs-blog .card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .article-owner{font-size:.72em;}div.vs-blog .user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}div.vs-blog .user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}div.vs-blog .user-link-icons a:hover{color:#fff;}div.vs-blog .tags{margin:2rem 0;padding:0 0 1.25rem 0;}div.vs-blog .tags .tag{display:inline-block;padding:4px 12px;background:rgba(208,208,208,.3);border-radius:4px;margin:0 2px 3px 0;color:#b1b1b1 !important;font-size:.85em;line-height:1.6em;text-transform:uppercase;transition:.25s;text-decoration:none;}div.vs-blog .tags .tag:hover{background:#000;color:#fff !important;}div.vs-blog .hero-section .tags{margin:1rem 0;padding:0 0 .5rem 0;}div.vs-blog .list-group-item .tags{margin:1rem 0 0;padding:0 0;}div.vs-blog .popular-tags a{display:block;font-size:.9em;}div.vs-blog .popular-tags a span{float:right;opacity:.3;font-size:.9em;}div.vs-blog .img-container{position:relative;overflow:hidden;border-radius:4px;background:#dcdcdc;}div.vs-blog .post-detail h1{padding:0 0;line-height:1.25em;font-size:3.5em;}div.vs-blog .post-detail .article-owner{text-align:center;position:relative;z-index:12;}div.vs-blog .post-detail .article-owner .article-infos{color:#000;}div.vs-blog .post-detail .article-owner .article-infos a{color:#000;color:rgba(0,0,0,.8);}div.vs-blog .post-detail .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .post-detail .article-owner .article-infos img.article-avatar{width:64px;margin:-20px 10px 0 0;display:inline-block;border-radius:50%;border:3px solid #fff;}div.vs-blog .post-detail .post-content{font-size:1.125em;}div.vs-blog .post-detail .post-content .post-img-container{margin:50px -80px 20px;overflow:hidden;border-radius:4px;}div.vs-blog .post-detail .post-content .lead{font-size:1.125em;color:#111;}div.vs-blog .media{font-size:.95em;}div.vs-blog .media .media{font-size:.95em;}div.vs-blog .read-more-btn{display:inline-block;font-size:.9em;margin:0 0 1em 0;background:#eee;color:#00f;padding:.25em 1em;border-radius:20px;}div.vs-blog .comment-area{background:#f5f5f5;margin:1.5rem 0;padding:10px;}div.vs-blog .comment-area .comment-owner{margin-bottom:4px;margin-top:8px;}div.vs-blog .comment-area .comment-owner span{font-weight:300;opacity:.5;padding:0 5px;}div.vs-blog .comment-area .media{background:#fff;margin:1px;border-radius:4px;}div.vs-blog .comment-area>.media{padding:30px;border-bottom:1px solid #f1f1f1;}div.vs-blog .comment-area>.media .media{padding:20px 0 0;}div.vs-blog .comment-area .comment-buttons{padding:4px 0;font-size:.96em;}div.vs-blog .comment-area .comment-buttons .seperator{color:#ddd;margin:0 8px;}div.vs-blog .comment-area .comment-buttons .count{color:#fff;background:#ddd;margin-left:5px;padding:1px 3px;font-size:10px;border-radius:3px;}div.vs-blog .comment-area .comment-buttons .count.count-up{background:#999;}div.vs-blog .comment-area .comment-buttons a{opacity:.65;margin-right:10px;}div.vs-blog .comment-area .comment-buttons a:hover{opacity:1;}div.vs-blog .comment-area p{margin-bottom:6px;}div.vs-blog .comment-area .comment-avatar{width:64px;}div.vs-blog .comment-area .answer-avatar{width:64px;}div.vs-blog .box-articles h3 a{color:#000;font-weight:700;}div.vs-blog .box-articles h3 a:hover{text-decoration:none;}div.vs-blog>.form-group{margin:0 !important;} \ No newline at end of file +div.vs-blog{position:relative;background:#fff;padding:10px;font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:15px;}div.vs-blog .post-content{color:#555;}div.vs-blog .post-content a{text-decoration:underline !important;color:#555;}div.vs-blog .post-content a:hover{text-decoration:underline !important;color:#000;}div.vs-blog p{color:#444;}div.vs-blog p a{text-decoration:underline;}div.vs-blog h1,div.vs-blog h2,div.vs-blog h3,div.vs-blog h4,div.vs-blog h5,div.vs-blog h6,div.vs-blog .tab-title{font-family:Helvetica,Arial,sans-serif;font-weight:700;}div.vs-blog h1{font-size:2em;margin:1rem 0 1.5rem;line-height:1.25;}div.vs-blog h2,div.vs-blog .tab-title{font-size:1.5em;margin:1.5rem 0 .75rem;}div.vs-blog h3{font-size:1.25em;margin:1.5rem 0 .75rem;}div.vs-blog h4{font-size:1.125em;margin:1.5rem 0 .75rem;}div.vs-blog h5{font-size:1em;}div.vs-blog h6{font-size:1em;}div.vs-blog .lead{font-size:1.1rem;font-weight:300;}div.vs-blog img{max-width:100%;}div.vs-blog input,div.vs-blog select,div.vs-blog textarea,div.vs-blog .form-control,div.vs-blog .btn{border-radius:0;border-width:1px 1px 2px 1px;}div.vs-blog .navbar-toggler{background:#0ff;}div.vs-blog .no-border{border:0;}div.vs-blog .btn-rounded{border-radius:30px;}div.vs-blog .list-group .list-group-item{position:relative;display:block;padding:30px 0 30px;background:none;border-radius:0;border:0;}div.vs-blog .list-group .list-group-item:hover{background:none;}div.vs-blog .list-group .list-group-item+.list-group-item{border-top:1px solid #f5f5f5;padding:35px 0 30px;}div.vs-blog .list-group .list-group-item h3{margin-top:0;}div.vs-blog .list-group.small-list .list-group-item{padding:10px 0;}div.vs-blog .list-group.small-list .list-group-item+.list-group-item{padding:10px 0;}div.vs-blog .font-75{font-size:.75em;}div.vs-blog .font-85{font-size:.85em;}div.vs-blog .font-92{font-size:.92em;}div.vs-blog .font-100{font-size:1em;}div.vs-blog .font-125{font-size:1.125em;}div.vs-blog pre{background:#131323;padding:25px 30px;margin:1em 0 2em 0;}div.vs-blog .vs-blog-title{padding-bottom:15px;margin-bottom:25px;border-bottom:1px solid #ddd;}div.vs-blog .vs-blog-title h1,div.vs-blog .vs-blog-title h2,div.vs-blog .vs-blog-title h3,div.vs-blog .vs-blog-title h4,div.vs-blog .vs-blog-title h5,div.vs-blog .vs-blog-title h6{margin:0;padding:0;}div.vs-blog .vs-footer{padding-top:15px;margin-top:25px;border-top:1px solid #ddd;}div.vs-blog .vs-seperator{padding:0 4px;opacity:.3;}div.vs-blog .hero-section{padding:0;}div.vs-blog .hero-section .hero-articles{position:relative;overflow:hidden;}div.vs-blog .hero-section .hero-articles .hero-content h1{margin-top:2em;font-size:2em;font-weight:bold;line-height:1.25;}div.vs-blog .hero-section .hero-articles .hero-content h1 a{color:#000;font-weight:700;}div.vs-blog .hero-section .hero-articles .hero-content h1 a:hover{text-decoration:none;}div.vs-blog .hero-section .hero-articles .hero-content h2{margin-top:.5rem;font-size:1.75em;font-weight:bold;line-height:1.25;}div.vs-blog .hero-section .hero-articles .hero-content h2 a{color:#000;}div.vs-blog .hero-section .hero-articles .hero-content h2 a:hover{text-decoration:none;}div.vs-blog .hero-section .hero-articles .tags .tag{background:rgba(208,208,208,.3);color:#fff !important;}div.vs-blog .hero-section .hero-articles .tags .tag:hover{background:#fff;color:#000 !important;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos{color:#000;}div.vs-blog .hero-section .hero-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(255,255,255,.2);}div.vs-blog .hero-section .hero-articles .article-owner .article-infos img.article-avatar{display:inline-block;border-radius:50%;}div.vs-blog .hero-section .hero-articles .img-container img{width:100%;}div.vs-blog .hero-section .hero-articles:hover .img-container::after{opacity:1;}div.vs-blog .article-owner .article-infos{color:#000;}div.vs-blog .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .article-owner .article-infos img.article-avatar{width:48px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .user-card h5 span{font-weight:300;opacity:.5;padding:0 5px;}div.vs-blog .card-articles .card-content{padding:10px 0 10px;}div.vs-blog .card-articles .card-content h3{margin:10px 0;}div.vs-blog .card-articles .card-content h3 a{font-weight:700;}div.vs-blog .card-articles .article-owner{text-align:left;}div.vs-blog .card-articles .article-owner .article-infos{color:#000;}div.vs-blog .card-articles .article-owner .article-infos a{color:rgba(0,0,0,.6);}div.vs-blog .card-articles .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .card-articles .article-owner .article-infos img.article-avatar{width:30px;margin:-1px 4px 0 0;display:inline-block;border-radius:50%;}div.vs-blog .article-owner{font-size:.72em;}div.vs-blog .user-link-icons{position:absolute;right:18px;top:15px;z-index:3;}div.vs-blog .user-link-icons a{display:inline-block;color:#eee;margin-left:12px;font-size:1.25em;}div.vs-blog .user-link-icons a:hover{color:#fff;}div.vs-blog .tags{margin:2rem 0;padding:0 0 1.25rem 0;}div.vs-blog .tags .tag{display:inline-block;padding:4px 12px;background:rgba(208,208,208,.3);border-radius:4px;margin:0 2px 3px 0;color:#b1b1b1 !important;font-size:.85em;line-height:1.6em;text-transform:uppercase;transition:.25s;text-decoration:none;}div.vs-blog .tags .tag:hover{background:#000;color:#fff !important;}div.vs-blog .hero-section .tags{margin:1rem 0;padding:0 0 .5rem 0;}div.vs-blog .list-group-item .tags{margin:1rem 0 0;padding:0 0;}div.vs-blog .popular-tags a{display:block;font-size:.9em;}div.vs-blog .popular-tags a span{float:right;opacity:.3;font-size:.9em;}div.vs-blog .img-container{position:relative;overflow:hidden;border-radius:4px;background:#dcdcdc;}div.vs-blog .post-detail h1{padding:0 0;line-height:1.25em;font-size:3.5em;}div.vs-blog .post-detail .article-owner{text-align:center;position:relative;z-index:12;}div.vs-blog .post-detail .article-owner .article-infos{color:#000;}div.vs-blog .post-detail .article-owner .article-infos a{color:#000;color:rgba(0,0,0,.8);}div.vs-blog .post-detail .article-owner .article-infos .seperator{margin:0 4px;color:rgba(0,0,0,.2);}div.vs-blog .post-detail .article-owner .article-infos img.article-avatar{width:64px;margin:-20px 10px 0 0;display:inline-block;border-radius:50%;border:3px solid #fff;}div.vs-blog .post-detail .post-content{font-size:1.125em;}div.vs-blog .post-detail .post-content .post-img-container{margin:50px -80px 20px;overflow:hidden;border-radius:4px;}div.vs-blog .post-detail .post-content .lead{font-size:1.125em;color:#111;}div.vs-blog .media{font-size:.95em;}div.vs-blog .media .media{font-size:.95em;}div.vs-blog .read-more-btn{display:inline-block;font-size:.9em;margin:0 0 1em 0;background:#eee;color:#00f;padding:.25em 1em;border-radius:20px;}div.vs-blog .comment-area{background:#f5f5f5;margin:1.5rem 0;padding:10px;}div.vs-blog .comment-area .comment-owner{margin-bottom:4px;margin-top:8px;}div.vs-blog .comment-area .comment-owner span{font-weight:300;opacity:.5;padding:0 5px;}div.vs-blog .comment-area .media{background:#fff;margin:1px;border-radius:4px;}div.vs-blog .comment-area>.media{padding:30px;border-bottom:1px solid #f1f1f1;}div.vs-blog .comment-area>.media .media{padding:20px 0 0;}div.vs-blog .comment-area .comment-buttons{padding:4px 0;font-size:.96em;}div.vs-blog .comment-area .comment-buttons .seperator{color:#ddd;margin:0 8px;}div.vs-blog .comment-area .comment-buttons .count{color:#fff;background:#ddd;margin-left:5px;padding:1px 3px;font-size:10px;border-radius:3px;}div.vs-blog .comment-area .comment-buttons .count.count-up{background:#999;}div.vs-blog .comment-area .comment-buttons a{opacity:.65;margin-right:10px;}div.vs-blog .comment-area .comment-buttons a:hover{opacity:1;}div.vs-blog .comment-area p{margin-bottom:6px;}div.vs-blog .comment-area .comment-avatar{width:64px;}div.vs-blog .comment-area .answer-avatar{width:64px;}div.vs-blog .box-articles h3 a{color:#000;font-weight:700;}div.vs-blog .box-articles h3 a:hover{text-decoration:none;}div.vs-blog>.form-group{margin:0 !important;} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json b/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json index d8e67fbeca..afee711e4e 100644 --- a/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json +++ b/modules/blogging/src/Volo.Blogging.Web/compilerconfig.json @@ -1,4 +1,4 @@ -[ +[ { "outputFile": "Pages/Blog/Shared/Styles/blog.css", "inputFile": "Pages/Blog/Shared/Styles/blog.scss" diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Properties/launchSettings.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Properties/launchSettings.json index e64f5f1af1..a1904377ef 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Properties/launchSettings.json +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/abp.resourcemapping.js b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/abp.resourcemapping.js index 96f7c92778..28831952e7 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/abp.resourcemapping.js +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js index 7c4cf805c1..abb77e9b7f 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { $(function () { SimulationArea.init($('#SimulationArea')); }); diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.css b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.css index 8a4e304726..ae3b8b401d 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.css +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.css @@ -1,4 +1,4 @@ -.simulation-client { +.simulation-client { border: 1px solid #008000; background-color: #f5f5f5; margin: 3px; diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js index 0a404900c9..83bbd4b58b 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js @@ -1,4 +1,4 @@ -var SimulationArea = {}; +var SimulationArea = {}; (function ($) { var $mainContainer = null; diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.min.css b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.min.css index 551f57f349..e3827f0640 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.min.css +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.min.css @@ -1 +1 @@ -.simulation-client{border:1px solid #008000;background-color:#f5f5f5;margin:3px;padding:5px;min-width:250px;overflow:hidden;display:inline-block;}.simulation-client .simulation-client-icon{color:#999;}.simulation-client .simulation-client-scenario{font-weight:bold;}.simulation-client .simulation-client-scenario-current-step{color:#666;font-size:.8em;}.simulation-client.simulation-client-running{background-color:#d6ffce;}.simulation-client.simulation-client-running .simulation-client-icon{color:#008000;}.simulation-client.simulation-client-stopping{background-color:#fde0d7;}.simulation-client.simulation-client-stopping .simulation-client-icon{color:#f88562;}.simulation-scenario .step-positive-fail-count{color:#f00;} \ No newline at end of file +.simulation-client{border:1px solid #008000;background-color:#f5f5f5;margin:3px;padding:5px;min-width:250px;overflow:hidden;display:inline-block;}.simulation-client .simulation-client-icon{color:#999;}.simulation-client .simulation-client-scenario{font-weight:bold;}.simulation-client .simulation-client-scenario-current-step{color:#666;font-size:.8em;}.simulation-client.simulation-client-running{background-color:#d6ffce;}.simulation-client.simulation-client-running .simulation-client-icon{color:#008000;}.simulation-client.simulation-client-stopping{background-color:#fde0d7;}.simulation-client.simulation-client-stopping .simulation-client-icon{color:#f88562;}.simulation-scenario .step-positive-fail-count{color:#f00;} \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.scss b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.scss index 6328397010..b8688ea576 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.scss +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.scss @@ -1,4 +1,4 @@ -.simulation-client { +.simulation-client { border: 1px solid #008000; background-color: #f5f5f5; margin: 3px; diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/compilerconfig.json b/modules/client-simulation/src/Volo.ClientSimulation.Web/compilerconfig.json index a81e7aafed..3cf0c8b981 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/compilerconfig.json +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/compilerconfig.json @@ -1,4 +1,4 @@ -[ +[ { "outputFile": "Pages/ClientSimulation/SimulationArea.css", "inputFile": "Pages/ClientSimulation/SimulationArea.scss" diff --git a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml +++ b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd +++ b/modules/client-simulation/src/Volo.ClientSimulation/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json index 0a047d88ec..e9f1193a76 100644 --- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json @@ -1,4 +1,4 @@ - { + { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json index 7811df81cb..f8bee7c361 100644 --- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "App": { "CorsOrigins": "https://*.CmsKit.com,http://localhost:4200" }, diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json index d3b75ec67d..3eb2e0b0a1 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js index e2189c3c69..98822e49db 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json index f79959a2e0..b5d02f2d6c 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "App": { "SelfUrl": "https://localhost:44318/", "CorsOrigins": "https://*.CmsKit.com,http://localhost:4200" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js index 5dcf4c5c6f..f7ebc78f23 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js @@ -1,4 +1,4 @@ -"use strict"; +"use strict"; var gulp = require("gulp"), path = require('path'), diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Properties/launchSettings.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Properties/launchSettings.json index 9e5b3dabf3..03dbca35c8 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Properties/launchSettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.Web.Host/abp.resourcemapping.js index 122e8e926a..d2989caf96 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/abp.resourcemapping.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/index.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/index.js index 9221f4d3bd..bbea9aa442 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/index.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/index.js @@ -1,4 +1,4 @@ -$(function(){ +$(function(){ var fileUploadUri = "/api/cms-kit-admin/media"; var fileUriPrefix = "/api/cms-kit/media/" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Properties/launchSettings.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Properties/launchSettings.json index 881bba2d31..e583b69fcf 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Properties/launchSettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js index 56d68b1b51..82b2d4b649 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { "@node_modules": "./node_modules", "@libs": "./wwwroot/libs" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json index 417b64b609..807fbdd896 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "Default": "Server=localhost;Database=CmsKit_Unified;Trusted_Connection=True" } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/gulpfile.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/gulpfile.js index 5dcf4c5c6f..f7ebc78f23 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/gulpfile.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/gulpfile.js @@ -1,4 +1,4 @@ -"use strict"; +"use strict"; var gulp = require("gulp"), path = require('path'), diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.css b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.css index 1493b95338..e575cc599a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.css +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.css @@ -1,3 +1,3 @@ -.cms-kit-editor { +.cms-kit-editor { height: 65vh !important; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index 6f927d3416..38c7aff6bf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource("CmsKit"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 5d4e0c38ee..ce6e56d842 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -1,4 +1,4 @@ - + $(function () { var l = abp.localization.getResource("CmsKit"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.css b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.css index 1493b95338..e575cc599a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.css +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.css @@ -1,3 +1,3 @@ -.cms-kit-editor { +.cms-kit-editor { height: 65vh !important; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js index 09459d2376..01bb06be63 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource("CmsKit"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/createModal.js index f42a96f500..3055911cd6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/createModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/createModal.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; $(function () { abp.modals.createBlog = function () { var initModal = function (publicApi, args) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/index.js index 43d27d1931..7057b9f50b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/index.js @@ -1,4 +1,4 @@ - + $(function () { var l = abp.localization.getResource("CmsKit"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/updateModal.js index ac91dfe150..85fea7fa29 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/updateModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/updateModal.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; $(function () { abp.modals.updateBlog = function () { var initModal = function (publicApi, args) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.css b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.css index 80c815e1c5..d1dbb49a6f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.css +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.css @@ -1,3 +1,3 @@ -.datatableCell{ +.datatableCell{ cursor: pointer; } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.js index d16630d7be..90e16271ce 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/details.js @@ -1,4 +1,4 @@ -$(function (){ +$(function (){ var l = abp.localization.getResource("CmsKit"); var commentsService = volo.cmsKit.admin.comments.commentAdmin; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.css b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.css index 80c815e1c5..d1dbb49a6f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.css +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.css @@ -1,3 +1,3 @@ -.datatableCell{ +.datatableCell{ cursor: pointer; } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.js index 9fe250b8b9..af104dec71 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/index.js @@ -1,4 +1,4 @@ -$(function (){ +$(function (){ var l = abp.localization.getResource("CmsKit"); var commentsService = volo.cmsKit.admin.comments.commentAdmin; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js index 4a85ac7c8a..42932c5973 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js @@ -1,4 +1,4 @@ -var _menuItem = {}; +var _menuItem = {}; $(function () { var l = abp.localization.getResource("CmsKit"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.css b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.css index 1493b95338..e575cc599a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.css +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.css @@ -1,3 +1,3 @@ -.cms-kit-editor { +.cms-kit-editor { height: 65vh !important; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index e31813a6a7..8d4c75d4e4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource("CmsKit"); var $createForm = $('#form-page-create'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js index 3807d27405..f72bd40159 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/index.js @@ -1,4 +1,4 @@ -$(function (){ +$(function (){ var l = abp.localization.getResource("CmsKit"); var pagesService = volo.cmsKit.admin.pages.pageAdmin; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.css b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.css index 1493b95338..e575cc599a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.css +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.css @@ -1,3 +1,3 @@ -.cms-kit-editor { +.cms-kit-editor { height: 65vh !important; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js index fbd9fb6c9c..a8a5eceebd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource("CmsKit"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Components/TagEditor/default.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Components/TagEditor/default.js index debb0ed084..834aedf3d6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Components/TagEditor/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Components/TagEditor/default.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var $tagEditorForms = $('.tag-editor-form'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Index.js index 30602b3e3a..25f4fd7b57 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Tags/Index.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource("CmsKit"); var createModal = new abp.ModalManager(abp.appPath + "CmsKit/Tags/CreateModal"); diff --git a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.css index 1cb708c4a6..469c8274f6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.css @@ -1,4 +1,4 @@ -.cms-reaction-select-icon:hover{ +.cms-reaction-select-icon:hover{ text-decoration: none; } .comment-links:hover { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js index 3e34d8f25e..a4fca33947 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/default.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { var l = abp.localization.getResource('CmsKit'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.css index e8aa16162a..b54d297984 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.css @@ -1,4 +1,4 @@ -.side { +.side { width: 15%; margin-top:10px; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js index 3db58f01c6..22531b47f3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js @@ -1,4 +1,4 @@ -(function () { +(function () { var l = abp.localization.getResource("CmsKit"); abp.widgets.CmsRating = function ($widget) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.css index 2bea61970d..4d40aa799d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.css @@ -1,4 +1,4 @@ -.cms-reaction-select-icon, .cms-reaction-icon { +.cms-reaction-select-icon, .cms-reaction-icon { cursor: pointer; } .cms-reaction-selection-popover-content i.fa-2x{ diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.js index b8b16c031e..93150ec909 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { var l = abp.localization.getResource('CmsKit'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/default.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/default.css index 3465bb45be..4cb180bb9f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/default.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/default.css @@ -1,4 +1,4 @@ - + .reaction-in-comment span.area-title { display: none; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css index f4543f9870..98c4a3100d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css @@ -1,4 +1,4 @@ -.card-body img { +.card-body img { max-width: 100%; border-radius: 4px; margin: 20px 0; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css index 48e71edcf9..161bb41190 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css @@ -1,4 +1,4 @@ -.card-img-top { +.card-img-top { } .popover { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/index.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/index.css index 48e71edcf9..161bb41190 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/index.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/index.css @@ -1,4 +1,4 @@ -.card-img-top { +.card-img-top { } .popover { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/highlightOnLoad.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/highlightOnLoad.js index 4c7df9ede9..b7d0c9b412 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/highlightOnLoad.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/highlightOnLoad.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { document.querySelectorAll('code').forEach(block => { $(block).addClass('hljs'); // Put in gray box even language is not supported diff --git a/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xml b/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xml +++ b/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xsd b/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xsd +++ b/modules/cms-kit/src/Volo.CmsKit.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/appsettings.json b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/appsettings.json index 264624b61d..3fc5696a7b 100644 --- a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/appsettings.json +++ b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "RemoteServices": { "Default": { "BaseUrl": "https://localhost:44318/" diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml +++ b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd +++ b/modules/docs/app/VoloDocs.Migrator/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/app/VoloDocs.Migrator/appsettings.json b/modules/docs/app/VoloDocs.Migrator/appsettings.json index 8ba3526f59..b2baa5ac34 100644 --- a/modules/docs/app/VoloDocs.Migrator/appsettings.json +++ b/modules/docs/app/VoloDocs.Migrator/appsettings.json @@ -1,3 +1,3 @@ -{ +{ "ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True" } \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/FodyWeavers.xml b/modules/docs/app/VoloDocs.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/app/VoloDocs.Web/FodyWeavers.xml +++ b/modules/docs/app/VoloDocs.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/FodyWeavers.xsd b/modules/docs/app/VoloDocs.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/app/VoloDocs.Web/FodyWeavers.xsd +++ b/modules/docs/app/VoloDocs.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/cs.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/cs.json index 3ffad5d85a..2cebd72422 100644 --- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/cs.json +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "DocsTitle": "VoloDocs", diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json index cf51cfe5a5..602b9fde39 100644 --- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "DocsTitle": "VoloDocs", diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/pl-PL.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/pl-PL.json index ca06e49ef5..0d9134cf69 100644 --- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/pl-PL.json +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "WelcomeVoloDocs": "Witaj w VoloDocs!", diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json index 41e756e55b..ff87cec3f7 100644 --- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "DocsTitle": "VoloDocs", diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sl.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sl.json index d09b9c88ce..cad4276750 100644 --- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sl.json +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "sl", "texts": { "DocsTitle": "VoloDocs", diff --git a/modules/docs/app/VoloDocs.Web/abp.resourcemapping.js b/modules/docs/app/VoloDocs.Web/abp.resourcemapping.js index 8fda0db7d4..8c0bb53dad 100644 --- a/modules/docs/app/VoloDocs.Web/abp.resourcemapping.js +++ b/modules/docs/app/VoloDocs.Web/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { "@node_modules": "./node_modules", "@libs": "./wwwroot/libs" diff --git a/modules/docs/app/VoloDocs.Web/appsettings.json b/modules/docs/app/VoloDocs.Web/appsettings.json index cba6d1394a..f7077a6a08 100644 --- a/modules/docs/app/VoloDocs.Web/appsettings.json +++ b/modules/docs/app/VoloDocs.Web/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True", "ElasticSearch": { "Url": "http://localhost:9200" diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json index fa65dc8a72..57dd3c75d5 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "Permission:DocumentManagement": "Správa dokumentů", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json index 2b1571c0b9..fa6a130c94 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Permission:DocumentManagement": "Document Management", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json index 80922afc71..d458fbe3ce 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "Permission:DocumentManagement": "Zarządzanie dokumentacją", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json index 03c583227c..02198cb96c 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "Permission:DocumentManagement": "Administrarea documentelor", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json index 436f365df3..81ca4a237d 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "sl", "texts": { "Permission:DocumentManagement": "Upravljanje dokumentov", diff --git a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Admin.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Admin.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.css b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.css index 006512da9a..d4fa85f8d5 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.css +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.css @@ -1,3 +1,3 @@ -#DocumentsContainer .datepicker { +#DocumentsContainer .datepicker { display: inline-block !important; width: 7rem !important; } diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js index d3671e3758..928990e160 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource('Docs'); var service = window.volo.docs.admin.documentsAdmin; diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.min.css b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.min.css index f98ba4beab..95eccc6667 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.min.css +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.min.css @@ -1 +1 @@ -#DocumentsContainer .datepicker{display:inline-block !important;width:7rem !important;} \ No newline at end of file +#DocumentsContainer .datepicker{display:inline-block !important;width:7rem !important;} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.scss b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.scss index 97147313df..61ed85d6f1 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.scss +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.scss @@ -1,4 +1,4 @@ -#DocumentsContainer { +#DocumentsContainer { .datepicker { display: inline-block !important; width: 7rem !important; diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js index e3f4032d18..0ac2d14f57 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; $(function () { abp.modals.projectPull = function () { diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js index c29927fde7..f56a46c167 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; $(function () { abp.modals.projectCreate = function () { var initModal = function (publicApi, args) { diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js index 7178516417..5c45280294 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; $(function () { abp.modals.projectEdit = function () { var initModal = function (publicApi, args) { diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js index b898dbf6b8..6748447724 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { var l = abp.localization.getResource('Docs'); var _createModal = new abp.ModalManager({ diff --git a/modules/docs/src/Volo.Docs.Admin.Web/compilerconfig.json b/modules/docs/src/Volo.Docs.Admin.Web/compilerconfig.json index 32ae3754e2..8877503491 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/compilerconfig.json +++ b/modules/docs/src/Volo.Docs.Admin.Web/compilerconfig.json @@ -1,4 +1,4 @@ -[ +[ { "outputFile": "Pages/Docs/Admin/Documents/index.css", "inputFile": "Pages/Docs/Admin/Documents/index.scss" diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/cs.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/cs.json index d3c4238d6f..bda38d983a 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/cs.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "Documents": "Dokumenty", diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json index dd60e2602b..37c6c685ff 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json @@ -1,4 +1,4 @@ -{ +{ "culture": "en", "texts": { "Documents": "Documents", diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/pl-PL.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/pl-PL.json index 44bd398458..03a5e152e8 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/pl-PL.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/pl-PL.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pl-PL", "texts": { "Documents": "Dokumenty", diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json index dfc47b978f..f884fd0e7a 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ro-RO", "texts": { "Documents": "Documente", diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sl.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sl.json index a923b17540..25e9a9772b 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sl.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "sl", "texts": { "Documents": "Dokumenti", diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml +++ b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd +++ b/modules/docs/src/Volo.Docs.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.css index a2f7903f73..b15e18ee85 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.css @@ -1,4 +1,4 @@ -/*! +/*! * Bootstrap Table of Contents v<%= version %> (http://afeld.github.io/bootstrap-toc/) * Copyright 2015 Aidan Feldman * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.js index 1bf1d139a9..13a4d1f6a5 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.js @@ -1,4 +1,4 @@ -/*! +/*! * Bootstrap Table of Contents v1.0.0 (http://afeld.github.io/bootstrap-toc/) * Copyright 2015 Aidan Feldman * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.less b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.less index d819f85ccc..89459798d1 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.less +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.less @@ -1,4 +1,4 @@ -@color_1: #767676; +@color_1: #767676; @color_2: #563d7c; @background_color_1: transparent; diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.min.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.min.css index e01dffc122..35d07fe746 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.min.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/bootstrap-toc.min.css @@ -1 +1 @@ -nav[data-toggle=toc] .nav>li>a{display:block;padding:4px 20px;font-size:13px;font-weight:500;color:#767676}nav[data-toggle=toc] .nav>li>a:focus,nav[data-toggle=toc] .nav>li>a:hover{padding-left:19px;color:#563d7c;text-decoration:none;background-color:transparent;border-left:1px solid #563d7c}nav[data-toggle=toc] .nav-link.active,nav[data-toggle=toc] .nav-link.active:focus,nav[data-toggle=toc] .nav-link.active:hover{padding-left:18px;font-weight:700;color:#563d7c;background-color:transparent;border-left:2px solid #563d7c}nav[data-toggle=toc] .nav-link+ul{display:none;padding-bottom:10px}nav[data-toggle=toc] .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px;font-weight:400}nav[data-toggle=toc] .nav .nav>li>a:focus,nav[data-toggle=toc] .nav .nav>li>a:hover{padding-left:29px}nav[data-toggle=toc] .nav .nav>li>.active,nav[data-toggle=toc] .nav .nav>li>.active:focus,nav[data-toggle=toc] .nav .nav>li>.active:hover{padding-left:28px;font-weight:500}nav[data-toggle=toc] .nav-link.active+ul{display:block} \ No newline at end of file +nav[data-toggle=toc] .nav>li>a{display:block;padding:4px 20px;font-size:13px;font-weight:500;color:#767676}nav[data-toggle=toc] .nav>li>a:focus,nav[data-toggle=toc] .nav>li>a:hover{padding-left:19px;color:#563d7c;text-decoration:none;background-color:transparent;border-left:1px solid #563d7c}nav[data-toggle=toc] .nav-link.active,nav[data-toggle=toc] .nav-link.active:focus,nav[data-toggle=toc] .nav-link.active:hover{padding-left:18px;font-weight:700;color:#563d7c;background-color:transparent;border-left:2px solid #563d7c}nav[data-toggle=toc] .nav-link+ul{display:none;padding-bottom:10px}nav[data-toggle=toc] .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px;font-weight:400}nav[data-toggle=toc] .nav .nav>li>a:focus,nav[data-toggle=toc] .nav .nav>li>a:hover{padding-left:29px}nav[data-toggle=toc] .nav .nav>li>.active,nav[data-toggle=toc] .nav .nav>li>.active:focus,nav[data-toggle=toc] .nav .nav>li>.active:hover{padding-left:28px;font-weight:500}nav[data-toggle=toc] .nav-link.active+ul{display:block} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.css index cd3e581996..454e6eb742 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.css @@ -1,4 +1,4 @@ -.code-toolbar .line-highlight { +.code-toolbar .line-highlight { margin-top: 1.5em !important; background: rgba(233, 237, 241, 0.34) !important; padding: 1px !important; } diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.min.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.min.css index 20ff809dd8..86f286308a 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.min.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.min.css @@ -1 +1 @@ -.code-toolbar .line-highlight{margin-top:1.5em !important;background:rgba(233,237,241,.34) !important;padding:1px !important;} \ No newline at end of file +.code-toolbar .line-highlight{margin-top:1.5em !important;background:rgba(233,237,241,.34) !important;padding:1px !important;} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.scss b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.scss index 2b2a8bb520..485c6cd881 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.scss +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.scss @@ -1,4 +1,4 @@ -.code-toolbar { +.code-toolbar { .line-highlight { margin-top: 1.5em !important; background: rgba(233, 237, 241, 0.34) !important; diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js index e0b6f1c1e3..1073329e82 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { $(function () { var errorPageRedirect = function () { var second = 3; diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css index e917ce1b67..c98cb069f4 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css @@ -1,4 +1,4 @@ -body { +body { position: relative; } .docs-page { diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css index 3e0cdc1e32..afaaa9fa70 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css @@ -1 +1 @@ -body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{text-decoration:none;}.docs-page .docs-sidebar{padding-right:1rem;position:relative;top:0;left:0;position:fixed;background:#1d1d1d;}.docs-page .docs-sidebar .input-group{border-radius:5px;overflow:hidden;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:300px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:0 10px;font-size:.9rem;width:26px;height:34px;line-height:1;border-radius:0;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text i{color:#666;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px 2px 10px;border:0;min-height:34px;height:34px;font-size:.9em;border-radius:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding:0 10px 2px 6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 230px);overflow-y:auto;margin-right:12px !important;margin-top:20px !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:14px;list-style:none;padding:0 1rem 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .badge{text-transform:uppercase;font-size:9px;position:relative;letter-spacing:.125px;top:-2px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.35rem;color:#000;font-weight:700;padding:15px 0 15px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.7em;letter-spacing:1px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.65;transition:.2s;font-size:.8em;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;min-height:100vh;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{background:#f5f7fa;padding:15px 30px;margin:0 -15px;text-align:right;font-size:.8em;min-height:48px;}.docs-page .docs-content .docs-link-btns a{color:#222;}.docs-page .docs-content .docs-link-btns a .text-muted{color:#ccc !important;}.docs-page .docs-content .docs-link-btns a:hover{color:#000;text-decoration:none;}.docs-page .docs-content .docs-link-btns .search-area{margin:-5px 0 -5px -10px;box-shadow:0 0 10px #e8e8e8;}.docs-page .docs-content .docs-link-btns .search-area .input-group-text{background:#fff;border:0;color:#000;font-size:1em;}.docs-page .docs-content .docs-link-btns .search-area .form-control{background:#fff;border:0;font-size:1em;padding-left:0;outline:0;box-shadow:none;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body{word-break:break-word;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:3px solid #d2dbe4;padding:1em 1.5em;background-color:#e9edf1;padding-bottom:.2em;font-size:1em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .doc-social-btns{margin:0 -15px 0;font-size:.8em;background:#e9ecf0;height:53px;padding:15px 20px;position:fixed;top:0;width:100%;}.docs-page .doc-social-btns a:hover{text-decoration:none;}.docs-page .doc-social-btns .twitter{color:#00acee;}.docs-page .doc-social-btns .linkedin{color:#0077b5;}.docs-page .doc-social-btns .email{color:#5a5a5a;}.docs-page .doc-social-btns .share-button{margin-left:10px;}.docs-page .cont-container a.cont-avatar{position:relative;}.docs-page .cont-container a.cont-avatar img{width:24px;height:24px;box-shadow:0 0 8px #c1bbbb;border:2px solid #fff;margin-left:-10px;display:inline-block;margin-top:-2px;transition:.2s;}.docs-page .cont-container:hover a.cont-avatar img{margin-left:-2px;}.docs-page .docs-page-index{min-height:90vh;background-color:#f5f7fa !important;}.docs-page .docs-page-index #scroll-index{max-height:90vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:50px;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#fff;opacity:.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#000;border-color:#000;color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;text-align:center;display:block;width:100%;background:#444;padding:6px 0 8px;border-radius:5px;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}@media(min-width:1100px){.container{max-width:1080px;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#1d1d1d;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.25rem;font-weight:700;display:block;margin-right:0;padding:10px 0 15px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}.logo-nav ul{width:300px !important;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:1 !important;filter:"alpha(opacity=1)";-ms-filter:"alpha(opacity=1)";} \ No newline at end of file +body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{text-decoration:none;}.docs-page .docs-sidebar{padding-right:1rem;position:relative;top:0;left:0;position:fixed;background:#1d1d1d;}.docs-page .docs-sidebar .input-group{border-radius:5px;overflow:hidden;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:300px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:0 10px;font-size:.9rem;width:26px;height:34px;line-height:1;border-radius:0;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text i{color:#666;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px 2px 10px;border:0;min-height:34px;height:34px;font-size:.9em;border-radius:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding:0 10px 2px 6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 230px);overflow-y:auto;margin-right:12px !important;margin-top:20px !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:14px;list-style:none;padding:0 1rem 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .badge{text-transform:uppercase;font-size:9px;position:relative;letter-spacing:.125px;top:-2px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.35rem;color:#000;font-weight:700;padding:15px 0 15px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.7em;letter-spacing:1px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.65;transition:.2s;font-size:.8em;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;min-height:100vh;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{background:#f5f7fa;padding:15px 30px;margin:0 -15px;text-align:right;font-size:.8em;min-height:48px;}.docs-page .docs-content .docs-link-btns a{color:#222;}.docs-page .docs-content .docs-link-btns a .text-muted{color:#ccc !important;}.docs-page .docs-content .docs-link-btns a:hover{color:#000;text-decoration:none;}.docs-page .docs-content .docs-link-btns .search-area{margin:-5px 0 -5px -10px;box-shadow:0 0 10px #e8e8e8;}.docs-page .docs-content .docs-link-btns .search-area .input-group-text{background:#fff;border:0;color:#000;font-size:1em;}.docs-page .docs-content .docs-link-btns .search-area .form-control{background:#fff;border:0;font-size:1em;padding-left:0;outline:0;box-shadow:none;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body{word-break:break-word;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:3px solid #d2dbe4;padding:1em 1.5em;background-color:#e9edf1;padding-bottom:.2em;font-size:1em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .doc-social-btns{margin:0 -15px 0;font-size:.8em;background:#e9ecf0;height:53px;padding:15px 20px;position:fixed;top:0;width:100%;}.docs-page .doc-social-btns a:hover{text-decoration:none;}.docs-page .doc-social-btns .twitter{color:#00acee;}.docs-page .doc-social-btns .linkedin{color:#0077b5;}.docs-page .doc-social-btns .email{color:#5a5a5a;}.docs-page .doc-social-btns .share-button{margin-left:10px;}.docs-page .cont-container a.cont-avatar{position:relative;}.docs-page .cont-container a.cont-avatar img{width:24px;height:24px;box-shadow:0 0 8px #c1bbbb;border:2px solid #fff;margin-left:-10px;display:inline-block;margin-top:-2px;transition:.2s;}.docs-page .cont-container:hover a.cont-avatar img{margin-left:-2px;}.docs-page .docs-page-index{min-height:90vh;background-color:#f5f7fa !important;}.docs-page .docs-page-index #scroll-index{max-height:90vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:50px;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#fff;opacity:.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#000;border-color:#000;color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;text-align:center;display:block;width:100%;background:#444;padding:6px 0 8px;border-radius:5px;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}@media(min-width:1100px){.container{max-width:1080px;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#1d1d1d;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.25rem;font-weight:700;display:block;margin-right:0;padding:10px 0 15px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}.logo-nav ul{width:300px !important;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:1 !important;filter:"alpha(opacity=1)";-ms-filter:"alpha(opacity=1)";} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/compilerconfig.json b/modules/docs/src/Volo.Docs.Web/compilerconfig.json index 9b210b9e49..e76298ae0d 100644 --- a/modules/docs/src/Volo.Docs.Web/compilerconfig.json +++ b/modules/docs/src/Volo.Docs.Web/compilerconfig.json @@ -1,4 +1,4 @@ -[ +[ { "outputFile": "Pages/Documents/Shared/Styles/vs.css", "inputFile": "Pages/Documents/Shared/Styles/vs.scss" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json index cc5fae2dff..74b0d26f61 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Features": "المميزات", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json index b69674a620..421b66824d 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Features": "Özellikler", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js index f9ec7e11fa..f4b052a755 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; (function ($) { abp.modals = abp.modals || {}; diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.Server/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json index 177e696bab..aa69206ddb 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Menu:IdentityManagement": "Kimlik yönetimi", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.Identity.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js index 364b922d08..d19ad1c81a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { var l = abp.localization.getResource('AbpIdentity'); var _identityRoleAppService = volo.abp.identity.identityRole; diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js index 833d29f6db..e82aa94f3b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { var l = abp.localization.getResource('AbpIdentity'); var _identityUserAppService = volo.abp.identity.identityUser; diff --git a/modules/identity/src/Volo.Abp.Identity.Web/compilerconfig.json b/modules/identity/src/Volo.Abp.Identity.Web/compilerconfig.json index 579e30d5f5..c9c513b9b8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/compilerconfig.json +++ b/modules/identity/src/Volo.Abp.Identity.Web/compilerconfig.json @@ -1,3 +1,3 @@ -[ +[ ] \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ar.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ar.json index 85eb99bc1d..e6bfa146c8 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ar.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "اسم مورد الهوية موجود بالفعل: {Name}", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/cs.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/cs.json index 97f3661f39..e554166855 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/cs.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/cs.json @@ -1,4 +1,4 @@ -{ +{ "culture": "cs", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "Název Identity Resource již existuje: {Name}", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/pt-BR.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/pt-BR.json index 8c0353cea3..caedb1296f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/pt-BR.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/pt-BR.json @@ -1,4 +1,4 @@ -{ +{ "culture": "pt-BR", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "O nome da Identity Resource já existe: {Name}", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sl.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sl.json index c5f2dc73de..5ee10ecd30 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sl.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "sl", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "Naziv vira identitete že obstaja: {Name}", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json index 08178cd306..29a5f94385 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "Identity Resource adı zaten mevcut: {Name}", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml +++ b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd +++ b/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json index bb85c9fd44..c90d135ca9 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Permissions": "الأذونات", diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json index 7f278ce6c1..e462d91a51 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Permissions": "İzinler", diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.css b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.css index d1f8731614..2d47ccd927 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.css +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.css @@ -1,4 +1,4 @@ -.custom-scroll-container > .col-4 { +.custom-scroll-container > .col-4 { overflow: hidden; overflow-y: auto; max-height: 499px; diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js index ca03b5abae..c33106d884 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js @@ -1,4 +1,4 @@ -var abp = abp || {}; +var abp = abp || {}; (function ($) { abp.modals = abp.modals || {}; diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json index ee96111e8e..67b747c6cc 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js index 56d68b1b51..82b2d4b649 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { "@node_modules": "./node_modules", "@libs": "./wwwroot/libs" diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js index 5dcf4c5c6f..f7ebc78f23 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js @@ -1,4 +1,4 @@ -"use strict"; +"use strict"; var gulp = require("gulp"), path = require('path'), diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json index 1319b59da1..d78c6dfc3b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Settings": "الإعدادات", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json index 5755313c65..4aa712ce3a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Settings": "Ayarlar", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js index 34765c5f9c..a5b8288d41 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { $(function () { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js index fdd63bd4fd..8af1bb6715 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js @@ -1,4 +1,4 @@ -(function ($) { +(function ($) { var l = abp.localization.getResource('AbpSettingManagement'); $(document).on('AbpSettingSaved', function () { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xml index bc5a74a236..7e9f94ead6 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json index ee5dac2be5..267165038c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Menu:TenantManagement": "إدارة الجهات", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json index a2e4ee5257..25ca3f2407 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Menu:TenantManagement": "Müşteri yönetimi", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/compilerconfig.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/compilerconfig.json index 21bfad9e88..32960f8ced 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/compilerconfig.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/compilerconfig.json @@ -1,2 +1,2 @@ -[ +[ ] \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd +++ b/modules/users/src/Volo.Abp.Users.Abstractions/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd +++ b/modules/users/src/Volo.Abp.Users.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd +++ b/modules/users/src/Volo.Abp.Users.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml +++ b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd +++ b/modules/users/src/Volo.Abp.Users.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xml b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xml index fe11c68dc9..4367b6b2c9 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xml +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xml @@ -1,3 +1,3 @@ - + diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xsd b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xsd +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Properties/launchSettings.json b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Properties/launchSettings.json index 11e34a6fc8..83b0d02709 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Properties/launchSettings.json +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/abp.resourcemapping.js b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/abp.resourcemapping.js index 57d6897c7a..8c0bb53dad 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/abp.resourcemapping.js +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { "@node_modules": "./node_modules", "@libs": "./wwwroot/libs" diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json index 3eb6786a5c..c94337f8f8 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json @@ -1,4 +1,4 @@ -{ +{ "name": "volo.virtualfileexplorer.dempapp", "version": "1.0.0", "private": true, diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xml b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xml +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xsd b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xsd +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.css b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.css index 0f9df655b4..e7b6a1e9d5 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.css +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.css @@ -1,4 +1,4 @@ -.modal-dialog{ +.modal-dialog{ overflow-y: initial !important } .modal-body{ diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js index 0e05e3be4b..0e00162554 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js @@ -1,4 +1,4 @@ -var _fileContentModal = new abp.ModalManager( +var _fileContentModal = new abp.ModalManager( abp.appPath + 'VirtualFileExplorer/FileContentModal' ); diff --git a/npm/ng-packs/packages/schematics/src/mocks/api-definition.json b/npm/ng-packs/packages/schematics/src/mocks/api-definition.json index b58add3d9c..a8ba6a68ec 100644 --- a/npm/ng-packs/packages/schematics/src/mocks/api-definition.json +++ b/npm/ng-packs/packages/schematics/src/mocks/api-definition.json @@ -1,4 +1,4 @@ -{ +{ "modules": { "settingManagement": { "rootPath": "settingManagement", diff --git a/npm/packs/anchor-js/abp.resourcemapping.js b/npm/packs/anchor-js/abp.resourcemapping.js index 0f06ef250a..fda8c9bea5 100644 --- a/npm/packs/anchor-js/abp.resourcemapping.js +++ b/npm/packs/anchor-js/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/anchor-js/anchor.js": "@libs/anchor-js/" } diff --git a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js index 582d41e92a..7c508c65cd 100644 --- a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js +++ b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js @@ -1,4 +1,4 @@ -"use strict"; +"use strict"; (function () { diff --git a/npm/packs/bootstrap-datepicker/abp.resourcemapping.js b/npm/packs/bootstrap-datepicker/abp.resourcemapping.js index 76b875f37f..2db70fc044 100644 --- a/npm/packs/bootstrap-datepicker/abp.resourcemapping.js +++ b/npm/packs/bootstrap-datepicker/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js": "@libs/bootstrap-datepicker/", "@node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css": "@libs/bootstrap-datepicker/", diff --git a/npm/packs/bootstrap/abp.resourcemapping.js b/npm/packs/bootstrap/abp.resourcemapping.js index bd4fb63863..fe980ea148 100644 --- a/npm/packs/bootstrap/abp.resourcemapping.js +++ b/npm/packs/bootstrap/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules//bootstrap/dist/css/bootstrap.css*": "@libs/bootstrap/css/", "@node_modules//bootstrap/dist/css/bootstrap.min.css*": "@libs/bootstrap/css/", diff --git a/npm/packs/chart.js/abp.resourcemapping.js b/npm/packs/chart.js/abp.resourcemapping.js index 62962983b1..70282d502f 100644 --- a/npm/packs/chart.js/abp.resourcemapping.js +++ b/npm/packs/chart.js/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/chart.js/dist/*.*": "@libs/chart.js/" } diff --git a/npm/packs/clipboard/abp.resourcemapping.js b/npm/packs/clipboard/abp.resourcemapping.js index 4d53c4c887..7c2bd5bb4e 100644 --- a/npm/packs/clipboard/abp.resourcemapping.js +++ b/npm/packs/clipboard/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/clipboard/dist/*.*": "@libs/clipboard/" } diff --git a/npm/packs/codemirror/abp.resourcemapping.js b/npm/packs/codemirror/abp.resourcemapping.js index f3169016d8..71731c389b 100644 --- a/npm/packs/codemirror/abp.resourcemapping.js +++ b/npm/packs/codemirror/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/codemirror/lib/*.*": "@libs/codemirror/" } diff --git a/npm/packs/core/abp.resourcemapping.js b/npm/packs/core/abp.resourcemapping.js index d531399b68..409f173a3e 100644 --- a/npm/packs/core/abp.resourcemapping.js +++ b/npm/packs/core/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/@abp/core/src/*": "@libs/abp/core/" } diff --git a/npm/packs/core/src/abp.css b/npm/packs/core/src/abp.css index 8d2de280ce..ddf9cae5b2 100644 --- a/npm/packs/core/src/abp.css +++ b/npm/packs/core/src/abp.css @@ -1,4 +1,4 @@ -@keyframes spin { +@keyframes spin { 0% { transform: translateZ(0) rotate(0deg); } diff --git a/npm/packs/cropperjs/abp.resourcemapping.js b/npm/packs/cropperjs/abp.resourcemapping.js index 0a2f369710..bc9eebb5d5 100644 --- a/npm/packs/cropperjs/abp.resourcemapping.js +++ b/npm/packs/cropperjs/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/cropperjs/dist/cropper.min.js": "@libs/cropperjs/js/", "@node_modules/cropperjs/dist/cropper.min.css": "@libs/cropperjs/css/", diff --git a/npm/packs/datatables.net-bs4/abp.resourcemapping.js b/npm/packs/datatables.net-bs4/abp.resourcemapping.js index 09289b58b7..364a1e6975 100644 --- a/npm/packs/datatables.net-bs4/abp.resourcemapping.js +++ b/npm/packs/datatables.net-bs4/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/datatables.net-bs4/css/dataTables.bootstrap4.css": "@libs/datatables.net-bs4/css/", "@node_modules/datatables.net-bs4/js/dataTables.bootstrap4.js": "@libs/datatables.net-bs4/js/" diff --git a/npm/packs/datatables.net/abp.resourcemapping.js b/npm/packs/datatables.net/abp.resourcemapping.js index afb2caeec4..53561d1e3e 100644 --- a/npm/packs/datatables.net/abp.resourcemapping.js +++ b/npm/packs/datatables.net/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/datatables.net/js/jquery.dataTables.js": "@libs/datatables.net/js/" } diff --git a/npm/packs/flag-icon-css/abp.resourcemapping.js b/npm/packs/flag-icon-css/abp.resourcemapping.js index bd26d124f5..8c3ae431dd 100644 --- a/npm/packs/flag-icon-css/abp.resourcemapping.js +++ b/npm/packs/flag-icon-css/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/flag-icon-css/css/*": "@libs/flag-icon-css/css", "@node_modules/flag-icon-css/flags/1x1/*": "@libs/flag-icon-css/flags/1x1" diff --git a/npm/packs/font-awesome/abp.resourcemapping.js b/npm/packs/font-awesome/abp.resourcemapping.js index c78fcae429..fee957c848 100644 --- a/npm/packs/font-awesome/abp.resourcemapping.js +++ b/npm/packs/font-awesome/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/@fortawesome/fontawesome-free/css/all.css": "@libs/@fortawesome/fontawesome-free/css/", "@node_modules/@fortawesome/fontawesome-free/css/v4-shims.css": "@libs/@fortawesome/fontawesome-free/css/", diff --git a/npm/packs/highlight.js/abp.resourcemapping.js b/npm/packs/highlight.js/abp.resourcemapping.js index a9bd687bb3..b36b202797 100644 --- a/npm/packs/highlight.js/abp.resourcemapping.js +++ b/npm/packs/highlight.js/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/@abp/highlight.js/lib/highlight.pack.js": "@libs/highlight.js/", "@node_modules/@abp/highlight.js/lib/styles/*.*": "@libs/highlight.js/styles/" diff --git a/npm/packs/jquery-form/abp.resourcemapping.js b/npm/packs/jquery-form/abp.resourcemapping.js index 2f8fab7e14..259206e7ea 100644 --- a/npm/packs/jquery-form/abp.resourcemapping.js +++ b/npm/packs/jquery-form/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/jquery-form/dist/jquery.form.min.js": "@libs/jquery-form/", "@node_modules/jquery-form/dist/jquery.form.min.js.map": "@libs/jquery-form/" diff --git a/npm/packs/jquery-validation-unobtrusive/abp.resourcemapping.js b/npm/packs/jquery-validation-unobtrusive/abp.resourcemapping.js index 114eef266c..0cd628d449 100644 --- a/npm/packs/jquery-validation-unobtrusive/abp.resourcemapping.js +++ b/npm/packs/jquery-validation-unobtrusive/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.js": "@libs/jquery-validation-unobtrusive/" } diff --git a/npm/packs/jquery-validation/abp.resourcemapping.js b/npm/packs/jquery-validation/abp.resourcemapping.js index 1817481d6e..91575842d3 100644 --- a/npm/packs/jquery-validation/abp.resourcemapping.js +++ b/npm/packs/jquery-validation/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/jquery-validation/dist/jquery.validate.js": "@libs/jquery-validation/", "@node_modules/jquery-validation/dist/localization/*.*": "@libs/jquery-validation/localization/" diff --git a/npm/packs/jquery/abp.resourcemapping.js b/npm/packs/jquery/abp.resourcemapping.js index bab3ac7b8e..379e3d581d 100644 --- a/npm/packs/jquery/abp.resourcemapping.js +++ b/npm/packs/jquery/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/jquery/dist/jquery.js": "@libs/jquery/", "@node_modules/@abp/jquery/src/*.*": "@libs/abp/jquery/" diff --git a/npm/packs/jstree/abp.resourcemapping.js b/npm/packs/jstree/abp.resourcemapping.js index 89b3e09d64..1f84abbefc 100644 --- a/npm/packs/jstree/abp.resourcemapping.js +++ b/npm/packs/jstree/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/jstree/dist/**/*.*": "@libs/jstree/" } diff --git a/npm/packs/lodash/abp.resourcemapping.js b/npm/packs/lodash/abp.resourcemapping.js index aa0f6520c5..4f8254b620 100644 --- a/npm/packs/lodash/abp.resourcemapping.js +++ b/npm/packs/lodash/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/lodash/lodash.min.js": "@libs/lodash/" } diff --git a/npm/packs/luxon/abp.resourcemapping.js b/npm/packs/luxon/abp.resourcemapping.js index ce7885afea..5b0352eda6 100644 --- a/npm/packs/luxon/abp.resourcemapping.js +++ b/npm/packs/luxon/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/luxon/build/global/*.*": "@libs/luxon/", "@node_modules/@abp/luxon/src/*.*": "@libs/abp/luxon/" diff --git a/npm/packs/malihu-custom-scrollbar-plugin/abp.resourcemapping.js b/npm/packs/malihu-custom-scrollbar-plugin/abp.resourcemapping.js index 12f37dfed1..7e7f1001e6 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/abp.resourcemapping.js +++ b/npm/packs/malihu-custom-scrollbar-plugin/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/malihu-custom-scrollbar-plugin/*.*": "@libs/malihu-custom-scrollbar-plugin/" } diff --git a/npm/packs/markdown-it/abp.resourcemapping.js b/npm/packs/markdown-it/abp.resourcemapping.js index 3ca7c4d556..0d84ea6c27 100644 --- a/npm/packs/markdown-it/abp.resourcemapping.js +++ b/npm/packs/markdown-it/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/markdown-it/dist/markdown-it.min.js": "@libs/markdown-it/" } diff --git a/npm/packs/owl.carousel/abp.resourcemapping.js b/npm/packs/owl.carousel/abp.resourcemapping.js index fb183df79c..3f540f8a28 100644 --- a/npm/packs/owl.carousel/abp.resourcemapping.js +++ b/npm/packs/owl.carousel/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/owl.carousel/dist/**/*.*": "@libs/owl.carousel/" } diff --git a/npm/packs/popper.js/abp.resourcemapping.js b/npm/packs/popper.js/abp.resourcemapping.js index 06d224fb05..53d9e098a4 100644 --- a/npm/packs/popper.js/abp.resourcemapping.js +++ b/npm/packs/popper.js/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/popper.js/dist/umd/popper.min.js": "@libs/popper.js/", "@node_modules/popper.js/dist/umd/popper.min.js.map": "@libs/popper.js/" diff --git a/npm/packs/prismjs/abp.resourcemapping.js b/npm/packs/prismjs/abp.resourcemapping.js index 7b89f5db23..bb996dd15f 100644 --- a/npm/packs/prismjs/abp.resourcemapping.js +++ b/npm/packs/prismjs/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/prismjs/**/*.*": "@libs/prismjs/" } diff --git a/npm/packs/select2/abp.resourcemapping.js b/npm/packs/select2/abp.resourcemapping.js index f1205487b7..46445720fe 100644 --- a/npm/packs/select2/abp.resourcemapping.js +++ b/npm/packs/select2/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/select2/dist/css/select2.min.css": "@libs/select2/css/", "@node_modules/select2/dist/js/select2.min.js": "@libs/select2/js/", diff --git a/npm/packs/signalr/abp.resourcemapping.js b/npm/packs/signalr/abp.resourcemapping.js index 69ef9ca16a..f4175895dc 100644 --- a/npm/packs/signalr/abp.resourcemapping.js +++ b/npm/packs/signalr/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/@microsoft/signalr/dist/browser/*.*": "@libs/signalr/browser/" } diff --git a/npm/packs/slugify/abp.resourcemapping.js b/npm/packs/slugify/abp.resourcemapping.js index 436adecf01..f4879e28a7 100644 --- a/npm/packs/slugify/abp.resourcemapping.js +++ b/npm/packs/slugify/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/slugify/slugify.js" : "@libs/slugify/" } diff --git a/npm/packs/star-rating-svg/abp.resourcemapping.js b/npm/packs/star-rating-svg/abp.resourcemapping.js index bb8a398f9b..54c05535d3 100644 --- a/npm/packs/star-rating-svg/abp.resourcemapping.js +++ b/npm/packs/star-rating-svg/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/star-rating-svg/dist/*.min.js": "@libs/star-rating-svg/js/", "@node_modules/star-rating-svg/src/css/*.css": "@libs/star-rating-svg/css/", diff --git a/npm/packs/sweetalert2/abp.resourcemapping.js b/npm/packs/sweetalert2/abp.resourcemapping.js index 9f20bc29de..3725e0e22b 100644 --- a/npm/packs/sweetalert2/abp.resourcemapping.js +++ b/npm/packs/sweetalert2/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/sweetalert2/dist/*.*": "@libs/sweetalert2/" } diff --git a/npm/packs/timeago/abp.resourcemapping.js b/npm/packs/timeago/abp.resourcemapping.js index b0a555bf75..df913e3d28 100644 --- a/npm/packs/timeago/abp.resourcemapping.js +++ b/npm/packs/timeago/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/timeago/jquery.timeago.js": "@libs/timeago/", "@node_modules/timeago/locales/*.*": "@libs/timeago/locales/" diff --git a/npm/packs/toastr/abp.resourcemapping.js b/npm/packs/toastr/abp.resourcemapping.js index 90b143d8fe..dbad10b4b2 100644 --- a/npm/packs/toastr/abp.resourcemapping.js +++ b/npm/packs/toastr/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/toastr/build/*.*": "@libs/toastr/" } diff --git a/npm/packs/tui-editor/abp.resourcemapping.js b/npm/packs/tui-editor/abp.resourcemapping.js index f5b29d17a0..7dbe5f6c6e 100644 --- a/npm/packs/tui-editor/abp.resourcemapping.js +++ b/npm/packs/tui-editor/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/@toast-ui/editor/dist/*.*": "@libs/tui-editor/" } diff --git a/npm/packs/uppy/abp.resourcemapping.js b/npm/packs/uppy/abp.resourcemapping.js index 8af675eb65..f0a2d2230e 100644 --- a/npm/packs/uppy/abp.resourcemapping.js +++ b/npm/packs/uppy/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/uppy/dist/*.*": "@libs/uppy/" } diff --git a/npm/packs/utils/abp.resourcemapping.js b/npm/packs/utils/abp.resourcemapping.js index d8d4cb5f97..c1efe2572a 100644 --- a/npm/packs/utils/abp.resourcemapping.js +++ b/npm/packs/utils/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { '@node_modules/@abp/utils/dist/bundles/*.*': '@libs/abp/utils/', }, diff --git a/npm/packs/vee-validate/abp.resourcemapping.js b/npm/packs/vee-validate/abp.resourcemapping.js index 78848d680c..cdd950c4f4 100644 --- a/npm/packs/vee-validate/abp.resourcemapping.js +++ b/npm/packs/vee-validate/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/vee-validate/dist/vee-validate.full.min.js": "@libs/vee-validate/" } diff --git a/npm/packs/vue/abp.resourcemapping.js b/npm/packs/vue/abp.resourcemapping.js index 7a607786a4..ce5b10d6ee 100644 --- a/npm/packs/vue/abp.resourcemapping.js +++ b/npm/packs/vue/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { mappings: { "@node_modules/vue/dist/vue.min.js": "@libs/vue/" } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Pages/Index.razor.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Pages/Index.razor.css index abef246243..b154964e8a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Pages/Index.razor.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Pages/Index.razor.css @@ -1 +1 @@ -/* Write here your styles for the Index page */ \ No newline at end of file +/* Write here your styles for the Index page */ \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/blazor-global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/blazor-global-styles.css index 4f895ce71e..0d26cfc24f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/blazor-global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/blazor-global-styles.css @@ -1,4 +1,4 @@ -#blazor-error-ui { +#blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/global-styles.css index b248b67c1b..7f8a925bc0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/wwwroot/global-styles.css @@ -1,3 +1,3 @@ -body { +body { } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/Index.razor.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/Index.razor.css index abef246243..b154964e8a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/Index.razor.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Pages/Index.razor.css @@ -1 +1 @@ -/* Write here your styles for the Index page */ \ No newline at end of file +/* Write here your styles for the Index page */ \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/blazor-global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/blazor-global-styles.css index 4f895ce71e..0d26cfc24f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/blazor-global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/blazor-global-styles.css @@ -1,4 +1,4 @@ -#blazor-error-ui { +#blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/global-styles.css index b248b67c1b..7f8a925bc0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/wwwroot/global-styles.css @@ -1,3 +1,3 @@ -body { +body { } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.css index abef246243..b154964e8a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.css @@ -1 +1 @@ -/* Write here your styles for the Index page */ \ No newline at end of file +/* Write here your styles for the Index page */ \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/main.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/main.css index 471b4d8bf7..d65524ef48 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/main.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/main.css @@ -1,4 +1,4 @@ -/* Global styles for the MyProjectName application */ +/* Global styles for the MyProjectName application */ .spinner { width: 40px; height: 40px; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json index 05cb96a9d6..3e5227a915 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json @@ -1,4 +1,4 @@ -{ +{ "culture": "ar", "texts": { "Menu:Home": "الرئيسية", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json index 5bf83ee7a8..2cc911e48e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json @@ -1,4 +1,4 @@ -{ +{ "culture": "tr", "texts": { "Menu:Home": "Ana sayfa", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json index c3ea010654..387c4dcff7 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/abp.resourcemapping.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/abp.resourcemapping.js index 122e8e926a..d2989caf96 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/abp.resourcemapping.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css index e5d20ea346..06f5063931 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/wwwroot/global-styles.css @@ -1 +1 @@ -/* Your Global Styles */ +/* Your Global Styles */ diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json index 0fb6f3a3b1..ba915d92d0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js index e2189c3c69..98822e49db 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css index e5d20ea346..06f5063931 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css @@ -1 +1 @@ -/* Your Global Styles */ +/* Your Global Styles */ diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.css index 3f73b78b9f..e768ff6ea8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.css @@ -1,3 +1,3 @@ -body { +body { } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.js index 46f089b9c7..a343764236 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.js @@ -1,3 +1,3 @@ -$(function () { +$(function () { abp.log.debug('Index.js initialized!'); }); \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json index a0f21d8d9c..c730655e7f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js index 122e8e926a..d2989caf96 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css index e5d20ea346..06f5063931 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/wwwroot/global-styles.css @@ -1 +1 @@ -/* Your Global Styles */ +/* Your Global Styles */ diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.css index b248b67c1b..7f8a925bc0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.css @@ -1,3 +1,3 @@ -body { +body { } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.js index a31bd7cc44..32b47c56fd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.js @@ -1,3 +1,3 @@ -$(function () { +$(function () { abp.log.debug('Index.js initialized!'); }); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/abp.resourcemapping.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/abp.resourcemapping.js index 122e8e926a..d2989caf96 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/abp.resourcemapping.js +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json index f6f012fcfb..cf1965742b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "App": { "SelfUrl": "https://localhost:44303" }, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css index e5d20ea346..06f5063931 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/wwwroot/global-styles.css @@ -1 +1 @@ -/* Your Global Styles */ +/* Your Global Styles */ diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json index 4c81233d9c..9214292fa9 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "RemoteServices": { "Default": { "BaseUrl": "https://localhost:44300" diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/xunit.runner.json b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/xunit.runner.json index 34b2fe2cdd..78c070e832 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/xunit.runner.json +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/xunit.runner.json @@ -1,3 +1,3 @@ -{ +{ "shadowCopy": false } \ No newline at end of file diff --git a/templates/console/src/MyCompanyName.MyProjectName/appsettings.json b/templates/console/src/MyCompanyName.MyProjectName/appsettings.json index d177980a92..0db3279e44 100644 --- a/templates/console/src/MyCompanyName.MyProjectName/appsettings.json +++ b/templates/console/src/MyCompanyName.MyProjectName/appsettings.json @@ -1,3 +1,3 @@ -{ +{ } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xsd +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/main.css b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/main.css index eb9395b846..d02eeeb1e2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/main.css +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/wwwroot/main.css @@ -1,4 +1,4 @@ -.spinner { +.spinner { width: 40px; height: 40px; display: block; diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xml index 00e1d9a1c1..86cee9e10c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xsd +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Pages/Index.razor.css b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Pages/Index.razor.css index abef246243..b154964e8a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Pages/Index.razor.css +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Pages/Index.razor.css @@ -1 +1 @@ -/* Write here your styles for the Index page */ \ No newline at end of file +/* Write here your styles for the Index page */ \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Properties/launchSettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Properties/launchSettings.json index 8f7d647b4b..e31f812c85 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Properties/launchSettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/blazor-global-styles.css b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/blazor-global-styles.css index 4f895ce71e..0d26cfc24f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/blazor-global-styles.css +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/blazor-global-styles.css @@ -1,4 +1,4 @@ -#blazor-error-ui { +#blazor-error-ui { background: lightyellow; bottom: 0; box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/global-styles.css b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/global-styles.css index b248b67c1b..7f8a925bc0 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/global-styles.css +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/wwwroot/global-styles.css @@ -1,3 +1,3 @@ -body { +body { } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Host.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json index 71506f734d..d471c92406 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json index b35a5997cf..d811a4e069 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "App": { "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,http://localhost:44307,https://localhost:44307" }, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json index b054d4c6bc..96994edbe8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js index e2189c3c69..98822e49db 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json index 29608e57a4..c2dd8c9bc2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "App": { "SelfUrl": "https://localhost:44301/", "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,http://localhost:44307,https://localhost:44307,https://localhost:44300" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json index a0f21d8d9c..c730655e7f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js index 122e8e926a..d2989caf96 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { }, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Properties/launchSettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Properties/launchSettings.json index 6b5081f583..cbc01dc0d2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Properties/launchSettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/abp.resourcemapping.js b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/abp.resourcemapping.js index 56d68b1b51..82b2d4b649 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/abp.resourcemapping.js +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/abp.resourcemapping.js @@ -1,4 +1,4 @@ -module.exports = { +module.exports = { aliases: { "@node_modules": "./node_modules", "@libs": "./wwwroot/libs" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json index f90c5b2d28..1e4bffa87c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Unified;Trusted_Connection=True" } diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application.Contracts/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Client/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Application.Tests/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.Domain.Tests/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json index 910a7d211e..34fc8431a3 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "RemoteServices": { "Default": { "BaseUrl": "https://localhost:44301/" diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml index be0de3a908..1715698ccd 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd index 3f3946e282..ffa6fc4b78 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.TestBase/FodyWeavers.xsd @@ -1,4 +1,4 @@ - + diff --git a/templates/wpf/src/MyCompanyName.MyProjectName/appsettings.json b/templates/wpf/src/MyCompanyName.MyProjectName/appsettings.json index d177980a92..0db3279e44 100644 --- a/templates/wpf/src/MyCompanyName.MyProjectName/appsettings.json +++ b/templates/wpf/src/MyCompanyName.MyProjectName/appsettings.json @@ -1,3 +1,3 @@ -{ +{ } diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Properties/launchSettings.json b/test/AbpPerfTest/AbpPerfTest.WithAbp/Properties/launchSettings.json index a5d1af3797..b46daec3d9 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/Properties/launchSettings.json +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Properties/launchSettings.json b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Properties/launchSettings.json index 74f1d25f0e..c33909051b 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Properties/launchSettings.json +++ b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, diff --git a/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json index 5359c021b7..e4fe25017e 100644 --- a/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json +++ b/test/DistEvents/DistDemoApp.EfCoreRabbitMq/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=DistEventsDemo;Trusted_Connection=True" }, diff --git a/test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json b/test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json index d8c528fe87..f9ee345d5a 100644 --- a/test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json +++ b/test/DistEvents/DistDemoApp.MongoDbKafka/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "Default": "mongodb://localhost:27018,localhost:27019,localhost:27020/DistEventsDemo" }, diff --git a/test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json b/test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json index d8c528fe87..f9ee345d5a 100644 --- a/test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json +++ b/test/DistEvents/DistDemoApp.MongoDbRebus/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "ConnectionStrings": { "Default": "mongodb://localhost:27018,localhost:27019,localhost:27020/DistEventsDemo" }, From f028c25b67545fcce189ece9973e830524b8a0d5 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 1 Oct 2021 15:29:33 +0800 Subject: [PATCH 50/55] Csharp proxy compatible ApplicationService suffix --- .../Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs index a34ec68387..5c57b19b5b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.Cli.ServiceProxying.CSharp private const string MethodPlaceholder = ""; private const string ClassName = ""; private const string ServiceInterface = ""; - private const string ServicePostfix = "AppService"; + private static string[] ServicePostfixes = {"AppService" , "ApplicationService"}; private const string DefaultNamespace = "ClientProxies"; private const string Namespace = ""; private const string AppServicePrefix = "Volo.Abp.Application.Services"; @@ -290,7 +290,7 @@ namespace Volo.Abp.Cli.ServiceProxying.CSharp } var serviceInterface = controllerApiDescription.Interfaces.Last(); - return serviceInterface.Type.EndsWith(ServicePostfix); + return ServicePostfixes.Any(x => serviceInterface.Type.EndsWith(x)); } private bool ShouldGenerateMethod(string appServiceTypeName, ActionApiDescriptionModel action) From 1a46b23c12c638aa81986fe9e8168f7a80f40098 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Fri, 1 Oct 2021 10:35:46 +0300 Subject: [PATCH 51/55] remove old provider array --- .../config/src/providers/route.provider.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts index 52369a9fc9..585b290482 100644 --- a/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts @@ -1,4 +1,4 @@ -import { eLayoutType, noop, RoutesService, SettingTabsService } from '@abp/ng.core'; +import { eLayoutType, noop, RoutesService } from '@abp/ng.core'; import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; import { APP_INITIALIZER, inject, InjectionToken } from '@angular/core'; import { debounceTime, map } from 'rxjs/operators'; @@ -6,16 +6,6 @@ import { eSettingManagementRouteNames } from '../enums/route-names'; import { SettingTabsService } from '../services/settings-tabs.service'; import { Observable } from 'rxjs'; -export const SETTING_MANAGEMENT_ROUTE_PROVIDERS = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, - { - provide: APP_INITIALIZER, - useFactory: hideRoutes, - deps: [RoutesService, SettingTabsService], - multi: true, - }, -]; - export function configureRoutes(routesService: RoutesService) { return () => { routesService.add([ From 13787cdafbce7e8dd118ffacda710e367c0b4e53 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 1 Oct 2021 16:20:55 +0800 Subject: [PATCH 52/55] Remove the custom method in HttpApi. --- .../Volo/Blogging/Files/FileUploadInputDto.cs | 5 +- .../Volo/Blogging/Files/IFileAppService.cs | 3 + .../Volo/Blogging/Files/FileAppService.cs | 51 ++++++++++++-- .../Volo/Blogging/Files/ImageFormatHelper.cs | 11 ++- .../BlogFilesClientProxy.Generated.cs | 9 +++ .../blogging-generate-proxy.json | 69 ++++++------------- .../Volo/Blogging/BlogFilesController.cs | 48 ++----------- .../Volo/Blogging/BloggingHttpApiModule.cs | 6 ++ .../Volo/Blogging/FileUploadResult.cs | 12 ---- .../Pages/Blogs/Posts/edit.js | 14 ++-- .../Pages/Blogs/Posts/new.js | 14 ++-- .../wwwroot/client-proxies/blogging-proxy.js | 12 +--- 12 files changed, 112 insertions(+), 142 deletions(-) delete mode 100644 modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/FileUploadResult.cs diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/FileUploadInputDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/FileUploadInputDto.cs index c0686835fd..b6c1a3546d 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/FileUploadInputDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/FileUploadInputDto.cs @@ -1,13 +1,14 @@ using System.ComponentModel.DataAnnotations; +using Volo.Abp.Content; namespace Volo.Blogging.Files { public class FileUploadInputDto { [Required] - public byte[] Bytes { get; set; } + public IRemoteStreamContent File { get; set; } [Required] public string Name { get; set; } } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/IFileAppService.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/IFileAppService.cs index a949c848cd..b81b687536 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/IFileAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/IFileAppService.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.Abp.Content; namespace Volo.Blogging.Files { @@ -7,6 +8,8 @@ namespace Volo.Blogging.Files { Task GetAsync(string name); + Task GetFileAsync(string name); + Task CreateAsync(FileUploadInputDto input); } } diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs index e7cc7047e0..5bb488106c 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs @@ -1,10 +1,12 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.IO; +using System.Net.Mime; using System.Threading.Tasks; -using Microsoft.Extensions.Options; using Volo.Abp; using Volo.Abp.BlobStoring; +using Volo.Abp.Content; using Volo.Abp.Validation; using Volo.Blogging.Areas.Blog.Helpers; @@ -30,26 +32,61 @@ namespace Volo.Blogging.Files }; } + public virtual async Task GetFileAsync(string name) + { + var fileStream = await BlobContainer.GetAsync(name); + return new RemoteStreamContent(fileStream, name, GetByExtension(Path.GetExtension(name)), disposeStream: true); + } + + private static string GetByExtension(string extension) + { + extension = extension.RemovePreFix(".").ToLowerInvariant(); + + switch (extension) + { + case "png": + return "image/png"; + case "gif": + return "image/gif"; + case "jpg": + case "jpeg": + return "image/jpeg"; + + //TODO: Add other extensions too.. + + default: + return "application/octet-stream"; + } + } + public virtual async Task CreateAsync(FileUploadInputDto input) { - if (input.Bytes.IsNullOrEmpty()) + if (input.File == null) { - ThrowValidationException("Bytes of file can not be null or empty!", "Bytes"); + ThrowValidationException("Bytes of file can not be null or empty!", nameof(input.File)); } - if (input.Bytes.Length > BloggingWebConsts.FileUploading.MaxFileSize) + if (input.File.ContentLength > BloggingWebConsts.FileUploading.MaxFileSize) { throw new UserFriendlyException($"File exceeds the maximum upload size ({BloggingWebConsts.FileUploading.MaxFileSizeAsMegabytes} MB)!"); } - if (!ImageFormatHelper.IsValidImage(input.Bytes, FileUploadConsts.AllowedImageUploadFormats)) + var position = input.File.GetStream().Position; + + if (!ImageFormatHelper.IsValidImage(input.File.GetStream(), FileUploadConsts.AllowedImageUploadFormats)) { throw new UserFriendlyException("Invalid image format!"); } + // IsValidImage may change the position of the stream + if (input.File.GetStream().CanSeek) + { + input.File.GetStream().Position = position; + } + var uniqueFileName = GenerateUniqueFileName(Path.GetExtension(input.Name)); - await BlobContainer.SaveAsync(uniqueFileName, input.Bytes); + await BlobContainer.SaveAsync(uniqueFileName, input.File.GetStream()); return new FileUploadOutputDto { diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs index 9afa5da07f..6a9521664d 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs @@ -7,20 +7,17 @@ namespace Volo.Blogging.Areas.Blog.Helpers { public class ImageFormatHelper { - public static ImageFormat GetImageRawFormat(byte[] fileBytes) + public static ImageFormat GetImageRawFormat(Stream stream) { - using (var memoryStream = new MemoryStream(fileBytes)) - { - return System.Drawing.Image.FromStream(memoryStream).RawFormat; - } + return System.Drawing.Image.FromStream(stream).RawFormat; } - public static bool IsValidImage(byte[] fileBytes, ICollection validFormats) + public static bool IsValidImage(Stream stream, ICollection validFormats) { // System.Drawing only works on windows => https://docs.microsoft.com/en-us/dotnet/api/system.drawing.image?view=net-5.0#remarks if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - var imageFormat = GetImageRawFormat(fileBytes); + var imageFormat = GetImageRawFormat(stream); return validFormats.Contains(imageFormat); } diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/BlogFilesClientProxy.Generated.cs b/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/BlogFilesClientProxy.Generated.cs index c3188daf7e..e9b3880474 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/BlogFilesClientProxy.Generated.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/BlogFilesClientProxy.Generated.cs @@ -7,6 +7,7 @@ using Volo.Abp.Http.Modeling; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; using Volo.Blogging.Files; +using Volo.Abp.Content; // ReSharper disable once CheckNamespace namespace Volo.Blogging.ClientProxies @@ -23,6 +24,14 @@ namespace Volo.Blogging.ClientProxies }); } + public virtual async Task GetFileAsync(string name) + { + return await RequestAsync(nameof(GetFileAsync), new ClientProxyRequestTypeValue + { + { typeof(string), name } + }); + } + public virtual async Task CreateAsync(FileUploadInputDto input) { return await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/blogging-generate-proxy.json b/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/blogging-generate-proxy.json index 3b2916d49e..7e4ba7ef13 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/blogging-generate-proxy.json +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/ClientProxies/blogging-generate-proxy.json @@ -51,9 +51,9 @@ "allowAnonymous": null, "implementFrom": "Volo.Blogging.Files.IFileAppService" }, - "GetForWebAsyncByName": { - "uniqueName": "GetForWebAsyncByName", - "name": "GetForWebAsync", + "GetFileAsyncByName": { + "uniqueName": "GetFileAsyncByName", + "name": "GetFileAsync", "httpMethod": "GET", "url": "api/blogging/files/www/{name}", "supportedVersions": [], @@ -82,17 +82,17 @@ } ], "returnValue": { - "type": "Microsoft.AspNetCore.Mvc.FileResult", - "typeSimple": "Microsoft.AspNetCore.Mvc.FileResult" + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" }, "allowAnonymous": null, - "implementFrom": "Volo.Blogging.BlogFilesController" + "implementFrom": "Volo.Blogging.Files.IFileAppService" }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", "name": "CreateAsync", "httpMethod": "POST", - "url": "api/blogging/files", + "url": "api/blogging/files/images/upload", "supportedVersions": [], "parametersOnMethod": [ { @@ -107,60 +107,35 @@ "parameters": [ { "nameOnMethod": "input", - "name": "input", + "name": "File", "jsonName": null, - "type": "Volo.Blogging.Files.FileUploadInputDto", - "typeSimple": "Volo.Blogging.Files.FileUploadInputDto", + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Blogging.Files.FileUploadOutputDto", - "typeSimple": "Volo.Blogging.Files.FileUploadOutputDto" - }, - "allowAnonymous": null, - "implementFrom": "Volo.Blogging.Files.IFileAppService" - }, - "UploadImageByFile": { - "uniqueName": "UploadImageByFile", - "name": "UploadImage", - "httpMethod": "POST", - "url": "api/blogging/files/images/upload", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "file", - "typeAsString": "Microsoft.AspNetCore.Http.IFormFile, Microsoft.AspNetCore.Http.Features", - "type": "Microsoft.AspNetCore.Http.IFormFile", - "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "bindingSourceId": "FormFile", + "descriptorName": "input" + }, { - "nameOnMethod": "file", - "name": "file", + "nameOnMethod": "input", + "name": "Name", "jsonName": null, - "type": "Microsoft.AspNetCore.Http.IFormFile", - "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Microsoft.AspNetCore.Mvc.JsonResult", - "typeSimple": "Microsoft.AspNetCore.Mvc.JsonResult" + "type": "Volo.Blogging.Files.FileUploadOutputDto", + "typeSimple": "Volo.Blogging.Files.FileUploadOutputDto" }, "allowAnonymous": null, - "implementFrom": "Volo.Blogging.BlogFilesController" + "implementFrom": "Volo.Blogging.Files.IFileAppService" } } }, diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs index f71a0af6c2..12bedc3e6c 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs @@ -1,11 +1,8 @@ -using System.IO; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; +using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Http; -using Volo.Blogging.Areas.Blog.Models; +using Volo.Abp.Content; using Volo.Blogging.Files; namespace Volo.Blogging @@ -31,51 +28,16 @@ namespace Volo.Blogging [HttpGet] [Route("www/{name}")] - public async Task GetForWebAsync(string name) //TODO: output cache would be good + public async Task GetFileAsync(string name) { - var file = await _fileAppService.GetAsync(name); - return File( - file.Bytes, - MimeTypes.GetByExtension(Path.GetExtension(name)) - ); + return await _fileAppService.GetFileAsync(name); } [HttpPost] + [Route("images/upload")] public Task CreateAsync(FileUploadInputDto input) { return _fileAppService.CreateAsync(input); } - - [HttpPost] - [Route("images/upload")] - public async Task UploadImage(IFormFile file) - { - //TODO: localize exception messages - - if (file == null) - { - throw new UserFriendlyException("No file found!"); - } - - if (file.Length <= 0) - { - throw new UserFriendlyException("File is empty!"); - } - - if (!file.ContentType.Contains("image")) - { - throw new UserFriendlyException("Not a valid image!"); - } - - var output = await _fileAppService.CreateAsync( - new FileUploadInputDto - { - Bytes = file.GetAllBytes(), - Name = file.FileName - } - ); - - return Json(new FileUploadResult(output.WebUrl)); - } } } diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BloggingHttpApiModule.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BloggingHttpApiModule.cs index 3365063299..d7702f300b 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BloggingHttpApiModule.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BloggingHttpApiModule.cs @@ -4,6 +4,7 @@ using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Blogging.Localization; using Microsoft.Extensions.DependencyInjection; +using Volo.Blogging.Files; namespace Volo.Blogging { @@ -28,6 +29,11 @@ namespace Volo.Blogging .Get() .AddBaseTypes(typeof(AbpUiResource)); }); + + Configure(options => + { + options.ConventionalControllers.FormBodyBindingIgnoredTypes.Add(typeof(FileUploadInputDto)); + }); } } } diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/FileUploadResult.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/FileUploadResult.cs deleted file mode 100644 index 9cc491ed37..0000000000 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/FileUploadResult.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Volo.Blogging.Areas.Blog.Models -{ - public class FileUploadResult - { - public string FileUrl { get; set; } - - public FileUploadResult(string fileUrl) - { - FileUrl = fileUrl; - } - } -} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js index f90bd744cd..b5223f6790 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js @@ -13,15 +13,15 @@ $(function () { var $postFormSubmitButton = $('#PostFormSubmitButton'); var setCoverImage = function (file) { - $postCoverImage.val(file.fileUrl); - $coverImage.attr('src', file.fileUrl); + $postCoverImage.val(file.webUrl); + $coverImage.attr('src', file.webUrl); $postFormSubmitButton.removeAttr('disabled'); }; var uploadCoverImage = function (file) { var formData = new FormData(); formData.append('file', file); - + formData.append('name', file.name); $.ajax({ type: 'POST', url: '/api/blogging/files/images/upload', @@ -63,7 +63,7 @@ $(function () { var uploadImage = function (file, callbackFn) { var formData = new FormData(); formData.append('file', file); - + formData.append('name', file.name); $.ajax({ type: 'POST', url: '/api/blogging/files/images/upload', @@ -71,7 +71,7 @@ $(function () { contentType: false, processData: false, success: function (response) { - callbackFn(response.fileUrl); + callbackFn(response.webUrl); }, }); }; @@ -87,8 +87,8 @@ $(function () { addImageBlobHook: function (blob, callback, source) { var imageAltText = blob.name; - uploadImage(blob, function (fileUrl) { - callback(fileUrl, imageAltText); + uploadImage(blob, function (webUrl) { + callback(webUrl, imageAltText); }); }, }, diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js index 48031bd8bc..c793a5312b 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js @@ -13,8 +13,8 @@ $(function () { var $postFormSubmitButton = $('#PostFormSubmitButton'); var setCoverImage = function (file) { - $postCoverImage.val(file.fileUrl); - $coverImage.attr('src', file.fileUrl); + $postCoverImage.val(file.webUrl); + $coverImage.attr('src', file.webUrl); $coverImage.show(); $postFormSubmitButton.removeAttr('disabled'); }; @@ -22,7 +22,7 @@ $(function () { var uploadCoverImage = function (file) { var formData = new FormData(); formData.append('file', file); - + formData.append('name', file.name); $.ajax({ type: 'POST', url: '/api/blogging/files/images/upload', @@ -47,7 +47,7 @@ $(function () { var uploadImage = function (file, callbackFn) { var formData = new FormData(); formData.append('file', file); - + formData.append('name', file.name); $.ajax({ type: 'POST', url: '/api/blogging/files/images/upload', @@ -55,7 +55,7 @@ $(function () { contentType: false, processData: false, success: function (response) { - callbackFn(response.fileUrl); + callbackFn(response.webUrl); }, }); }; @@ -70,8 +70,8 @@ $(function () { addImageBlobHook: function (blob, callback, source) { var imageAltText = blob.name; - uploadImage(blob, function (fileUrl) { - callback(fileUrl, imageAltText); + uploadImage(blob, function (webUrl) { + callback(webUrl, imageAltText); }); }, }, diff --git a/modules/blogging/src/Volo.Blogging.Web/wwwroot/client-proxies/blogging-proxy.js b/modules/blogging/src/Volo.Blogging.Web/wwwroot/client-proxies/blogging-proxy.js index 3b0905a0d5..c2872c74bf 100644 --- a/modules/blogging/src/Volo.Blogging.Web/wwwroot/client-proxies/blogging-proxy.js +++ b/modules/blogging/src/Volo.Blogging.Web/wwwroot/client-proxies/blogging-proxy.js @@ -18,7 +18,7 @@ }, ajaxParams)); }; - volo.blogging.blogFiles.getForWeb = function(name, ajaxParams) { + volo.blogging.blogFiles.getFile = function(name, ajaxParams) { return abp.ajax($.extend(true, { url: abp.appPath + 'api/blogging/files/www/' + name + '', type: 'GET' @@ -27,15 +27,7 @@ volo.blogging.blogFiles.create = function(input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/blogging/files', - type: 'POST', - data: JSON.stringify(input) - }, ajaxParams)); - }; - - volo.blogging.blogFiles.uploadImage = function(file, ajaxParams) { - return abp.ajax($.extend(true, { - url: abp.appPath + 'api/blogging/files/images/upload', + url: abp.appPath + 'api/blogging/files/images/upload' + abp.utils.buildQueryString([{ name: 'name', value: input.name }]) + '', type: 'POST' }, ajaxParams)); }; From e90baa230145cbb0beb13daf82b8d0014f68684a Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 1 Oct 2021 17:43:50 +0800 Subject: [PATCH 53/55] Introduce AbpControllerBase to create API Controllers --- .../Abp/MultiTenancy/AbpTenantController.cs | 3 +- .../Abp/AspNetCore/Mvc/AbpControllerBase.cs | 105 ++++++++++++++++++ .../AbpApplicationConfigurationController.cs | 2 +- .../Volo/Abp/Account/AccountController.cs | 2 +- .../Account/Controllers/AccountController.cs | 2 +- .../Admin/BlogManagementController.cs | 2 +- .../Volo/Blogging/BlogFilesController.cs | 2 +- .../Volo/Blogging/BlogsController.cs | 2 +- .../Volo/Blogging/CommentsController.cs | 2 +- .../Volo/Blogging/PostsController.cs | 2 +- .../Volo/Blogging/TagsController.cs | 2 +- .../CmsKit/Admin/CmsKitAdminController.cs | 2 +- .../Volo/CmsKit/CmsKitControllerBase.cs | 2 +- .../Docs/Admin/DocumentsAdminController.cs | 2 +- .../Docs/Admin/ProjectsAdminController.cs | 2 +- .../Docs/Projects/DocsProjectController.cs | 2 +- .../FeatureManagement/FeaturesController.cs | 2 +- .../Abp/Identity/IdentityRoleController.cs | 2 +- .../Abp/Identity/IdentityUserController.cs | 2 +- .../Identity/IdentityUserLookupController.cs | 2 +- .../Volo/Abp/Identity/ProfileController.cs | 2 +- .../PermissionsController.cs | 2 +- .../EmailSettingsController.cs | 2 +- .../Abp/TenantManagement/TenantController.cs | 2 +- .../MyProjectNameController.cs | 2 +- 25 files changed, 130 insertions(+), 24 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpControllerBase.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs index 712a768137..c0dfeecfc1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Pages/Abp/MultiTenancy/AbpTenantController.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.AspNetCore; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.MultiTenancy; @@ -10,7 +11,7 @@ namespace Pages.Abp.MultiTenancy [Area("abp")] [RemoteService(Name = "abp")] [Route("api/abp/multi-tenancy")] - public class AbpTenantController : AbpController, IAbpTenantAppService + public class AbpTenantController : AbpControllerBase, IAbpTenantAppService { private readonly IAbpTenantAppService _abpTenantAppService; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpControllerBase.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpControllerBase.cs new file mode 100644 index 0000000000..20ad62991f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpControllerBase.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Aspects; +using Volo.Abp.AspNetCore.Mvc.Validation; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Features; +using Volo.Abp.Guids; +using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Timing; +using Volo.Abp.Uow; +using Volo.Abp.Users; + +namespace Volo.Abp.AspNetCore.Mvc +{ + public abstract class AbpControllerBase : ControllerBase, IAvoidDuplicateCrossCuttingConcerns + { + public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + + protected IUnitOfWorkManager UnitOfWorkManager => LazyServiceProvider.LazyGetRequiredService(); + + protected Type ObjectMapperContext { get; set; } + protected IObjectMapper ObjectMapper => LazyServiceProvider.LazyGetService(provider => + ObjectMapperContext == null + ? provider.GetRequiredService() + : (IObjectMapper) provider.GetRequiredService(typeof(IObjectMapper<>).MakeGenericType(ObjectMapperContext))); + + protected IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetService(SimpleGuidGenerator.Instance); + + protected ILoggerFactory LoggerFactory => LazyServiceProvider.LazyGetRequiredService(); + + protected ILogger Logger => LazyServiceProvider.LazyGetService(provider => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance); + + protected ICurrentUser CurrentUser => LazyServiceProvider.LazyGetRequiredService(); + + protected ICurrentTenant CurrentTenant => LazyServiceProvider.LazyGetRequiredService(); + + protected IAuthorizationService AuthorizationService => LazyServiceProvider.LazyGetRequiredService(); + + protected IUnitOfWork CurrentUnitOfWork => UnitOfWorkManager?.Current; + + protected IClock Clock => LazyServiceProvider.LazyGetRequiredService(); + + protected IModelStateValidator ModelValidator => LazyServiceProvider.LazyGetRequiredService(); + + protected IFeatureChecker FeatureChecker => LazyServiceProvider.LazyGetRequiredService(); + + protected IStringLocalizerFactory StringLocalizerFactory => LazyServiceProvider.LazyGetRequiredService(); + + protected IStringLocalizer L + { + get + { + if (_localizer == null) + { + _localizer = CreateLocalizer(); + } + + return _localizer; + } + } + private IStringLocalizer _localizer; + + protected Type LocalizationResource + { + get => _localizationResource; + set + { + _localizationResource = value; + _localizer = null; + } + } + private Type _localizationResource = typeof(DefaultResource); + + public List AppliedCrossCuttingConcerns { get; } = new List(); + + protected virtual IStringLocalizer CreateLocalizer() + { + if (LocalizationResource != null) + { + return StringLocalizerFactory.Create(LocalizationResource); + } + + var localizer = StringLocalizerFactory.CreateDefaultOrNull(); + if (localizer == null) + { + throw new AbpException($"Set {nameof(LocalizationResource)} or define the default localization resource type (by configuring the {nameof(AbpLocalizationOptions)}.{nameof(AbpLocalizationOptions.DefaultResourceType)}) to be able to use the {nameof(L)} object!"); + } + + return localizer; + } + + protected virtual void ValidateModel() + { + ModelValidator?.Validate(ModelState); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs index 89282110b9..4947008411 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationController.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations [Area("abp")] [RemoteService(Name = "abp")] [Route("api/abp/application-configuration")] - public class AbpApplicationConfigurationController : AbpController, IAbpApplicationConfigurationAppService + public class AbpApplicationConfigurationController : AbpControllerBase, IAbpApplicationConfigurationAppService { private readonly IAbpApplicationConfigurationAppService _applicationConfigurationAppService; private readonly IAbpAntiForgeryManager _antiForgeryManager; diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/Volo/Abp/Account/AccountController.cs b/modules/account/src/Volo.Abp.Account.HttpApi/Volo/Abp/Account/AccountController.cs index d1f22587e8..13910ac6ab 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi/Volo/Abp/Account/AccountController.cs +++ b/modules/account/src/Volo.Abp.Account.HttpApi/Volo/Abp/Account/AccountController.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.Account [RemoteService(Name = AccountRemoteServiceConsts.RemoteServiceName)] [Area("account")] [Route("api/account")] - public class AccountController : AbpController, IAccountAppService + public class AccountController : AbpControllerBase, IAccountAppService { protected IAccountAppService AccountAppService { get; } diff --git a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs index ec9f26179d..dd8a853350 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Areas/Account/Controllers/AccountController.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Account.Web.Areas.Account.Controllers [ControllerName("Login")] [Area("account")] [Route("api/account")] - public class AccountController : AbpController + public class AccountController : AbpControllerBase { protected SignInManager SignInManager { get; } protected IdentityUserManager UserManager { get; } diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs index ce6457dcc7..4ee705551e 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo/Blogging/Admin/BlogManagementController.cs @@ -13,7 +13,7 @@ namespace Volo.Blogging.Admin [RemoteService(Name = BloggingAdminRemoteServiceConsts.RemoteServiceName)] [Area("bloggingAdmin")] [Route("api/blogging/blogs/admin")] - public class BlogManagementController : AbpController, IBlogManagementAppService + public class BlogManagementController : AbpControllerBase, IBlogManagementAppService { private readonly IBlogManagementAppService _blogManagementAppService; diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs index 12bedc3e6c..898d3fe09b 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogFilesController.cs @@ -10,7 +10,7 @@ namespace Volo.Blogging [RemoteService(Name = BloggingRemoteServiceConsts.RemoteServiceName)] [Area("blogging")] [Route("api/blogging/files")] - public class BlogFilesController : AbpController, IFileAppService + public class BlogFilesController : AbpControllerBase, IFileAppService { private readonly IFileAppService _fileAppService; diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs index 9ef141b3de..af46d0784a 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/BlogsController.cs @@ -12,7 +12,7 @@ namespace Volo.Blogging [RemoteService(Name = BloggingRemoteServiceConsts.RemoteServiceName)] [Area("blogging")] [Route("api/blogging/blogs")] - public class BlogsController : AbpController, IBlogAppService + public class BlogsController : AbpControllerBase, IBlogAppService { private readonly IBlogAppService _blogAppService; diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/CommentsController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/CommentsController.cs index caea1cfa2f..73d6a115f4 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/CommentsController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/CommentsController.cs @@ -12,7 +12,7 @@ namespace Volo.Blogging [RemoteService(Name = BloggingRemoteServiceConsts.RemoteServiceName)] [Area("blogging")] [Route("api/blogging/comments")] - public class CommentsController : AbpController, ICommentAppService + public class CommentsController : AbpControllerBase, ICommentAppService { private readonly ICommentAppService _commentAppService; diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs index f3d67af815..66f8f7afab 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs @@ -11,7 +11,7 @@ namespace Volo.Blogging [RemoteService(Name = BloggingRemoteServiceConsts.RemoteServiceName)] [Area("blogging")] [Route("api/blogging/posts")] - public class PostsController : AbpController, IPostAppService + public class PostsController : AbpControllerBase, IPostAppService { private readonly IPostAppService _postAppService; diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs index 4c2c34db44..262e5ac801 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs @@ -12,7 +12,7 @@ namespace Volo.Blogging [RemoteService(Name = BloggingRemoteServiceConsts.RemoteServiceName)] [Area("blogging")] [Route("api/blogging/tags")] - public class TagsController : AbpController, ITagAppService + public class TagsController : AbpControllerBase, ITagAppService { private readonly ITagAppService _tagAppService; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminController.cs index f4303c0245..fc89a0c63b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminController.cs @@ -3,7 +3,7 @@ using Volo.CmsKit.Localization; namespace Volo.CmsKit.Admin { - public abstract class CmsKitAdminController : AbpController + public abstract class CmsKitAdminController : AbpControllerBase { protected CmsKitAdminController() { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitControllerBase.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitControllerBase.cs index 70a68c7611..4ac5d5423b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitControllerBase.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/CmsKitControllerBase.cs @@ -3,7 +3,7 @@ using Volo.CmsKit.Localization; namespace Volo.CmsKit { - public abstract class CmsKitControllerBase : AbpController + public abstract class CmsKitControllerBase : AbpControllerBase { protected CmsKitControllerBase() { diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs index 88b1d99d1d..f08c8e8f71 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs @@ -13,7 +13,7 @@ namespace Volo.Docs.Admin [Area("docs-admin")] [ControllerName("DocumentsAdmin")] [Route("api/docs/admin/documents")] - public class DocumentsAdminController : AbpController, IDocumentAdminAppService + public class DocumentsAdminController : AbpControllerBase, IDocumentAdminAppService { private readonly IDocumentAdminAppService _documentAdminAppService; diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs index 2e09342175..968e60adb7 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs @@ -12,7 +12,7 @@ namespace Volo.Docs.Admin [Area("docs-admin")] [ControllerName("ProjectsAdmin")] [Route("api/docs/admin/projects")] - public class ProjectsAdminController : AbpController, IProjectAdminAppService + public class ProjectsAdminController : AbpControllerBase, IProjectAdminAppService { private readonly IProjectAdminAppService _projectAppService; diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs index 602cc970dd..24d9a51491 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs +++ b/modules/docs/src/Volo.Docs.HttpApi/Volo/Docs/Projects/DocsProjectController.cs @@ -11,7 +11,7 @@ namespace Volo.Docs.Projects [Area("docs")] [ControllerName("Project")] [Route("api/docs/projects")] - public class DocsProjectController : AbpController, IProjectAppService + public class DocsProjectController : AbpControllerBase, IProjectAppService { protected IProjectAppService ProjectAppService { get; } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs index c7dff4d8a3..4a70fefdd9 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/FeaturesController.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.FeatureManagement [RemoteService(Name = FeatureManagementRemoteServiceConsts.RemoteServiceName)] [Area("featureManagement")] [Route("api/feature-management/features")] - public class FeaturesController : AbpController, IFeatureAppService + public class FeaturesController : AbpControllerBase, IFeatureAppService { protected IFeatureAppService FeatureAppService { get; } diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs index 150256badd..38d5f68a41 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityRoleController.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.Identity [Area("identity")] [ControllerName("Role")] [Route("api/identity/roles")] - public class IdentityRoleController : AbpController, IIdentityRoleAppService + public class IdentityRoleController : AbpControllerBase, IIdentityRoleAppService { protected IIdentityRoleAppService RoleAppService { get; } diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs index c02ea23e9f..7de9de2826 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.Identity [Area("identity")] [ControllerName("User")] [Route("api/identity/users")] - public class IdentityUserController : AbpController, IIdentityUserAppService + public class IdentityUserController : AbpControllerBase, IIdentityUserAppService { protected IIdentityUserAppService UserAppService { get; } diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserLookupController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserLookupController.cs index 75fc20a520..d0676ffb7d 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserLookupController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserLookupController.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Identity [Area("identity")] [ControllerName("UserLookup")] [Route("api/identity/users/lookup")] - public class IdentityUserLookupController : AbpController, IIdentityUserLookupAppService + public class IdentityUserLookupController : AbpControllerBase, IIdentityUserLookupAppService { protected IIdentityUserLookupAppService LookupAppService { get; } diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs index 91b1bc8325..f16c780d93 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/ProfileController.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.Identity [Area("identity")] [ControllerName("Profile")] [Route("/api/identity/my-profile")] - public class ProfileController : AbpController, IProfileAppService + public class ProfileController : AbpControllerBase, IProfileAppService { protected IProfileAppService ProfileAppService { get; } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs index bb9db51f98..a9a6096053 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.PermissionManagement [RemoteService(Name = PermissionManagementRemoteServiceConsts.RemoteServiceName)] [Area("permissionManagement")] [Route("api/permission-management/permissions")] - public class PermissionsController : AbpController, IPermissionAppService + public class PermissionsController : AbpControllerBase, IPermissionAppService { protected IPermissionAppService PermissionAppService { get; } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/EmailSettingsController.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/EmailSettingsController.cs index 7ddb284c64..5e01f5b984 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/EmailSettingsController.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/EmailSettingsController.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.SettingManagement [RemoteService(Name = SettingManagementRemoteServiceConsts.RemoteServiceName)] [Area("settingManagement")] [Route("api/setting-management/emailing")] - public class EmailSettingsController : AbpController, IEmailSettingsAppService + public class EmailSettingsController : AbpControllerBase, IEmailSettingsAppService { private readonly IEmailSettingsAppService _emailSettingsAppService; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs index 317e7e62d0..9c5062f96e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.TenantManagement [RemoteService(Name = TenantManagementRemoteServiceConsts.RemoteServiceName)] [Area("multi-tenancy")] [Route("api/multi-tenancy/tenants")] - public class TenantController : AbpController, ITenantAppService //TODO: Throws exception on validation if we inherit from Controller + public class TenantController : AbpControllerBase, ITenantAppService //TODO: Throws exception on validation if we inherit from Controller { protected ITenantAppService TenantAppService { get; } diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameController.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameController.cs index 1dd9a6c8b2..699cc3df56 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameController.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameController.cs @@ -3,7 +3,7 @@ using Volo.Abp.AspNetCore.Mvc; namespace MyCompanyName.MyProjectName { - public abstract class MyProjectNameController : AbpController + public abstract class MyProjectNameController : AbpControllerBase { protected MyProjectNameController() { From 6d4340d0ca785f35f02b0f8609be6bb3e15993f5 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 1 Oct 2021 17:50:26 +0800 Subject: [PATCH 54/55] Update Abp-5_0.md --- docs/en/Migration-Guides/Abp-5_0.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/en/Migration-Guides/Abp-5_0.md b/docs/en/Migration-Guides/Abp-5_0.md index e36e5269cb..a41a794ed6 100644 --- a/docs/en/Migration-Guides/Abp-5_0.md +++ b/docs/en/Migration-Guides/Abp-5_0.md @@ -1,5 +1,33 @@ # ABP Framework v4.x to v5.0 Migration Guide +## IdentityUser + +We added an `IsActive(bool)` property to `IdentityUser` to [control whether it is available](https://github.com/abpframework/abp/pull/10185). **Please set it to `true` of the old user after the upgrade.** + +For EF Core you can change `defaultValue` to `true` in the migration class: +```cs +public partial class AddIsActiveToIdentityUser : Migration +{ + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsActive", + table: "AbpUsers", + type: "bit", + nullable: false, + defaultValue: true); // Default is false. + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsActive", + table: "AbpUsers"); + } +} +``` + + ## MongoDB ABP Framework will serialize the datetime based on [AbpClockOptions](https://docs.abp.io/en/abp/latest/Timing#clock-options) start from 5.0, before `DateTime` values in MongoDB are [always saved as UTC](https://mongodb.github.io/mongo-csharp-driver/2.13/reference/bson/mapping/#datetime-serialization-options). From 72ab2882c51d904bf5f4b5d50694459e465c08af Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 1 Oct 2021 17:53:02 +0800 Subject: [PATCH 55/55] Update MyProjectNameController.cs --- .../Controllers/MyProjectNameController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs index 7fff0ecbc5..346f27f7a3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/Controllers/MyProjectNameController.cs @@ -5,7 +5,7 @@ namespace MyCompanyName.MyProjectName.Controllers { /* Inherit your controllers from this class. */ - public abstract class MyProjectNameController : AbpController + public abstract class MyProjectNameController : AbpControllerBase { protected MyProjectNameController() {