1
This commit is contained in:
28
Yes.Application/Installs/FileService.cs
Normal file
28
Yes.Application/Installs/FileService.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
namespace Yes.Application.Installs
|
||||
{
|
||||
public class FileService : IFileService
|
||||
{
|
||||
public void CopyFolder(string sources, string dest)
|
||||
{
|
||||
DirectoryInfo dinfo = new DirectoryInfo(sources);
|
||||
//注,这里面传的是路径,并不是文件,所以不能包含带后缀的文件
|
||||
foreach (FileSystemInfo f in dinfo.GetFileSystemInfos())
|
||||
{
|
||||
//目标路径destName = 新文件夹路径 + 源文件夹下的子文件(或文件夹)名字
|
||||
//Path.Combine(string a ,string b) 为合并两个字符串
|
||||
string destName = Path.Combine(dest, f.Name);
|
||||
if (f is System.IO.FileInfo)
|
||||
{
|
||||
//如果是文件就复制
|
||||
File.Copy(f.FullName, destName, true);//true代表可以覆盖同名文件
|
||||
}
|
||||
else
|
||||
{
|
||||
//如果是文件夹就创建文件夹,然后递归复制
|
||||
Directory.CreateDirectory(destName);
|
||||
CopyFolder(f.FullName, destName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
81
Yes.Application/Installs/InstallCommandHandler.cs
Normal file
81
Yes.Application/Installs/InstallCommandHandler.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
namespace Yes.Application.Installs
|
||||
{
|
||||
public record InstallCommand(
|
||||
string DatabaseType,
|
||||
string DatabaseServer,
|
||||
string DatabaseUser,
|
||||
string DatabasePassword,
|
||||
string DatabaseName,
|
||||
bool UseDefaultAdmin
|
||||
) : IRequest<InstallCommandResponse>;
|
||||
|
||||
public record InstallCommandResponse(bool Success, string ErrorMessage = "");
|
||||
|
||||
public class InstallCommandHandler(
|
||||
IConnectionStringProvider connectionStringProvider,
|
||||
IMigratorProvider migratorProvider,
|
||||
IWebHostEnvironment env,
|
||||
IConfigurationService configurationService,
|
||||
IFileService fileService,
|
||||
IOptionsMonitor<BlogSettings> options) : IRequestHandler<InstallCommand, InstallCommandResponse>
|
||||
{
|
||||
private readonly IConnectionStringProvider _connectionStringProvider = connectionStringProvider;
|
||||
private readonly IMigratorProvider _migratorProvider = migratorProvider;
|
||||
private readonly BlogSettings _settings = options.CurrentValue;
|
||||
private readonly IConfigurationService _configurationService = configurationService;
|
||||
private readonly IWebHostEnvironment _env = env;
|
||||
private readonly IFileService _fileService = fileService;
|
||||
public async Task<InstallCommandResponse> Handle(InstallCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(_settings.ConnectionString) && !string.IsNullOrEmpty(_settings.DatabaseType) && !string.IsNullOrEmpty(_settings.DatabaseName))
|
||||
{
|
||||
return new InstallCommandResponse(true, $"数据库已安装!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var defaultTheme = Path.Combine(_env.ContentRootPath, "files", "themes", "default");
|
||||
var dir = new DirectoryInfo(defaultTheme);
|
||||
if (dir.GetFiles().Length == 0)
|
||||
{
|
||||
var sourcePath = Path.Combine(_env.WebRootPath, "themes", "default");
|
||||
_fileService.CopyFolder(sourcePath, defaultTheme);
|
||||
}
|
||||
|
||||
Enum.TryParse(request.DatabaseType, out DatabaseTypeEnum databaseType);
|
||||
var databaseServer = request.DatabaseServer;
|
||||
var databaseName = request.DatabaseName;
|
||||
|
||||
|
||||
var settings = new BlogSettings();
|
||||
|
||||
settings.DatabaseName = databaseName;
|
||||
settings.DatabaseType = databaseType.ToString();
|
||||
settings.ConnectionString = _connectionStringProvider.GetConnectionString(databaseType, databaseServer, databaseName, request.DatabaseUser, request.DatabasePassword);
|
||||
|
||||
_migratorProvider.MigrateUp(databaseType, settings.ConnectionString);
|
||||
|
||||
await _configurationService.SaveConfiguration(settings);
|
||||
|
||||
}
|
||||
catch (SqlException ex)
|
||||
{
|
||||
return new InstallCommandResponse(false, $"数据库连接异常!{ex.Message}");
|
||||
}
|
||||
catch (OperationCanceledException ex)
|
||||
{
|
||||
return new InstallCommandResponse(false, $"操作被取消,原因可能是数据库连接失败。{ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new InstallCommandResponse(false, ex.Message);
|
||||
}
|
||||
|
||||
return new InstallCommandResponse(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user