Review an automatic reviewer assignment service

src/reviewer-assignment-types.tsTypeScript
@@ -0,0 +1,49 @@
1+export type Specialty = "backend" | "frontend" | "security";
2+
3+export interface Engineer {
4+ id: string;
5+ team: string;
6+ active: boolean;
7+ outOfOffice: boolean;
8+ specialties: Specialty[];
9+ openReviewCount: number;
10+ lastAssignedAt: Date | null;
11+}
12+
13+export interface PullRequest {
14+ number: number;
15+ authorId: string;
16+ owningTeam: string;
17+ changedFiles: string[];
18+}
19+
20+export interface ReviewerAssignmentDependencies {
21+ github: {
22+ requestReviewers(pullRequestNumber: number, reviewerIds: string[]): Promise<void>;
23+ };
24+ audit: {
25+ record(event: {
26+ type: "reviewers_assigned";
27+ pullRequestNumber: number;
28+ reviewerIds: string[];
29+ }): Promise<void>;
30+ };
31+}
32+
33+export interface AssignReviewersInput {
34+ pullRequest: PullRequest;
35+ engineers: Engineer[];
36+ dependencies: ReviewerAssignmentDependencies;
37+}
38+
39+export interface PullRequestOpenedEvent {
40+ deliveryId: string;
41+ pullRequest: PullRequest;
42+ engineers: Engineer[];
43+}
44+
45+export interface WebhookResponse {
46+ status: 200 | 500;
47+ retry: boolean;
48+ reviewerIds?: string[];
49+}