using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;
namespace Fengling.Platform.Domain.AggregatesModel.GatewayAggregate;
///
/// 路由匹配配置(值对象)
/// 对应 YARP 的 RouteMatch,以 JSON 存储在数据库中
///
public class GwRouteMatch
{
///
/// 路径匹配模式
///
public string Path { get; set; } = string.Empty;
///
/// HTTP 方法列表(如 ["GET", "POST"])
///
public List? Methods { get; set; }
///
/// Host 匹配列表(如 ["api.example.com", "*.example.com"])
///
public List? Hosts { get; set; }
///
/// Header 匹配规则
///
[NotMapped]
[JsonInclude]
public List? Headers { get; set; }
///
/// 查询参数匹配规则
///
[NotMapped]
[JsonInclude]
public List? QueryParameters { get; set; }
}
///
/// Header 匹配规则(值对象)
///
public class GwRouteHeader
{
///
/// Header 名称
///
public string Name { get; set; } = string.Empty;
///
/// 匹配值列表
///
public List Values { get; set; } = [];
///
/// 匹配模式
///
public GwHeaderMatchMode Mode { get; set; } = GwHeaderMatchMode.ExactHeader;
///
/// 是否区分大小写
///
public bool IsCaseSensitive { get; set; } = false;
}
///
/// 查询参数匹配规则(值对象)
///
public class GwRouteQueryParameter
{
///
/// 参数名称
///
public string Name { get; set; } = string.Empty;
///
/// 匹配值列表
///
public List Values { get; set; } = [];
///
/// 匹配模式
///
public GwQueryParameterMatchMode Mode { get; set; } = GwQueryParameterMatchMode.Exact;
///
/// 是否区分大小写
///
public bool IsCaseSensitive { get; set; } = false;
}
///
/// Header 匹配模式
///
public enum GwHeaderMatchMode
{
ExactHeader = 0,
Prefix = 1,
Contains = 2,
NotContains = 3,
Exists = 4
}
///
/// 查询参数匹配模式
///
public enum GwQueryParameterMatchMode
{
Exact = 0,
Contains = 1,
Prefix = 2,
Exists = 3
}