HuanMengAdmin/admin-server/MiaoYu.Core.CodeGenerator/Services/TableMetaConfigService.cs
2025-11-08 02:39:31 +08:00

127 lines
3.9 KiB
C#

using System.Text.Json;
namespace MiaoYu.Core.CodeGenerator.Services;
/// <summary>
/// 表元信息配置服务实现
/// </summary>
[Component]
public class TableMetaConfigService : ITableMetaConfigService
{
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;
}
}
}