XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.ServerInteractive

[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig

公开
关注 0 Fork 0 Star 0
UTF-8
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;

/// <summary>
/// XFE数据表格管理器构造器
/// </summary>
[CreateImpl]
public abstract class XFEDataTableManagerBuilder
{
    private readonly List<IXFEDataTable> _dataTableList = [];
    private readonly JsonSerializerOptions _userJsonSerializerOptions = new();
    /// <summary>
    /// 执行语句列表
    /// </summary>
    public List<string> ExecuteList { get; set; } = [];

    /// <summary>
    /// 创建构造器
    /// </summary>
    /// <returns></returns>
    public static XFEDataTableManagerBuilder CreateBuilder()
    {
        var builder = new XFEDataTableManagerBuilderImpl();
        builder._userJsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
        return builder;
    }

    /// <summary>
    /// 添加数据表
    /// </summary>
    /// <typeparam name="T">数据类型</typeparam>
    /// <param name="xFEDataTable">数据表</param>
    /// <returns></returns>
    public XFEDataTableManagerBuilder AddTable<T>(XFEDataListTable<T> xFEDataTable) where T : IIdModel
    {
        _dataTableList.Add(xFEDataTable);
        ExecuteList.AddRange([$"get_{xFEDataTable.TableNameInRequest}", $"add_{xFEDataTable.TableNameInRequest}", $"change_{xFEDataTable.TableNameInRequest}", $"remove_{xFEDataTable.TableNameInRequest}"]);
        return this;
    }

    /// <summary>
    /// 添加数据表
    /// </summary>
    /// <typeparam name="T">数据类型</typeparam>
    /// <typeparam name="TP">配置文件类型</typeparam>
    /// <param name="tableShowName">表格数据的显示名称(如:订单、用户等)</param>
    /// <param name="addPermissionLevel">增加数据所需的最小权限</param>
    /// <param name="removePermissionLevel">删除数据所需的最小权限</param>
    /// <param name="changePermissionLevel">更改数据所需的最小权限</param>
    /// <param name="getPermissionLevel">获取数据所需的最小权限</param>
    /// <param name="jsonSerializerOptions">JSON转换器</param>
    /// <returns></returns>
    public XFEDataTableManagerBuilder AddTable<T, TP>(string tableShowName, int addPermissionLevel, int removePermissionLevel, int changePermissionLevel, int getPermissionLevel, JsonSerializerOptions? jsonSerializerOptions = null) where T : IIdModel where TP : XFEProfile => AddTable(new XFEDataListTable<T>(typeof(TP))
    {
        TableShowName = tableShowName,
        AddPermissionLevel = addPermissionLevel,
        RemovePermissionLevel = removePermissionLevel,
        ChangePermissionLevel = changePermissionLevel,
        GetPermissionLevel = getPermissionLevel,
        UserJsonSerializerOptions = _userJsonSerializerOptions,
        JsonSerializerOptions = jsonSerializerOptions
    });

    /// <summary>
    /// 添加字典数据表
    /// </summary>
    /// <typeparam name="TValue">数据类型</typeparam>
    /// <param name="xFEDataTable">字典数据表</param>
    /// <returns></returns>
    public XFEDataTableManagerBuilder AddTable<TValue>(XFEDataDictionaryTable<TValue> xFEDataTable) where TValue : IIdModel
    {
        _dataTableList.Add(xFEDataTable);
        ExecuteList.AddRange([$"get_{xFEDataTable.TableNameInRequest}", $"add_{xFEDataTable.TableNameInRequest}", $"change_{xFEDataTable.TableNameInRequest}", $"remove_{xFEDataTable.TableNameInRequest}"]);
        return this;
    }

    /// <summary>
    /// 添加字典数据表
    /// </summary>
    /// <typeparam name="TValue">数据类型</typeparam>
    /// <typeparam name="TP">配置文件类型</typeparam>
    /// <param name="tableShowName">表格数据的显示名称(如:订单、用户等)</param>
    /// <param name="addPermissionLevel">增加数据所需的最小权限</param>
    /// <param name="removePermissionLevel">删除数据所需的最小权限</param>
    /// <param name="changePermissionLevel">更改数据所需的最小权限</param>
    /// <param name="getPermissionLevel">获取数据所需的最小权限</param>
    /// <param name="jsonSerializerOptions">JSON转换器</param>
    /// <returns></returns>
    public XFEDataTableManagerBuilder AddDictionaryTable<TValue, TP>(string tableShowName, int addPermissionLevel, int removePermissionLevel, int changePermissionLevel, int getPermissionLevel, JsonSerializerOptions? jsonSerializerOptions = null) where TValue : IIdModel where TP : XFEProfile => AddTable(new XFEDataDictionaryTable<TValue>(typeof(TP))
    {
        TableShowName = tableShowName,
        AddPermissionLevel = addPermissionLevel,
        RemovePermissionLevel = removePermissionLevel,
        ChangePermissionLevel = changePermissionLevel,
        GetPermissionLevel = getPermissionLevel,
        UserJsonSerializerOptions = _userJsonSerializerOptions,
        JsonSerializerOptions = jsonSerializerOptions
    });

    /// <summary>
    /// 构建数据表管理器
    /// </summary>
    /// <param name="getEncryptedUserLoginModelFunction"></param>
    /// <param name="getUsersFunction"></param>
    /// <returns></returns>
    public XFEDataTableManager Build(Func<IEnumerable<IUserInfo>> getUsersFunction, Func<IEnumerable<EncryptedUserLoginModel>> 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;
    }
}