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