Example #1
0
        public GetMonthlyExpenseQueryTests()
        {
            context = InMemoryEfCoreContextFactory.Create();

            contextAdapterMock = Substitute.For <IContextAdapter>();
            contextAdapterMock.Context.Returns(context);
        }
        public GetIncludedAccountBalanceSummaryTests()
        {
            context = InMemoryEfCoreContextFactory.Create();

            contextAdapter = Substitute.For <IContextAdapter>();
            contextAdapter.Context.Returns(context);
        }
Example #3
0
        public GetTotalEndOfMonthBalanceQueryTests()
        {
            context = InMemoryEfCoreContextFactory.Create();

            contextAdapterMock = Substitute.For <IContextAdapter>();
            contextAdapterMock.Context.Returns(context);
        }
        public async Task InnerInsert(IEnumerable <TSource> source, IContextAdapter contextAdapter)
        {
            if (source == null)
            {
                return;
            }

            var extractor = _extractor.Compile();
            var s         = source.Where(o => extractor(o) != null).ToArray();

            if (!s.Any())
            {
                return;
            }

            var copy = GetCopyPk(contextAdapter);

            foreach (var parent in s)
            {
                foreach (var child in extractor(parent))
                {
                    copy.Invoke(parent, child);
                }
            }

            await contextAdapter.BulkInsertCascade(s.SelectMany(extractor).Distinct().ToArray(), _cascades);
        }
Example #5
0
        public static async Task BulkInsertWithIdGeneration <T>(this IContextAdapter contextAdapter, IList <T> forSave)
            where T : class
        {
            if (forSave == null)
            {
                return;
            }

            var pk = contextAdapter.GetPk <T>();

            if (!pk.IsIdentity)
            {
                await contextAdapter.BulkInsert(forSave, true);
            }
            else
            {
                var isNew      = ExpressHelper.IsPropertyEmpty <T>(pk.PropertyName, pk.Type).Compile();
                var newObjects = forSave.Where(isNew).ToArray();
                if (!newObjects.Any())
                {
                    return;
                }

                await contextAdapter.RetrieveIds(newObjects);

                await contextAdapter.BulkInsert(newObjects, true);
            }
        }
Example #6
0
        public GetAccountCountQueryTests()
        {
            context = InMemoryEfCoreContextFactory.Create();

            contextAdapter = Substitute.For <IContextAdapter>();
            contextAdapter.Context.Returns(context);
        }
Example #7
0
 public Handler(IContextAdapter contextAdapter,
                IBackupService backupService,
                ISettingsFacade settingsFacade)
 {
     this.contextAdapter = contextAdapter;
     this.backupService  = backupService;
     this.settingsFacade = settingsFacade;
 }
        private Action <TSource, TDestination> GetCopyPk(IContextAdapter contextAdapter)
        {
            var expression = ExpressHelper.CreateCopy <TSource, TDestination>(
                contextAdapter.GetPk <TSource>().PropertyName,
                contextAdapter.GetForwardKeyProperty <TDestination>(_propertyName, typeof(TSource)));

            return(expression.Compile());
        }
        private Action <TSource, TSource> GetCopyPk(IContextAdapter contextAdapter)
        {
            var path         = ExpressHelper.GetPath(_extractor);
            var propertyName = contextAdapter.GetBackwardKeyProperty <TSource>(path);
            var expression   = ExpressHelper.CreateCopy <TSource, TSource>(
                $"{path}.{contextAdapter.GetPk<TSource>().PropertyName}", propertyName);

            return(expression.Compile());
        }
