Exemple #1
0
        protected async Task DeleteItemIfAsync(IMessage message, Func <T, bool> predicate)
        {
            async Task DoAsync()
            {
                var lockId = GetLockId(message);
                await LockProvider.TryUsingAsync(lockId,
                                                 async token =>
                {
                    var item = await LoadItemAsync(message).ConfigureAwait(false);

                    if (item.Entity == null)
                    {
                        return;
                    }

                    if (!item.IsNew)
                    {
                        if (predicate(item.Entity))
                        {
                            await DeleteAsync(item.Id,
                                              message,
                                              CreateIdentifierItem).ConfigureAwait(false);
                        }
                    }
                }, cancellationToken : CancellationToken.None).ConfigureAwait(false);
            }

            await LockProvider.TryUsingAsync(GetCacheLockId(), async() => await DoAsync().ConfigureAwait(false), timeUntilExpires : null, cancellationToken : CancellationToken.None).ConfigureAwait(false);
        }
Exemple #2
0
        protected async Task LoadAndSaveOnlyExistingAsync(IMessage message, Action <T> setValues = null)
        {
            var lockId = GetLockId(message);

            await LockProvider.TryUsingAsync(lockId,
                                             async token =>
            {
                var item   = await LoadItemAsync(message).ConfigureAwait(false);
                var entity = item.Entity;

                if (item.IsNew)
                {
                    Logger.LogTrace("Skipping new Item");
                }
                else
                {
                    if (entity == null)
                    {
                        Logger.LogTrace("No Valid Entity Loaded");
                    }
                    else
                    {
                        setValues?.Invoke(entity);

                        //  await SaveItemAsync(item, message, state);
                        await SaveItemAsync(item, message).ConfigureAwait(false);
                    }
                }
            }, cancellationToken : CancellationToken.None).ConfigureAwait(false);
        }
Exemple #3
0
        private string GetLockId(IMessage evnt)
        {
            var lockId = $"{EntityTypeKey}-{CreateLockId(evnt)}";

            if (string.IsNullOrEmpty(lockId))
            {
                lockId = Guid.NewGuid().ToString();
            }

            return(lockId);
        }
Exemple #4
0
        private async Task SaveItemAsync(EntityDescriptor <T> item, IMessage domainEvent)
        {
            async Task DoAsync()
            {
                if (Context.IsLiveProcessing)
                {
                    await SaveAsync(item, domainEvent, CreateIdentifierItem(item.Entity)).ConfigureAwait(false);
                }
                else
                {
                    await SaveAsync(item, domainEvent, null).ConfigureAwait(false);
                }

                await Cache.RemoveByPrefixAsync(EntityTypeKey).ConfigureAwait(false);
            }

            await LockProvider.TryUsingAsync(GetCacheLockId(), async() => await DoAsync().ConfigureAwait(false), timeUntilExpires : null, cancellationToken : CancellationToken.None).ConfigureAwait(false);
        }
Exemple #5
0
        protected async Task DeleteItemAsync(IMessage message)
        {
            async Task DoAsync()
            {
                var item = await LoadItemAsync(message).ConfigureAwait(false);

                if (item.Entity == null)
                {
                    return;
                }

                if (!item.IsNew)
                {
                    await base.DeleteAsync(item.Id,
                                           message,
                                           CreateIdentifierItem).ConfigureAwait(false);

                    //,state: state);
                }
            }

            await LockProvider.TryUsingAsync(GetCacheLockId(), async() => await DoAsync().ConfigureAwait(false), timeUntilExpires : null, cancellationToken : CancellationToken.None).ConfigureAwait(false);
        }
Exemple #6
0
 protected abstract Task <EntityDescriptor <T> > LoadItemAsync(IMessage message);
Exemple #7
0
 protected abstract string CreateLockId(IMessage message);