This commit is contained in:
2025-05-07 16:15:05 +08:00
parent 85772cb43a
commit ab7ae290f0
13 changed files with 26 additions and 41 deletions

View File

@@ -1,29 +0,0 @@

namespace Yes.Application.Admins.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);
}
}
}
}
}

View File

@@ -1,82 +0,0 @@
namespace Yes.Application.Admins.Installs
{
public record InstallCommand(
string DatabaseType,
string DatabaseServer,
string DatabaseVersion,
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);
}
}
}