Example #10
0
 public BackupService(ICloudBackupService cloudBackupService,
                      IFileStore fileStore,
                      ISettingsFacade settingsFacade,
                      IConnectivityAdapter connectivity,
                      IContextAdapter contextAdapter)
 {
     this.cloudBackupService = cloudBackupService;
     this.fileStore          = fileStore;
     this.settingsFacade     = settingsFacade;
     this.connectivity       = connectivity;
     this.contextAdapter     = contextAdapter;
 }
        public async Task RetrieveIdsLong <TEntity>(IContextAdapter context, TEntity[] entities)
        {
            var tableName = context.GetTableName <TEntity>();

            var entitiesLength = entities.Length;
            var minId          = Minus(await context.RunScalar <TValue>(RetrieveIdsSql(tableName, entitiesLength)), entitiesLength);
            var pkSetter       = ExpressHelper.GetPropSetter <TEntity, TValue>(context.GetPk <TEntity>().PropertyName).Compile();
            var id             = minId;

            foreach (var entity in entities)
            {
                id = AddOne(id);
                pkSetter(entity, id);
            }
        }
Example #12
0
 public BackupService(ICloudBackupService cloudBackupService,
                      IFileStore fileStore,
                      ISettingsFacade settingsFacade,
                      IConnectivityAdapter connectivity,
                      IContextAdapter contextAdapter,
                      IMessenger messenger,
                      IToastService toastService)
 {
     this.cloudBackupService = cloudBackupService;
     this.fileStore          = fileStore;
     this.settingsFacade     = settingsFacade;
     this.connectivity       = connectivity;
     this.contextAdapter     = contextAdapter;
     this.messenger          = messenger;
     this.toastService       = toastService;
 }
Example #13
0
        public static async Task BulkInsert <T>(this IContextAdapter contextAdapter, IEnumerable <T> entities,
                                                bool keepIdentity = false)
        {
            var sqlTransaction = contextAdapter.GeTransaction();

            using var sqlBulkCopy = new SqlBulkCopy(sqlTransaction.Connection,
                                                    keepIdentity ? SqlBulkCopyOptions.KeepIdentity : SqlBulkCopyOptions.Default, sqlTransaction)
                  {
                      BulkCopyTimeout      = BulkCopyTimeout,
                      DestinationTableName = contextAdapter.GetTableName <T>()
                  };
            var table = contextAdapter.GetDataTable(entities);

            foreach (var column in table.Columns.OfType <DataColumn>().Select(o => o.ColumnName))
            {
                sqlBulkCopy.ColumnMappings.Add(column, column);
            }

            await sqlBulkCopy.WriteToServerAsync(table);
        }
Example #14
0
        public static async Task BulkInsertCascade <T>(this IContextAdapter contextAdapter, IList <T> forSave,
                                                       params ICascade <T>[] cascades) where T : class
        {
            if (forSave == null || !forSave.Any())
            {
                return;
            }

            foreach (var cascade in cascades.Where(o => o.IsCascadeBeforeInsert))
            {
                await cascade.InnerInsert(forSave, contextAdapter);
            }

            await contextAdapter.BulkInsertWithIdGeneration(forSave);

            foreach (var cascade in cascades.Where(o => !o.IsCascadeBeforeInsert))
            {
                await cascade.InnerInsert(forSave, contextAdapter);
            }
        }
 /// <summary>
 /// Set various HTTP headers on the JavaScript response.
 /// </summary>
 /// <param name="context"></param>
 /// <param name="hash"></param>
 /// <param name="contentLength"></param>
 /// <param name="contentType"></param>
 private void SetHeaders(IContextAdapter context, string hash, int contentLength, string contentType)
 {
     try
     {
         context.Response.SetHeader("Content-Type",
                                    $"application/{contentType}");
         context.Response.SetHeader("Content-Length",
                                    contentLength.ToString(CultureInfo.InvariantCulture));
         context.Response.SetHeader("Cache-Control", _cacheControl);
         if (string.IsNullOrEmpty(_headersAffectingJavaScript.ToString()) == false)
         {
             context.Response.SetHeader("Vary", _headersAffectingJavaScript);
         }
         context.Response.SetHeader("ETag", new StringValues(
                                        new string[] {
             hash,
         }));
     }
     catch (InvalidOperationException ex)
     {
         _logger.LogWarning(ex, Messages.MessageJavaScriptCachingError);
     }
 }
