namespace MiaoYu.Repository.ChatAI.Admin.Providers; /// /// MiaoYuChat 数据源提供者 /// [Component] public class MiaoYuChatDataSourceProvider : IDataSourceProvider, IScopedDependency { private readonly IRepository _repository; public MiaoYuChatDataSourceProvider(IRepository repository) { _repository = repository; } public DataSourceConfig Config => new DataSourceConfig { DatabaseKey = DataSourceConstants.MiaoYuChat, DisplayName = "妙语聊天", EntityNamespace = typeof(ChatAdminRepositoryStartup).Namespace!, ModelPathTemplate = "{RootPath}\\{Namespace}\\Entities\\Apps\\{EntityNamePlural}", ServicePathTemplate = "{AppPath}\\ApplicationServices\\Apps\\ChatAI\\{EntityNamePlural}", ControllerPathTemplate = "{AppPath}\\Controllers\\Apps\\ChatAI\\{EntityNamePlural}", ClientIndexPathTemplate = "{RootPath}\\admin-client\\src\\views\\apps\\chatai\\{TableName}s", ClientInfoPathTemplate = "{RootPath}\\admin-client\\src\\views\\apps\\chatai\\{TableName}s", ClientServicePathTemplate = "{RootPath}\\admin-client\\src\\services\\apps\\chatai\\{TableName}s", TemplatePath = "/wwwroot/code_generation/template/", NamingStrategy = EntityNamingStrategy.ToPascalCase, Order = 2, EnableEntityPrefix = false, EntityPrefix = "", UsesPluralPath = true }; public List GetTables() { var freeSqlTables = _repository.UnitOfWork.FreeSqlOrm.DbFirst.GetTablesByDatabase(); return ConvertToDbTableInfoList(freeSqlTables); } public object GetDbContext() => _repository.GetContext()!; private List ConvertToDbTableInfoList(List freeSqlTables) { var result = new List(); foreach (var table in freeSqlTables) { var dbTableInfo = new CoreDbTableInfo { DataBase = Config.DatabaseKey, Schema = table.Schema, Name = table.Name, Type = table.Type.ToString(), Comment = table.Comment, Columns = table.Columns?.Select(c => new CoreDbColumnInfo { Name = c.Name, Comment = c.Comment, IsPrimary = c.IsPrimary, IsIdentity = c.IsIdentity, IsNullable = c.IsNullable, Position = c.Position, DbType = c.DbTypeTextFull, CsType = c.CsType?.Name, MaxLength = c.MaxLength }).ToList() }; result.Add(dbTableInfo); } return result; } }