using System.Text.Json; using XFEExtension.NetCore.AutoConfig; using XFEExtension.NetCore.AutoImplement; using XFEExtension.NetCore.ServerInteractive.Interfaces; using XFEExtension.NetCore.ServerInteractive.Models; using XFEExtension.NetCore.ServerInteractive.Models.UserModels; using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter; namespace XFEExtension.NetCore.ServerInteractive.Utilities.DataTable; /// /// XFE数据表格管理器构造器 /// [CreateImpl] public abstract class XFEDataTableManagerBuilder { private readonly List _dataTableList = []; private readonly JsonSerializerOptions _userJsonSerializerOptions = new(); /// /// 执行语句列表 /// public List ExecuteList { get; set; } = []; /// /// 创建构造器 /// /// public static XFEDataTableManagerBuilder CreateBuilder() { var builder = new XFEDataTableManagerBuilderImpl(); builder._userJsonSerializerOptions.Converters.Add(new JsonDateTimeConverter()); return builder; } /// /// 添加数据表 /// /// 数据类型 /// 数据表 /// public XFEDataTableManagerBuilder AddTable(XFEDataListTable xFEDataTable) where T : IIdModel { _dataTableList.Add(xFEDataTable); ExecuteList.AddRange([$"get_{xFEDataTable.TableNameInRequest}", $"add_{xFEDataTable.TableNameInRequest}", $"change_{xFEDataTable.TableNameInRequest}", $"remove_{xFEDataTable.TableNameInRequest}"]); return this; } /// /// 添加数据表 /// /// 数据类型 /// 配置文件类型 /// 表格数据的显示名称(如:订单、用户等) /// 增加数据所需的最小权限 /// 删除数据所需的最小权限 /// 更改数据所需的最小权限 /// 获取数据所需的最小权限 /// JSON转换器 /// public XFEDataTableManagerBuilder AddTable(string tableShowName, int addPermissionLevel, int removePermissionLevel, int changePermissionLevel, int getPermissionLevel, JsonSerializerOptions? jsonSerializerOptions = null) where T : IIdModel where TP : XFEProfile => AddTable(new XFEDataListTable(typeof(TP)) { TableShowName = tableShowName, AddPermissionLevel = addPermissionLevel, RemovePermissionLevel = removePermissionLevel, ChangePermissionLevel = changePermissionLevel, GetPermissionLevel = getPermissionLevel, UserJsonSerializerOptions = _userJsonSerializerOptions, JsonSerializerOptions = jsonSerializerOptions }); /// /// 添加字典数据表 /// /// 数据类型 /// 字典数据表 /// public XFEDataTableManagerBuilder AddTable(XFEDataDictionaryTable xFEDataTable) where TValue : IIdModel { _dataTableList.Add(xFEDataTable); ExecuteList.AddRange([$"get_{xFEDataTable.TableNameInRequest}", $"add_{xFEDataTable.TableNameInRequest}", $"change_{xFEDataTable.TableNameInRequest}", $"remove_{xFEDataTable.TableNameInRequest}"]); return this; } /// /// 添加字典数据表 /// /// 数据类型 /// 配置文件类型 /// 表格数据的显示名称(如:订单、用户等) /// 增加数据所需的最小权限 /// 删除数据所需的最小权限 /// 更改数据所需的最小权限 /// 获取数据所需的最小权限 /// JSON转换器 /// public XFEDataTableManagerBuilder AddDictionaryTable(string tableShowName, int addPermissionLevel, int removePermissionLevel, int changePermissionLevel, int getPermissionLevel, JsonSerializerOptions? jsonSerializerOptions = null) where TValue : IIdModel where TP : XFEProfile => AddTable(new XFEDataDictionaryTable(typeof(TP)) { TableShowName = tableShowName, AddPermissionLevel = addPermissionLevel, RemovePermissionLevel = removePermissionLevel, ChangePermissionLevel = changePermissionLevel, GetPermissionLevel = getPermissionLevel, UserJsonSerializerOptions = _userJsonSerializerOptions, JsonSerializerOptions = jsonSerializerOptions }); /// /// 构建数据表管理器 /// /// /// /// public XFEDataTableManager Build(Func> getUsersFunction, Func> getEncryptedUserLoginModelFunction) { var xFEDataTableManager = new XFEDataTableManagerImpl(); foreach (var table in _dataTableList) { table.GetEncryptedUserLoginModelFunction = getEncryptedUserLoginModelFunction; table.GetUsersFunction = getUsersFunction; xFEDataTableManager.TableList.Add(table); xFEDataTableManager.TableDictionary.Add(table.TableNameInRequest, table); } return xFEDataTableManager; } }