Example #16
0
        private static DataTable GetDataTable <T>(this IContextAdapter contextAdapter, IEnumerable <T> entities)
        {
            var propertyMaps = contextAdapter.GetProperties <T>().ToArray();
            var table        = propertyMaps.CreateTable();
            var columns      = propertyMaps.Select(o => new
            {
                o.ColumnName,
                GetValue = o.IsDiscriminator
                    ? x => contextAdapter.GetDiscriminatorValue(x.GetType())
                    : ExpressHelper.GetPropGetter <T>(o.PropertyName).Compile(),
                o.ValueTransform
            }).ToArray();

            foreach (var entity in entities)
            {
                var dataRow = table.Rows.Add();
                foreach (var column in columns)
                {
                    dataRow[column.ColumnName] = column.ValueTransform(column.GetValue(entity)) ?? DBNull.Value;
                }
            }

            return(table);
        }
        public async Task InnerInsert(IEnumerable <TSource> source, IContextAdapter contextAdapter)
        {
            if (source == null)
            {
                return;
            }

            var extractor = _extractor.Compile();
            var s         = source.Where(o => extractor(o) != null).ToArray();

            if (!s.Any())
            {
                return;
            }

            var copyPk       = GetCopyPk(contextAdapter);
            var destinations = s.Select(extractor).Distinct().ToArray();
            await contextAdapter.BulkInsertCascade(destinations, _cascades);

            foreach (var destination in s)
            {
                copyPk(destination, destination);
            }
        }
 public GetCategorySummaryQueryHandler(IContextAdapter contextAdapter)
 {
     this.contextAdapter = contextAdapter;
 }
 /// <summary>
 /// This is meant to be the injected constructor
 /// </summary>
 /// <param name="iocContainer">The <seealso cref="AutoFac.IContainer"/> to create lifetime scopes with for resolving business object types that implement IBusinessScope</param>
 public DataPortalActivator(IContextAdapter contextAdapter)
 {
     this._contextAdapter = contextAdapter;
     Container = null; // Clear the thread storage
 }
        private void ServeContent(IContextAdapter context, IFlowData flowData, ContentType contentType)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (flowData == null)
            {
                throw new ArgumentNullException(nameof(flowData));
            }

            context.Response.Clear();
            context.Response.ClearHeaders();

            // Get the hash code.
            var hash = flowData.GenerateKey(_pipeline.EvidenceKeyFilter).GetHashCode();

            if (int.TryParse(context.Request.GetHeaderValue("If-None-Match"),
                             out int previousHash) &&
                hash == previousHash)
            {
                // The response hasn't changed so respond with a 304.
                context.Response.StatusCode = 304;
            }
            else
            {
                // Otherwise, return the requested content to the client.
                string content = null;
                switch (contentType)
                {
                case ContentType.JavaScript:
                    var jsElement = flowData.Pipeline.GetElement <JavaScriptBuilderElement>();
                    if (jsElement == null)
                    {
                        throw new PipelineConfigurationException(
                                  Messages.ExceptionNoJavaScriptBuilder);
                    }
                    var jsData = flowData.GetFromElement(jsElement);
                    content = jsData?.JavaScript;
                    break;

                case ContentType.Json:
                    var jsonElement = flowData.Pipeline.GetElement <JsonBuilderElement>();
                    if (jsonElement == null)
                    {
                        throw new PipelineConfigurationException(
                                  Messages.ExceptionNoJsonBuilder);
                    }
                    var jsonData = flowData.GetFromElement(jsonElement);
                    content = jsonData?.Json;
                    break;

                default:
                    break;
                }

                int length = 0;
                if (content != null && content.Length > 0)
                {
                    length = Encoding.UTF8.GetBytes(content).Length;
                }

                context.Response.StatusCode = 200;
                SetHeaders(context,
                           hash.ToString(CultureInfo.InvariantCulture),
                           length,
                           contentType == ContentType.JavaScript ? "x-javascript" : "json");

                context.Response.Write(content);
            }
        }
 public GetCashFlowQueryHandler(IContextAdapter contextAdapter)
 {
     this.contextAdapter = contextAdapter;
 }
 public Handler(IContextAdapter contextAdapter, ISystemDateHelper systemDateHelper)
 {
     this.contextAdapter   = contextAdapter;
     this.systemDateHelper = systemDateHelper;
 }
 public Handler(IContextAdapter contextAdapter, IBackupService backupService)
 {
     this.contextAdapter = contextAdapter;
     this.backupService  = backupService;
 }
 /// <summary>
 /// All possible values
 /// </summary>
 /// <param name="iocContainer">The <seealso cref="AutoFac.IContainer"/> to create lifetime scopes with for resolving business object types that implement IBusinessScope</param>
 public DataPortalActivator(IContainer iocContainer, IContextAdapter contextAdapter)
 {
     this._contextAdapter = contextAdapter;
     this._iocContainer = iocContainer;
 }
 public GenericRepository(IContextAdapter adapter)
 {
     _DbContext = adapter.GetContext();
     _DbSet     = _DbContext.Set <T>();
 }
