diff --git a/src/modules/monitoring/Domain/Entities/AlertRule.cs b/src/modules/monitoring/Domain/Entities/AlertRule/AlertRuleEntity.cs similarity index 90% rename from src/modules/monitoring/Domain/Entities/AlertRule.cs rename to src/modules/monitoring/Domain/Entities/AlertRule/AlertRuleEntity.cs index 79d8096..0874910 100644 --- a/src/modules/monitoring/Domain/Entities/AlertRule.cs +++ b/src/modules/monitoring/Domain/Entities/AlertRule/AlertRuleEntity.cs @@ -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; /// /// 告警规则实体。id + 外部系统Id索引列 + json_data + 审计列。 /// jsonb 承载规则名称/指标名/阈值/运算符/严重级别/启用/冷却/触发时间。 /// -public class AlertRule : BaseEntity, IFullAudit +public class AlertRuleEntity : BaseEntity, IFullAudit { /// 绑定的外部系统 Id(索引列)。 public Guid ExternalSystemId { get; set; } diff --git a/src/modules/monitoring/Domain/Entities/ExternalSystem.cs b/src/modules/monitoring/Domain/Entities/ExternalSystem/ExternalSystemEntity.cs similarity index 91% rename from src/modules/monitoring/Domain/Entities/ExternalSystem.cs rename to src/modules/monitoring/Domain/Entities/ExternalSystem/ExternalSystemEntity.cs index abf310c..52305ce 100644 --- a/src/modules/monitoring/Domain/Entities/ExternalSystem.cs +++ b/src/modules/monitoring/Domain/Entities/ExternalSystem/ExternalSystemEntity.cs @@ -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; /// /// 外部系统配置实体。极简文档模式:id + 必要索引列 + json_data + 审计列。 /// 所有可变/扩展字段(名称/类型/URL/参数/凭证/同步状态)统一存 JsonData(jsonb), /// 通过 强类型访问,避免列爆炸。 /// -public class ExternalSystem : BaseEntity, IFullAudit +public class ExternalSystemEntity : BaseEntity, IFullAudit { /// /// 业务数据(jsonb)。承载名称/类型/BaseUrl/参数/凭证/同步状态等全部业务字段。 diff --git a/src/modules/monitoring/Domain/Entities/SyncJob.cs b/src/modules/monitoring/Domain/Entities/SyncJob/SyncJobEntity.cs similarity index 89% rename from src/modules/monitoring/Domain/Entities/SyncJob.cs rename to src/modules/monitoring/Domain/Entities/SyncJob/SyncJobEntity.cs index 01913a7..9504c8d 100644 --- a/src/modules/monitoring/Domain/Entities/SyncJob.cs +++ b/src/modules/monitoring/Domain/Entities/SyncJob/SyncJobEntity.cs @@ -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; /// /// 同步任务记录实体。id + 外部系统Id + 状态/时间索引列 + json_data + 审计列。 /// jsonb 承载触发来源/汇总指标/错误信息。 /// -public class SyncJob : BaseEntity, IFullAudit +public class SyncJobEntity : BaseEntity, IFullAudit { /// 目标外部系统 Id(索引列,高频查询)。 public Guid ExternalSystemId { get; set; } /// 任务状态(索引列,统计成功率/查 Failed 排查)。 - public SyncJobStatus Status { get; set; } = SyncJobStatus.Pending; + public SyncJobStatusEnum Status { get; set; } = SyncJobStatusEnum.Pending; /// 开始时间(UTC)。 public DateTime? StartedAt { get; set; } diff --git a/src/modules/monitoring/Domain/Entities/SyncedRecord.cs b/src/modules/monitoring/Domain/Entities/SyncedRecord/SyncedRecordEntity.cs similarity index 93% rename from src/modules/monitoring/Domain/Entities/SyncedRecord.cs rename to src/modules/monitoring/Domain/Entities/SyncedRecord/SyncedRecordEntity.cs index d66ba6a..2d31646 100644 --- a/src/modules/monitoring/Domain/Entities/SyncedRecord.cs +++ b/src/modules/monitoring/Domain/Entities/SyncedRecord/SyncedRecordEntity.cs @@ -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; /// /// 同步记录实体。id + 外部系统Id/类型/去重键/发生时间索引列 + json_data + 审计列。 /// jsonb 承载从外部拉取的原始业务数据(已换算,如金额分→元)。 /// (ExternalSystemId, ExternalId) 由 Connector 保证幂等,重复拉取只保留最新快照。 /// -public class SyncedRecord : BaseEntity, IFullAudit +public class SyncedRecordEntity : BaseEntity, IFullAudit { /// 来源外部系统 Id(索引列)。 public Guid ExternalSystemId { get; set; } diff --git a/src/modules/monitoring/Domain/Values/CredentialEntry.cs b/src/modules/monitoring/Domain/Values/CredentialEntry.cs new file mode 100644 index 0000000..99b834f --- /dev/null +++ b/src/modules/monitoring/Domain/Values/CredentialEntry.cs @@ -0,0 +1,20 @@ +namespace Monitoring.Domain.Entities; + +/// 凭证条目(内聚于 SystemData,无独立表)。 +public class CredentialEntry +{ + /// 类型:Cookie / Header / BearerToken / Query。 + public string Type { get; set; } = default!; + + /// 键名(Cookie 名/Header 名/参数名)。 + public string Key { get; set; } = default!; + + /// 值。TODO 后续加密。 + public string Value { get; set; } = default!; + + /// 是否启用。 + public bool IsEnabled { get; set; } = true; + + /// 备注。 + public string? Remark { get; set; } +} diff --git a/src/modules/monitoring/Domain/Values/JobData.cs b/src/modules/monitoring/Domain/Values/JobData.cs new file mode 100644 index 0000000..f905670 --- /dev/null +++ b/src/modules/monitoring/Domain/Values/JobData.cs @@ -0,0 +1,14 @@ +namespace Monitoring.Domain.Entities; + +/// 同步任务 json_data 投影。 +public class JobData +{ + /// 触发来源:scheduler / manual。 + public string TriggerSource { get; set; } = "scheduler"; + + /// 汇总指标(Connector 产出,如 {order_count:8283, actual_rent:9813.80})。 + public Dictionary SummaryMetrics { get; set; } = new(); + + /// 错误信息(成功时为 null)。 + public string? ErrorMessage { get; set; } +} diff --git a/src/modules/monitoring/Domain/Values/RecordData.cs b/src/modules/monitoring/Domain/Values/RecordData.cs new file mode 100644 index 0000000..4d4012a --- /dev/null +++ b/src/modules/monitoring/Domain/Values/RecordData.cs @@ -0,0 +1,14 @@ +namespace Monitoring.Domain.Entities; + +/// 同步记录 json_data 投影:拉取到的外部原始数据。 +public class RecordData +{ + /// 记录类型:order / finance / metric(由 Connector 定义)。 + public string RecordType { get; set; } = default!; + + /// 外部业务 Id(订单号/流水号)。 + public string ExternalId { get; set; } = default!; + + /// 原始数据(已换算后的业务字段,如金额已从分转元)。 + public Dictionary Payload { get; set; } = new(); +} diff --git a/src/modules/monitoring/Domain/Values/RuleData.cs b/src/modules/monitoring/Domain/Values/RuleData.cs new file mode 100644 index 0000000..c324731 --- /dev/null +++ b/src/modules/monitoring/Domain/Values/RuleData.cs @@ -0,0 +1,31 @@ +using Monitoring.Domain.Enums; + +namespace Monitoring.Domain.Entities; + +/// 告警规则 json_data 投影。 +public class RuleData +{ + /// 规则名称。 + public string Name { get; set; } = default!; + + /// 监控指标名(对应 JobData.SummaryMetrics 的键)。 + public string MetricName { get; set; } = default!; + + /// 比较运算符:gt/gte/lt/lte/eq。 + public string Operator { get; set; } = "gt"; + + /// 阈值。 + public string Threshold { get; set; } = default!; + + /// 严重级别。 + public AlertSeverity Severity { get; set; } = AlertSeverity.Warning; + + /// 是否启用。 + public bool IsEnabled { get; set; } = true; + + /// 触发冷却(秒)。 + public int CooldownSeconds { get; set; } = 3600; + + /// 最近触发时间(UTC 毫秒时间戳)。 + public long? LastTriggeredAt { get; set; } +} diff --git a/src/modules/monitoring/Domain/Values/SystemData.cs b/src/modules/monitoring/Domain/Values/SystemData.cs new file mode 100644 index 0000000..1b404ec --- /dev/null +++ b/src/modules/monitoring/Domain/Values/SystemData.cs @@ -0,0 +1,38 @@ +using Monitoring.Domain.Enums; + +namespace Monitoring.Domain.Values; + +/// +/// 外部系统 json_data 投影:承载可变/扩展字段。 +/// 凭证(Cookie/Header/Token)也内聚于此,避免单独建表;Credentials 列表为空时表示无凭证。 +/// Parameters 承载 Connector 专属配置(如 u号租的 sellerId/lookbackDays)。 +/// +public class SystemData +{ + /// 系统显示名称。 + public string Name { get; set; } = default!; + + /// 系统类型:1=UHaoZu, 100=GenericHttp。 + public ExternalSystemTypeEnum SystemType { get; set; } + + /// Base URL。 + public string BaseUrl { get; set; } = default!; + + /// 轮询间隔(秒),0=用默认。 + public int PollIntervalSeconds { get; set; } + + /// 是否启用。 + public bool IsEnabled { get; set; } = true; + + /// Connector 专属参数(如 sellerId/lookbackDays)。 + public Dictionary Parameters { get; set; } = new(); + + /// 凭证列表(Cookie/Header/Token),不再单独建表。 + public List Credentials { get; set; } = new(); + + /// 最近同步时间(UTC 毫秒时间戳)。 + public long? LastSyncedAt { get; set; } + + /// 最近同步任务 Id。 + public Guid? LastSyncJobId { get; set; } +}