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}"); } }
/// <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)); }
/// <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)); }
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); }
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); }
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); }
public void LogRequestContext(ICrocoRequestContext requestContext) { var log = GetLog(requestContext); CrocoApp.Application.PublishMessageAsync(SystemCrocoExtensions.GetRequestContext(), log); }