Example #26
0
 public GetCategorySpreadingQueryHandler(IContextAdapter contextAdapter)
 {
     this.contextAdapter = contextAdapter;
 }
 /// <summary>
 /// constructs a ObjectActivator assuming it is the server
 /// Since the container is not sent in with the constructor it needs to be set
 /// using the container property
 /// </summary>
 /// <param name="iocContainer">The <seealso cref="AutoFac.IContainer"/> to create lifetime scopes with for resolving business object types that implement IBusinessScope</param>
 internal DataPortalActivator()
 {
     _contextAdapter = new ContextAdapter();
     Container = null; // Clear the thread storage
 }
Example #28
0
 public GetAccountProgressionHandler(IContextAdapter contextAdapter)
 {
     this.contextAdapter = contextAdapter;
 }
Example #29
0
 public GetCategoryProgressionHandler(IContextAdapter contextAdapter)
 {
     this.contextAdapter = contextAdapter;
 }
 /// <summary>
 /// Add the JSON from the flow data object to the HttpResponse
 /// </summary>
 /// <param name="context">
 /// An <see cref="IContextAdapter"/> representing the HttpResponse
 /// to add the JSON to.
 /// </param>
 /// <param name="flowData">
 /// The flow data to get the JSON from.
 /// </param>
 /// <exception cref="ArgumentNullException">
 /// Thrown if a required parameter is null.
 /// </exception>
 public void ServeJson(IContextAdapter context, IFlowData flowData)
 {
     ServeContent(context, flowData, ContentType.Json);
 }
Example #31
0
 public Handler(IContextAdapter contextAdapter)
 {
     this.contextAdapter = contextAdapter;
 }
 public static async Task RetrieveIds <TEntity>(this IContextAdapter contextAdapter, TEntity[] entities)
     where TEntity : class
 {
     await Worker[contextAdapter.GetPk <TEntity>().Type].RetrieveIdsLong(contextAdapter, entities);
 }
 /// <summary>
 /// Add the JavaScript from the flow data object to the HttpResponse
 /// </summary>
 /// <param name="context">
 /// An <see cref="IContextAdapter"/> representing the HttpResponse
 /// to add the JavaScript to.
 /// </param>
 /// <param name="flowData">
 /// The flow data to get the JavaScript from.
 /// </param>
 /// <exception cref="ArgumentNullException">
 /// Thrown if a required parameter is null.
 /// </exception>
 public void ServeJavascript(IContextAdapter context, IFlowData flowData)
 {
     ServeContent(context, flowData, ContentType.JavaScript);
 }