@@ -6,17 +6,18 @@ import { EventHandler } from "sst/node/event-bus";
6
6
7
7
import {
8
8
getMergeRequests ,
9
- getPaginationData ,
10
9
type Context ,
11
10
type GetMergeRequestsEntities ,
12
11
type GetMergeRequestsSourceControl ,
13
12
} from "@acme/extract-functions" ;
14
- import { mergeRequests } from "@acme/extract-schema" ;
13
+ import { mergeRequests , namespaces , repositories } from "@acme/extract-schema" ;
15
14
import { GitHubSourceControl , GitlabSourceControl } from "@acme/source-control" ;
16
15
17
- import { extractRepositoryEvent } from "./events" ;
16
+ import { extractMergeRequestsEvent , extractRepositoryEvent } from "./events" ;
18
17
import { extractMergeRequestMessage } from "./messages" ;
18
+ import type { extractRepositoryData } from "./messages" ;
19
19
import { QueueHandler } from "./create-message" ;
20
+ import { eq } from "drizzle-orm" ;
20
21
21
22
const clerkClient = Clerk ( { secretKey : Config . CLERK_SECRET_KEY } ) ;
22
23
const client = createClient ( {
@@ -58,38 +59,57 @@ const initSourceControl = async (userId: string, sourceControl: 'github' | 'gitl
58
59
}
59
60
60
61
export const eventHandler = EventHandler ( extractRepositoryEvent , async ( evt ) => {
62
+ if ( ! evt . properties . namespaceId ) throw new Error ( "Missing namespaceId" ) ;
63
+
64
+ const repository = await db . select ( ) . from ( repositories ) . where ( eq ( repositories . id , evt . properties . repositoryId ) ) . get ( ) ;
65
+ const namespace = await db . select ( ) . from ( namespaces ) . where ( eq ( namespaces . id , evt . properties . namespaceId ) ) . get ( ) ;
66
+
67
+ if ( ! repository ) throw new Error ( "invalid repo id" ) ;
68
+ if ( ! namespace ) throw new Error ( "Invalid namespace id" ) ;
61
69
62
- const externalRepositoryId = evt . properties . repository . externalId ;
63
- const repositoryName = evt . properties . repository . name ;
64
- const namespace = evt . properties . namespace ;
65
- const repository = evt . properties . repository ;
66
70
const sourceControl = evt . metadata . sourceControl ;
67
- const repositoryId = evt . properties . repository . id ;
68
71
69
72
context . integrations . sourceControl = await initSourceControl ( evt . metadata . userId , sourceControl )
70
73
71
- const { paginationInfo } = await getPaginationData (
72
- {
73
- externalRepositoryId : externalRepositoryId ,
74
- namespaceName : namespace ?. name || "" ,
75
- repositoryName : repositoryName ,
76
- repositoryId : repositoryId ,
77
- } ,
78
- context ,
79
- ) ;
74
+ const { mergeRequests, paginationInfo } = await getMergeRequests (
75
+ {
76
+ externalRepositoryId : repository . externalId ,
77
+ namespaceName : namespace ?. name || "" ,
78
+ repositoryName : repository . name ,
79
+ repositoryId : repository . id ,
80
+ perPage : 10 ,
81
+ } , context ,
82
+ ) ;
83
+
84
+ await extractMergeRequestsEvent . publish ( { mergeRequestIds : mergeRequests . map ( mr => mr . id ) } , {
85
+ version : 1 ,
86
+ caller : 'extract-merge-requests' ,
87
+ sourceControl,
88
+ userId : evt . metadata . userId ,
89
+ timestamp : new Date ( ) . getTime ( ) ,
90
+ } ) ;
91
+
92
+ const arrayOfExtractMergeRequests : extractRepositoryData [ ] = [ ] ;
93
+ for ( let i = 2 ; i <= paginationInfo . totalPages ; i ++ ) {
94
+ arrayOfExtractMergeRequests . push ( {
95
+ repository,
96
+ namespace : namespace ,
97
+ pagination : {
98
+ page : i ,
99
+ perPage : paginationInfo . perPage ,
100
+ totalPages : paginationInfo . totalPages
101
+ }
102
+ } ) ;
103
+ }
104
+
105
+ await extractMergeRequestMessage . sendAll ( arrayOfExtractMergeRequests , {
106
+ version : 1 ,
107
+ caller : 'extract-merge-requests' ,
108
+ sourceControl,
109
+ userId : evt . metadata . userId ,
110
+ timestamp : new Date ( ) . getTime ( ) ,
111
+ } ) ;
80
112
81
- for ( let index = 1 ; index <= paginationInfo . totalPages ; index ++ ) {
82
-
83
- await extractMergeRequestMessage . send ( {
84
- repository,
85
- namespace,
86
- pagination : {
87
- page : index ,
88
- perPage : paginationInfo . perPage ,
89
- totalPages : paginationInfo . totalPages
90
- }
91
- } , { caller : 'extract-merge-requests' , timestamp : new Date ( ) . getTime ( ) , version : 1 , sourceControl, userId : evt . metadata . userId } ) ;
92
- }
93
113
} ) ;
94
114
95
115
export const queueHandler = QueueHandler ( extractMergeRequestMessage , async ( message ) => {
@@ -103,8 +123,7 @@ export const queueHandler = QueueHandler(extractMergeRequestMessage, async (mess
103
123
104
124
const { namespace, pagination, repository} = message . content ;
105
125
106
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
107
- const { mergeRequests } = await getMergeRequests (
126
+ const { mergeRequests} = await getMergeRequests (
108
127
{
109
128
externalRepositoryId : repository . externalId ,
110
129
namespaceName : namespace ?. name || "" ,
@@ -115,4 +134,13 @@ export const queueHandler = QueueHandler(extractMergeRequestMessage, async (mess
115
134
} ,
116
135
context ,
117
136
) ;
137
+
138
+ await extractMergeRequestsEvent . publish ( { mergeRequestIds : mergeRequests . map ( mr => mr . id ) } , {
139
+ version : 1 ,
140
+ caller : 'extract-merge-requests' ,
141
+ sourceControl : message . metadata . sourceControl ,
142
+ userId : message . metadata . userId ,
143
+ timestamp : new Date ( ) . getTime ( ) ,
144
+ } ) ;
145
+
118
146
} )
0 commit comments