refactor(monitoring): 重构监控模块领域实体结构

- 将 AlertRule 实体移至 AlertRule 子命名空间并重命名为 AlertRuleEntity
- 将 ExternalSystem 实体移至 ExternalSystem 子命名空间并重命名为 ExternalSystemEntity
- 将 SyncedRecord 实体移至 SyncedRecord 子命名空间并重命名为 SyncedRecordEntity
- 将 SyncJob 实体移至 SyncJob 子命名空间并重命名为 SyncJobEntity
- 新增 CredentialEntry 值对象用于凭证管理
- 新增 JobData 值对象用于同步任务数据投影
- 新增 RecordData 值对象用于同步记录数据投影
- 新增 RuleData 值对象用于告警规则数据投影
- 新增 SystemData 值对象用于外部系统配置数据投影
- 统一值对象存放至 Domain/Values 目录
- 更新实体命名空间引用路径
- 修改 SyncJobStatus 枚举名为 SyncJobStatusEnum
This commit is contained in:
xiangning 2026-07-19 13:09:58 +08:00
parent 5332ff3867
commit a11330936a
9 changed files with 130 additions and 10 deletions

View File

@ -1,14 +1,14 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
using Monitoring.Domain.Enums;
using Monitoring.Domain.Values;
namespace Monitoring.Domain.Entities;
namespace Monitoring.Domain.Entities.AlertRule;
/// <summary>
/// 告警规则实体。id + 外部系统Id索引列 + json_data + 审计列。
/// jsonb 承载规则名称/指标名/阈值/运算符/严重级别/启用/冷却/触发时间。
/// </summary>
public class AlertRule : BaseEntity, IFullAudit
public class AlertRuleEntity : BaseEntity, IFullAudit
{
/// <summary>绑定的外部系统 Id(索引列)。</summary>
public Guid ExternalSystemId { get; set; }

View File

@ -1,15 +1,16 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
using Monitoring.Domain.Enums;
using Monitoring.Domain.Values;
namespace Monitoring.Domain.Entities;
namespace Monitoring.Domain.Entities.ExternalSystem;
/// <summary>
/// 外部系统配置实体。极简文档模式:id + 必要索引列 + json_data + 审计列。
/// 所有可变/扩展字段(名称/类型/URL/参数/凭证/同步状态)统一存 JsonData(jsonb),
/// 通过 <see cref="Data"/> 强类型访问,避免列爆炸。
/// </summary>
public class ExternalSystem : BaseEntity, IFullAudit
public class ExternalSystemEntity : BaseEntity, IFullAudit
{
/// <summary>
/// 业务数据(jsonb)。承载名称/类型/BaseUrl/参数/凭证/同步状态等全部业务字段。

View File

@ -1,20 +1,21 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
using Monitoring.Domain.Enums;
using Monitoring.Domain.Values;
namespace Monitoring.Domain.Entities;
namespace Monitoring.Domain.Entities.SyncJob;
/// <summary>
/// 同步任务记录实体。id + 外部系统Id + 状态/时间索引列 + json_data + 审计列。
/// jsonb 承载触发来源/汇总指标/错误信息。
/// </summary>
public class SyncJob : BaseEntity, IFullAudit
public class SyncJobEntity : BaseEntity, IFullAudit
{
/// <summary>目标外部系统 Id(索引列,高频查询)。</summary>
public Guid ExternalSystemId { get; set; }
/// <summary>任务状态(索引列,统计成功率/查 Failed 排查)。</summary>
public SyncJobStatus Status { get; set; } = SyncJobStatus.Pending;
public SyncJobStatusEnum Status { get; set; } = SyncJobStatusEnum.Pending;
/// <summary>开始时间(UTC)。</summary>
public DateTime? StartedAt { get; set; }

View File

@ -1,14 +1,15 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
using Monitoring.Domain.Values;
namespace Monitoring.Domain.Entities;
namespace Monitoring.Domain.Entities.SyncedRecord;
/// <summary>
/// 同步记录实体。id + 外部系统Id/类型/去重键/发生时间索引列 + json_data + 审计列。
/// jsonb 承载从外部拉取的原始业务数据(已换算,如金额分→元)。
/// (ExternalSystemId, ExternalId) 由 Connector 保证幂等,重复拉取只保留最新快照。
/// </summary>
public class SyncedRecord : BaseEntity, IFullAudit
public class SyncedRecordEntity : BaseEntity, IFullAudit
{
/// <summary>来源外部系统 Id(索引列)。</summary>
public Guid ExternalSystemId { get; set; }

View File

@ -0,0 +1,20 @@
namespace Monitoring.Domain.Entities;
/// <summary>凭证条目(内聚于 SystemData,无独立表)。</summary>
public class CredentialEntry
{
/// <summary>类型:Cookie / Header / BearerToken / Query。</summary>
public string Type { get; set; } = default!;
/// <summary>键名(Cookie 名/Header 名/参数名)。</summary>
public string Key { get; set; } = default!;
/// <summary>值。TODO 后续加密。</summary>
public string Value { get; set; } = default!;
/// <summary>是否启用。</summary>
public bool IsEnabled { get; set; } = true;
/// <summary>备注。</summary>
public string? Remark { get; set; }
}

View File

@ -0,0 +1,14 @@
namespace Monitoring.Domain.Entities;
/// <summary>同步任务 json_data 投影。</summary>
public class JobData
{
/// <summary>触发来源:scheduler / manual。</summary>
public string TriggerSource { get; set; } = "scheduler";
/// <summary>汇总指标(Connector 产出,如 {order_count:8283, actual_rent:9813.80})。</summary>
public Dictionary<string, object?> SummaryMetrics { get; set; } = new();
/// <summary>错误信息(成功时为 null)。</summary>
public string? ErrorMessage { get; set; }
}

View File

@ -0,0 +1,14 @@
namespace Monitoring.Domain.Entities;
/// <summary>同步记录 json_data 投影:拉取到的外部原始数据。</summary>
public class RecordData
{
/// <summary>记录类型:order / finance / metric(由 Connector 定义)。</summary>
public string RecordType { get; set; } = default!;
/// <summary>外部业务 Id(订单号/流水号)。</summary>
public string ExternalId { get; set; } = default!;
/// <summary>原始数据(已换算后的业务字段,如金额已从分转元)。</summary>
public Dictionary<string, object?> Payload { get; set; } = new();
}

View File

@ -0,0 +1,31 @@
using Monitoring.Domain.Enums;
namespace Monitoring.Domain.Entities;
/// <summary>告警规则 json_data 投影。</summary>
public class RuleData
{
/// <summary>规则名称。</summary>
public string Name { get; set; } = default!;
/// <summary>监控指标名(对应 JobData.SummaryMetrics 的键)。</summary>
public string MetricName { get; set; } = default!;
/// <summary>比较运算符:gt/gte/lt/lte/eq。</summary>
public string Operator { get; set; } = "gt";
/// <summary>阈值。</summary>
public string Threshold { get; set; } = default!;
/// <summary>严重级别。</summary>
public AlertSeverity Severity { get; set; } = AlertSeverity.Warning;
/// <summary>是否启用。</summary>
public bool IsEnabled { get; set; } = true;
/// <summary>触发冷却(秒)。</summary>
public int CooldownSeconds { get; set; } = 3600;
/// <summary>最近触发时间(UTC 毫秒时间戳)。</summary>
public long? LastTriggeredAt { get; set; }
}

View File

@ -0,0 +1,38 @@
using Monitoring.Domain.Enums;
namespace Monitoring.Domain.Values;
/// <summary>
/// 外部系统 json_data 投影:承载可变/扩展字段。
/// 凭证(Cookie/Header/Token)也内聚于此,避免单独建表;Credentials 列表为空时表示无凭证。
/// Parameters 承载 Connector 专属配置(如 u号租的 sellerId/lookbackDays)。
/// </summary>
public class SystemData
{
/// <summary>系统显示名称。</summary>
public string Name { get; set; } = default!;
/// <summary>系统类型:1=UHaoZu, 100=GenericHttp。</summary>
public ExternalSystemTypeEnum SystemType { get; set; }
/// <summary>Base URL。</summary>
public string BaseUrl { get; set; } = default!;
/// <summary>轮询间隔(秒),0=用默认。</summary>
public int PollIntervalSeconds { get; set; }
/// <summary>是否启用。</summary>
public bool IsEnabled { get; set; } = true;
/// <summary>Connector 专属参数(如 sellerId/lookbackDays)。</summary>
public Dictionary<string, string?> Parameters { get; set; } = new();
/// <summary>凭证列表(Cookie/Header/Token),不再单独建表。</summary>
public List<CredentialEntry> Credentials { get; set; } = new();
/// <summary>最近同步时间(UTC 毫秒时间戳)。</summary>
public long? LastSyncedAt { get; set; }
/// <summary>最近同步任务 Id。</summary>
public Guid? LastSyncJobId { get; set; }
}