コード例 #1
0
        public async Task <ApiResult> Handle(SetupSystem request, CancellationToken cancellationToken)
        {
            var appOptions = _optionsMonitor.CurrentValue;

            if (appOptions.State == AppState.Initialized)
            {
                return(new ApiResult
                {
                    Success = false,
                    Message = await _localizer.Get("page.setup.initializedMessage", cancellationToken)
                });
            }

            using (var scope = _unitOfWorkFactory.Create())
            {
                _logger.LogInformation($"Creating default administrator {request.AdminEmail}", request.AdminEmail);

                var user = new User
                {
                    Name     = request.AdminEmail,
                    UserName = request.AdminEmail,
                    Password = request.AdminPassword,
                    Email    = request.AdminEmail
                };

                var userRepository = _classifierRepositoryFactory.GetRequiredService(ClassifierTypeCode.User);

                var userResult = await userRepository.Insert(user, cancellationToken);

                if (userResult.Success == false)
                {
                    return(userResult);
                }

                var signInResult = await _signInManager.PasswordSignIn(user.UserName, request.AdminPassword, true, false);

                if (signInResult.Success == false)
                {
                    return(signInResult);
                }

                var userUid = userResult.Uid;

                _logger.LogInformation($"Creating default company {request.CompanyName}", request.CompanyName);

                // todo: create company without mediator and company request
                var companyResult = await _mediator.Send(new CreateCompany
                {
                    UserUid = userUid,
                    Item    = new Company
                    {
                        Name       = request.CompanyName,
                        ConfigCode = CompanyConfigCode.Company                         // todo: register and use allowed company types
                    }
                }, cancellationToken);

                if (companyResult.Success == false)
                {
                    return(companyResult);
                }

                _logger.LogInformation("Updating application initialization options");

                await _settingsRepository.GetSettings <AppOptions>()
                .Set(x => x.State, AppState.Initialized)
                .Set(x => x.SuperUserId, userUid)
                .Update(cancellationToken);

                scope.Commit();

                return(new ApiResult {
                    RedirectUrl = _appUrlBuilder.Build(ClientRoutes.Dashboard)
                });
            }
        }