/// <summary> /// Ensure an admin user with the passed credential exists, creates it if it doesn't find it. /// </summary> /// <param name="builder"></param> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> public static OurOrdersBuilder WithAdmin(this OurOrdersBuilder builder, string username, string password) { builder.AppEvents.ApplicationStarted += (sender, serviceProvider) => { using (var scope = serviceProvider.CreateScope()) { var userManager = scope.ServiceProvider.GetService <UserManager>(); var old = AsyncHelper.RunSync(() => userManager.FindByNameAsync(username)); if (old != null) { return; } var result = AsyncHelper.RunSync(() => userManager.CreateAsync(new User() { UserName = username, Email = "" }, password)); if (!result.Succeeded) { var errors = result.Errors.Select(e => $"{e.Code}: {e.Description}"); throw new AppException($"impossible to create the admin: {string.Join(", ", errors)}"); } var user = AsyncHelper.RunSync(() => userManager.FindByNameAsync(username)); userManager.AddToRoleAsync(user, RoleStore.ADMIN); } }; return(builder); }
/// <summary> /// Adds Our Orders /// </summary> /// <param name="services"></param> /// <param name="configure"></param> /// <returns></returns> public static OurOrdersBuilder AddOurOrdersCore(this IServiceCollection services, Action <IAppSettings> configure = null) { // be sure we have an HttpContextAccessor services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.TryAddTransient <OrderService, OrderService>(); var appSettings = new AppSettings(); if (configure != null) { configure(appSettings); } services.AddSingleton <Startup>(); services.AddSingleton <IAppSettings>(appSettings); var appEvents = new AppEvents(); services.AddSingleton <AppEvents>(appEvents); // add order and product services to the host services services.AddTransient <OrderService, OrderService>(s => appEvents.Services.GetService <OrderService>()); services.AddTransient <ProductService, ProductService>(s => appEvents.Services.GetService <ProductService>()); var builder = new OurOrdersBuilder(appSettings, appEvents, services); services.AddSingleton <OurOrdersBuilder>(builder); return(builder); }
/// <summary> /// Ensure the passed shops exists in the Repository. Creates them if there is non with the same name. /// </summary> /// <param name="builder"></param> /// <param name="shops"></param> /// <returns></returns> public static OurOrdersBuilder WithShops(this OurOrdersBuilder builder, params Shop[] shops) { builder.AppEvents.ApplicationStarted += (sender, serviceProvider) => { var shopService = serviceProvider.GetService <IService <Shop> >(); foreach (var shop in shops) { var old = AsyncHelper.RunSync(() => shopService.FindAsync(Filter.Eq("Name", shop.Name))); if (old.Any()) { continue; } AsyncHelper.RunSync(() => shopService.CreateAsync(shop)); } }; return(builder); }