127 lines
3.9 KiB
C#
127 lines
3.9 KiB
C#
using System.Text.Json;
|
|
|
|
namespace MiaoYu.Core.CodeGenerator.Services;
|
|
|
|
/// <summary>
|
|
/// 表元信息配置服务实现
|
|
/// </summary>
|
|
[Component]
|
|
public class TableMetaConfigService : ITableMetaConfigService, IScopedDependency
|
|
{
|
|
private readonly IWebHostEnvironment _environment;
|
|
private readonly ILogger<TableMetaConfigService> _logger;
|
|
|
|
// JSON 序列化选项
|
|
private static readonly JsonSerializerOptions _jsonOptions = new()
|
|
{
|
|
WriteIndented = true,
|
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
|
DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull,
|
|
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
};
|
|
|
|
public TableMetaConfigService(IWebHostEnvironment environment, ILogger<TableMetaConfigService> logger)
|
|
{
|
|
_environment = environment;
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取配置文件路径
|
|
/// </summary>
|
|
private string GetConfigFilePath(string databaseKey, string tableName)
|
|
{
|
|
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
|
|
var configDir = Path.Combine(baseDir, "CodeGenConfig", databaseKey);
|
|
|
|
// 确保目录存在
|
|
if (!Directory.Exists(configDir))
|
|
{
|
|
Directory.CreateDirectory(configDir);
|
|
}
|
|
|
|
return Path.Combine(configDir, $"{tableName}.json");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载表元信息配置
|
|
/// </summary>
|
|
public TableMetaConfig? LoadConfig(string databaseKey, string tableName)
|
|
{
|
|
try
|
|
{
|
|
var filePath = GetConfigFilePath(databaseKey, tableName);
|
|
|
|
if (!File.Exists(filePath))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var json = File.ReadAllText(filePath);
|
|
var config = JsonSerializer.Deserialize<TableMetaConfig>(json, _jsonOptions);
|
|
|
|
_logger.LogDebug("成功加载配置: {DatabaseKey}/{TableName}", databaseKey, tableName);
|
|
|
|
return config;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "加载配置文件失败: {DatabaseKey}/{TableName}", databaseKey, tableName);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存表元信息配置
|
|
/// </summary>
|
|
public async Task SaveConfigAsync(string databaseKey, string tableName, TableMetaConfig config)
|
|
{
|
|
try
|
|
{
|
|
var filePath = GetConfigFilePath(databaseKey, tableName);
|
|
var json = JsonSerializer.Serialize(config, _jsonOptions);
|
|
|
|
await File.WriteAllTextAsync(filePath, json);
|
|
|
|
_logger.LogInformation("成功保存配置: {DatabaseKey}/{TableName}", databaseKey, tableName);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "保存配置文件失败: {DatabaseKey}/{TableName}", databaseKey, tableName);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查配置文件是否存在
|
|
/// </summary>
|
|
public bool ExistsConfig(string databaseKey, string tableName)
|
|
{
|
|
var filePath = GetConfigFilePath(databaseKey, tableName);
|
|
return File.Exists(filePath);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除配置文件
|
|
/// </summary>
|
|
public async Task DeleteConfigAsync(string databaseKey, string tableName)
|
|
{
|
|
try
|
|
{
|
|
var filePath = GetConfigFilePath(databaseKey, tableName);
|
|
|
|
if (File.Exists(filePath))
|
|
{
|
|
await Task.Run(() => File.Delete(filePath));
|
|
_logger.LogInformation("成功删除配置: {DatabaseKey}/{TableName}", databaseKey, tableName);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "删除配置文件失败: {DatabaseKey}/{TableName}", databaseKey, tableName);
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
|