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;
}
}