refactor(data): 收口关系表运行时数据源
Some checks failed
Deploy Production / Build, push, deploy, verify (push) Has been cancelled
Some checks failed
Deploy Production / Build, push, deploy, verify (push) Has been cancelled
- 移除已迁移业务 AppData 运行时 fallback,改走领域 API 和关系表快读 - 补齐需求产品负责人、版本计划任务 JSON 和成员 username 回填迁移 - 统一治理字典入口,并补充 AI provider、数据源契约和领域服务测试 Co-Authored-By: Codex GPT-5 <codex@openai.com>
This commit is contained in:
@@ -8,7 +8,7 @@ import type { Requirement, RequirementStatus, SourceType } from './requirement';
|
||||
import type { TaskCategory } from './task-category';
|
||||
import type { TaskWorklog } from './task-worklog';
|
||||
import type { TestCase, TestCaseStatus } from './test-case';
|
||||
import type { VersionPlan, VersionPlanLog, VersionPlanRequirementCoverage } from './version-plan';
|
||||
import type { PlanTask, VersionPlan, VersionPlanLog, VersionPlanRequirementCoverage } from './version-plan';
|
||||
import type { WorkActivity, WorkActivityCategory, WorkActivityDraft, WorkActivitySourceType } from './work-activity';
|
||||
|
||||
export interface RootProject {
|
||||
@@ -117,6 +117,9 @@ interface DomainRequirementRow {
|
||||
creatorId?: string | null;
|
||||
creatorName?: string | null;
|
||||
creator?: { id?: string | null; name?: string | null } | null;
|
||||
productOwnerId?: string | null;
|
||||
productOwnerName?: string | null;
|
||||
productOwner?: { id?: string | null; name?: string | null } | null;
|
||||
createdAt?: string | Date | null;
|
||||
}
|
||||
|
||||
@@ -168,6 +171,7 @@ interface DomainVersionPlanRow {
|
||||
actualStartAt?: string | Date | null;
|
||||
completedAt?: string | Date | null;
|
||||
resultUrl?: string | null;
|
||||
tasks?: unknown;
|
||||
requirementCoverage?: unknown;
|
||||
logs?: unknown;
|
||||
createdAt?: string | Date | null;
|
||||
@@ -594,6 +598,7 @@ function toRequirementPayload(data: Partial<Requirement>) {
|
||||
...(data.sourceTarget !== undefined && { sourceTarget: data.sourceTarget }),
|
||||
...(data.platforms !== undefined && { platform: data.platforms.join(',') }),
|
||||
...(data.priority !== undefined && { priority: priorityToNumber(data.priority) }),
|
||||
...(data.productOwner !== undefined && { productOwnerId: data.productOwner }),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -613,6 +618,7 @@ function normalizeRequirement(row: DomainRequirementRow): Requirement {
|
||||
status: toRequirementStatus(row.status),
|
||||
priority: toPriority(row.priority),
|
||||
effort: 'M',
|
||||
productOwner: row.productOwner?.name ?? row.productOwnerName ?? row.productOwnerId ?? '',
|
||||
creator: row.creator?.name ?? row.creatorName ?? row.creatorId ?? '',
|
||||
createdAt: isoString(row.createdAt),
|
||||
};
|
||||
@@ -669,6 +675,7 @@ function toVersionPlanPayload(data: Partial<VersionPlan>) {
|
||||
...(data.actualStartAt !== undefined && { actualStartAt: data.actualStartAt }),
|
||||
...(data.completedAt !== undefined && { completedAt: data.completedAt }),
|
||||
...(data.resultUrl !== undefined && { resultUrl: data.resultUrl }),
|
||||
...(data.tasks !== undefined && { tasks: data.tasks }),
|
||||
...(data.linkedRequirementIds !== undefined && { linkedRequirementIds: data.linkedRequirementIds }),
|
||||
...(data.requirementCoverage !== undefined && { requirementCoverage: data.requirementCoverage }),
|
||||
...(data.logs !== undefined && { logs: data.logs }),
|
||||
@@ -686,7 +693,7 @@ function normalizeVersionPlan(row: DomainVersionPlanRow): VersionPlan {
|
||||
startTime: isoString(row.expectedStartAt),
|
||||
endTime: isoString(row.expectedEndAt),
|
||||
status: toPlanStatus(row.status),
|
||||
tasks: [],
|
||||
tasks: asArray<PlanTask>(row.tasks),
|
||||
completedRequirementIds: requirementCoverage
|
||||
.filter((item) => item?.status === 'completed')
|
||||
.map((item) => item.requirementId)
|
||||
|
||||
Reference in New Issue
Block a user