| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- namespace Admin.NET.Plugin.AiDOP.Entity.S8;
- /// <summary>
- /// S8-RESPONSIBILITY-POOL-1:规则的<b>复核账号池</b>与<b>升级账号池</b>成员。
- ///
- /// <para><b>为什么不含 HANDLER</b>:处理账号池已有 <see cref="AdoS8RuleHandlerUser"/>,
- /// 且就绪门禁、认领资格、可见性收敛、通知收件人解析四条生产链路都已依赖它。
- /// 把它迁进本表只换来"三种责任长得一样"的观感,代价却是动四条已经跑通的链路 ——
- /// 存储差异由统一 reader 收敛在一处,调用方看到的仍是同一套 API。</para>
- ///
- /// <para><b>身份用 <c>rule_code</c> 而不是 <c>rule_id</c></b>:与
- /// <see cref="AdoS8RuleHandlerUser"/> 同口径。<c>ado_s8_watch_rule</c> 的行会被
- /// clean reset + provisioning 重建、id 全部变化;绑 id 会让责任池在那一刻集体失联,
- /// 而且不报错 —— 规则照常跑,只是谁都不再"负责"它。</para>
- ///
- /// <para><b>唯一索引带 <c>responsibility_type</c></b>:同一个账号既是复核人又是升级人
- /// 是合法配置,两条行必须能共存;而"同一类型下重复配同一人"必须在 DB 层挡住,
- /// 不能只靠应用层自觉。</para>
- /// </summary>
- [SugarTable("ado_s8_rule_responsibility_user", "S8 规则复核/升级账号池")]
- [SugarIndex("uk_s8_rule_responsibility", nameof(TenantId), OrderByType.Asc, nameof(RuleCode), OrderByType.Asc, nameof(ResponsibilityType), OrderByType.Asc, nameof(UserId), OrderByType.Asc, IsUnique = true)]
- [SugarIndex("idx_s8_rule_responsibility_user", nameof(TenantId), OrderByType.Asc, nameof(UserId), OrderByType.Asc)]
- public class AdoS8RuleResponsibilityUser
- {
- [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")]
- public long Id { get; set; }
- /// <summary>租户。<b>唯一安全边界</b>;工厂不参与。</summary>
- [SugarColumn(ColumnName = "tenant_id", ColumnDataType = "bigint")]
- public long TenantId { get; set; }
- /// <summary>规则编码(与 provisioning 身份口径一致,不用 rule_id)。</summary>
- [SugarColumn(ColumnName = "rule_code", Length = 128)]
- public string RuleCode { get; set; } = string.Empty;
- /// <summary>责任类型:<c>REVIEWER</c> / <c>ESCALATION</c>(见 <c>S8ResponsibilityType</c>)。</summary>
- [SugarColumn(ColumnName = "responsibility_type", Length = 32)]
- public string ResponsibilityType { get; set; } = string.Empty;
- /// <summary>成员账号(<c>SysUser.Id</c>)。写入时经 <c>S8UserScopeValidator</c> 校验同租户 + 启用。</summary>
- [SugarColumn(ColumnName = "user_id", ColumnDataType = "bigint")]
- public long UserId { get; set; }
- [SugarColumn(ColumnName = "created_at")]
- public DateTime CreatedAt { get; set; } = DateTime.Now;
- [SugarColumn(ColumnName = "created_by", Length = 64, IsNullable = true)]
- public string? CreatedBy { get; set; }
- }
|