feat(ai): 优化拆解目标和负责人推荐
This commit is contained in:
29
apps/web/lib/ai-assignee-recommendation.ts
Normal file
29
apps/web/lib/ai-assignee-recommendation.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import type { VersionMember } from './derive';
|
||||
|
||||
export interface RecommendedAssigneeDraft {
|
||||
recommendedAssigneeName?: string;
|
||||
recommendedAssigneeReason?: string;
|
||||
}
|
||||
|
||||
export interface ResolvedRecommendedAssignee {
|
||||
name: string;
|
||||
role: VersionMember['role'];
|
||||
reason?: string;
|
||||
}
|
||||
|
||||
export function resolveRecommendedAssignee(
|
||||
draft: object,
|
||||
members: VersionMember[] | undefined,
|
||||
): ResolvedRecommendedAssignee | undefined {
|
||||
const recommendation = draft as RecommendedAssigneeDraft;
|
||||
if (!recommendation.recommendedAssigneeName) return undefined;
|
||||
const member = (members ?? []).find((candidate) => candidate.name === recommendation.recommendedAssigneeName);
|
||||
if (!member) return undefined;
|
||||
|
||||
const reason = recommendation.recommendedAssigneeReason?.trim();
|
||||
return {
|
||||
name: member.name,
|
||||
role: member.role,
|
||||
...(reason ? { reason } : {}),
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user