using System.Text.Json;
namespace MiaoYu.Core.CodeGenerator.Services;
///
/// 表元信息配置服务实现
///
[Component]
public class TableMetaConfigService : ITableMetaConfigService
{
private readonly IWebHostEnvironment _environment;
private readonly ILogger _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 logger)
{
_environment = environment;
_logger = logger;
}
///
/// 获取配置文件路径
///
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");
}
///
/// 加载表元信息配置
///
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(json, _jsonOptions);
_logger.LogDebug("成功加载配置: {DatabaseKey}/{TableName}", databaseKey, tableName);
return config;
}
catch (Exception ex)
{
_logger.LogError(ex, "加载配置文件失败: {DatabaseKey}/{TableName}", databaseKey, tableName);
return null;
}
}
///
/// 保存表元信息配置
///
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;
}
}
///
/// 检查配置文件是否存在
///
public bool ExistsConfig(string databaseKey, string tableName)
{
var filePath = GetConfigFilePath(databaseKey, tableName);
return File.Exists(filePath);
}
///
/// 删除配置文件
///
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;
}
}
}