using MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Core; using MiaoYu.Repository.ChatAI.Admin.Entities; namespace MiaoYu.Api.Admin.ApplicationServices.DevelopmentTools.LowCode.Impl; /// /// 数据库表服务 /// public class DatabaseTableService : IDatabaseTableService { private readonly string TableInfoKey = "TableInfo:GenDbTableDto"; private readonly int CacheTime = 12; private readonly IMemoryCache _memoryCache; private readonly IRepository _lowCodeTableRepository; private readonly IRepository _lowCodeTableInfoRepository; private readonly IRepository _imageConfig; private readonly DataSourceManager _dataSourceManager; /// /// 构造函数 /// /// 内存缓存 /// 低代码表仓储 /// 低代码表字段仓储 /// 图片配置仓储 /// 数据源管理器 public DatabaseTableService( IMemoryCache memoryCache, IRepository lowCodeTableRepository, IRepository lowCodeTableInfoRepository, IRepository imageConfig, DataSourceManager dataSourceManager ) { _memoryCache = memoryCache; _lowCodeTableRepository = lowCodeTableRepository; _lowCodeTableInfoRepository = lowCodeTableInfoRepository; _imageConfig = imageConfig; _dataSourceManager = dataSourceManager; } /// /// 获取所有的表 包含表下面的列(支持多数据源) /// /// 所有表信息列表 public virtual List GetAllTableInfos() { return _dataSourceManager.GetAllTables(); } /// /// 获取所有的表 包含表下面的列 /// /// public virtual List GetAllTables() { var tables = _lowCodeTableRepository.ToListAll(); var tableColumns = _lowCodeTableInfoRepository.ToListAll(); var result = new List(); foreach (var item in tables) { var table = item.MapTo(); table.TableInfos = tableColumns.Where(w => w.Low_Code_TableId == item.Id).ToList(); result.Add(table); } _memoryCache.Set(TableInfoKey, result, DateTime.Now.AddHours(CacheTime)); return result; } /// /// 获取表信息根据缓存 /// /// public List GetAllTablesByCache() => _memoryCache.Get>(TableInfoKey) ?? GetAllTables(); /// /// 清空所有表缓存信息 /// /// public bool ClearAllTablesByCache() { _memoryCache.Remove(TableInfoKey); return true; } /// /// 获取数据库名称 /// /// public string? GetDatabaseName() => _lowCodeTableRepository.GetContext()?.Database.GetDbConnection().Database; }