/// <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);
        }
示例#2
0
        /// <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);
        }