public static void CheckApplicationState(ICrocoApplication app)
        {
            var appContext = app.GetDatabaseContext(SystemCrocoExtensions.GetRequestContext());

            var context = appContext.GetDbContext();

            var contextType        = context.GetType();
            var modelProjectName   = contextType.Assembly.ManifestModule.Name.Replace(".dll", "");
            var dbContextClassName = contextType.Name;


            var lastAppliedMigration = context.Database.GetAppliedMigrations().LastOrDefault();
            var lastDefinedMigration = context.Database.GetMigrations().LastOrDefault();

            var command = $"Update-Database -Context {dbContextClassName}";

            var instructions = "Зайдите в Средства->Диспетчер пакетов NuGet->" +
                               $"Консоль диспетчера пакетов, далее выберите проект по умолчанию {modelProjectName} и введите команду {command}";

            if (lastAppliedMigration == null)
            {
                throw new Exception($"К вашей базе данных не применены миграции. {instructions}");
            }

            if (lastDefinedMigration != lastAppliedMigration)
            {
                throw new Exception($"К вашей базе данных не применена последняя миграция. {instructions}");
            }
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="claimsPrincipal"></param>
        /// <returns></returns>
        public Task <Client> GetClientAsync(ClaimsPrincipal claimsPrincipal)
        {
            if (!claimsPrincipal.Identity.IsAuthenticated)
            {
                return(Task.FromResult <Client>(null));
            }

            var userId = claimsPrincipal.GetUserId();

            return(CrocoApp.Application.GetDatabaseContext(SystemCrocoExtensions.GetRequestContext())
                   .Query <Client>().FirstOrDefaultAsync(x => x.Id == userId));
        }
示例#3
0
    /// <summary>
    /// Отправить сообщения на электронную почту из очереди
    /// </summary>
    /// <param name="serviceProvider">Глобальный провайдер сервисов</param>
    /// <param name="count">количество сообщений для отправки</param>
    /// <returns></returns>
    public static Task SendEmailsFromQueue(this IServiceProvider serviceProvider, int count = 10)
    {
        using var scope = serviceProvider.CreateScope();

        var scopedServiceProvider = scope.ServiceProvider;

        scopedServiceProvider
        .GetRequiredService <ICrocoRequestContextAccessor>()
        .SetRequestContext(SystemCrocoExtensions.GetRequestContext());

        var sender = scopedServiceProvider
                     .GetRequiredService <MailDistributionInteractionWorker>();

        return(sender.SendEmailsAsync(count));
    }
示例#4
0
        public async Task Test()
        {
            var srvProvider = await TestBuilder.BuildCltAppAndGetServiceProvider();

            var scope = srvProvider.CreateScope();

            scope.ServiceProvider
            .GetRequiredService <ICrocoRequestContextAccessor>()
            .SetRequestContext(SystemCrocoExtensions.GetRequestContext());

            var passwordOptionsProvider = scope.ServiceProvider
                                          .GetRequiredService <CltPasswordValidator>();

            Assert.IsNotNull(passwordOptionsProvider.Options);
        }
示例#5
0
        public async Task SearchUser()
        {
            var srvProvider = await TestBuilder.BuildCltAppAndGetServiceProvider();

            var scope = srvProvider.CreateScope();

            scope.ServiceProvider
            .GetRequiredService <ICrocoRequestContextAccessor>()
            .SetRequestContext(SystemCrocoExtensions.GetRequestContext());

            var userSearcher = scope.ServiceProvider.GetRequiredService <UserSearcher>();

            var rootSettings = scope.ServiceProvider.GetRequiredService <ISettingsFactory>()
                               .GetSetting <RootSettings>();

            var user = await userSearcher.GetUserByEmailAsync(rootSettings.RootEmail);

            Assert.IsNotNull(user);
        }
示例#6
0
        public static async Task <IServiceProvider> BuildCltAppAndGetServiceProvider()
        {
            var services = new ServiceCollection();

            services.AddLogging();
            services.AddScoped(srv => MySqLiteFileDatabaseExtensions.Create <CrocoInternalDbContext>(opts => new CrocoInternalDbContext(opts), "croco"));
            services.AddScoped(srv => MySqLiteFileDatabaseExtensions.Create <CltDbContext>(opts => new CltDbContext(opts), "clt"));
            var appBuilder = new CrocoApplicationBuilder(services);

            appBuilder.RegisterVirtualPathMapper(Directory.GetCurrentDirectory());
            appBuilder.RegisterFileStorage(new CrocoFileOptions
            {
                SourceDirectory       = Directory.GetCurrentDirectory(),
                ImgFileResizeSettings = new Dictionary <string, ImgFileResizeSetting>()
            });

            DbFileManagerServiceCollectionExtensions.RegisterDbFileManager(appBuilder);

            CltLogicRegistrator.Register(appBuilder);

            appBuilder.CheckAndRegisterApplication <CrocoApplication>();

            var srvProvider = services.BuildServiceProvider();

            appBuilder.SetAppAndActivator(srvProvider);

            var scope = srvProvider.CreateScope();

            InitializeDatabasesAsEmpty(scope);

            scope.ServiceProvider
            .GetRequiredService <ICrocoRequestContextAccessor>()
            .SetRequestContext(SystemCrocoExtensions.GetRequestContext());

            var accountInitiator = scope.ServiceProvider
                                   .GetRequiredService <AccountInitiator>();

            await accountInitiator.CreateRootUserAsync();

            return(srvProvider);
        }
示例#7
0
        public void LogRequestContext(ICrocoRequestContext requestContext)
        {
            var log = GetLog(requestContext);

            CrocoApp.Application.PublishMessageAsync(SystemCrocoExtensions.GetRequestContext(), log);
        }