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) }); } }