Skip to content

Commit ddbeed0

Browse files
Query MRs by creation time (#38)
* add querying mrs by a time period * fix: export TimePeriod from module, change import in test to type import * fix: remove criminal filter from GitHub integration
1 parent 146a176 commit ddbeed0

File tree

5 files changed

+26
-16
lines changed

5 files changed

+26
-16
lines changed

packages/functions/extract/src/get-merge-requests.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Database from "better-sqlite3";
99
import { mergeRequests } from '@acme/extract-schema';
1010
import type { Context } from './config';
1111
import type { GetMergeRequestsSourceControl, GetMergeRequestsEntities } from './get-merge-requests';
12-
import type { SourceControl } from '@acme/source-control';
12+
import type { SourceControl, TimePeriod } from '@acme/source-control';
1313

1414
let betterSqlite: ReturnType<typeof Database>;
1515
let db: ReturnType<typeof drizzle>;
@@ -24,7 +24,7 @@ beforeAll(() => {
2424

2525
migrate(db, { migrationsFolder: "../../../migrations/extract" });
2626

27-
fetchMergeRequests = jest.fn((externalRepositoryId: number, namespaceName:string, repositoryName: string, repositoryId: number, page?: number, perPage?: number) => {
27+
fetchMergeRequests = jest.fn((externalRepositoryId: number, namespaceName:string, repositoryName: string, repositoryId: number, creationPeriod?: TimePeriod, page?: number, perPage?: number) => {
2828

2929
switch (externalRepositoryId) {
3030
case 1000:

packages/integrations/source-control/src/github/index.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Octokit } from '@octokit/rest';
33
import parseLinkHeader from "parse-link-header";
44

55
import type { NewRepository, NewNamespace, NewMergeRequest } from "@acme/extract-schema";
6-
import type { Pagination } from '../source-control';
6+
import type { Pagination, TimePeriod } from '../source-control';
77

88
export class GitHubSourceControl implements SourceControl {
99

@@ -33,7 +33,8 @@ export class GitHubSourceControl implements SourceControl {
3333
}
3434
}
3535

36-
async fetchMergeRequests(externalRepositoryId: number, namespaceName: string, repositoryName: string, repositoryId: number, page?: number, perPage?: number): Promise<{ mergeRequests: NewMergeRequest[]; pagination: Pagination; }> {
36+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
37+
async fetchMergeRequests(externalRepositoryId: number, namespaceName: string, repositoryName: string, repositoryId: number, creationPeriod: TimePeriod = {}, page?: number, perPage?: number): Promise<{ mergeRequests: NewMergeRequest[]; pagination: Pagination; }> {
3738
page = page || 1;
3839
perPage = perPage || 30;
3940

@@ -42,7 +43,8 @@ export class GitHubSourceControl implements SourceControl {
4243
repo: repositoryName,
4344
page: page,
4445
per_page: perPage,
45-
state: "all"
46+
state: "all",
47+
sort: "created",
4648
});
4749

4850
const linkHeader = parseLinkHeader(result.headers.link) || { next: { per_page: perPage } };
@@ -54,11 +56,12 @@ export class GitHubSourceControl implements SourceControl {
5456
} satisfies Pagination;
5557

5658
return {
57-
mergeRequests: result.data.map(mergeRequest => ({
58-
externalId: mergeRequest.id,
59-
mergeRequestId: mergeRequest.number,
60-
repositoryId
61-
})),
59+
mergeRequests: result.data
60+
.map(mergeRequest => ({
61+
externalId: mergeRequest.id,
62+
mergeRequestId: mergeRequest.number,
63+
repositoryId
64+
})),
6265
pagination
6366
}
6467
}

packages/integrations/source-control/src/gitlab/index.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { SourceControl, Pagination } from "../source-control";
1+
import type { SourceControl, Pagination, TimePeriod } from "../source-control";
22
import type { Gitlab as GitlabType } from '@gitbeaker/core';
33
import type { NewRepository, NewNamespace, NewMergeRequest } from "@acme/extract-schema";
44
import { Gitlab } from '@gitbeaker/rest';
@@ -31,13 +31,15 @@ export class GitlabSourceControl implements SourceControl {
3131
}
3232

3333
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await
34-
async fetchMergeRequests(externalRepositoryId: number, namespaceName = '', repositoryName = '', repositoryId: number, page?: number, perPage?: number): Promise<{ mergeRequests: NewMergeRequest[], pagination: Pagination }> {
34+
async fetchMergeRequests(externalRepositoryId: number, namespaceName = '', repositoryName = '', repositoryId: number, creationPeriod: TimePeriod = {}, page?: number, perPage?: number): Promise<{ mergeRequests: NewMergeRequest[], pagination: Pagination }> {
3535
const { data, paginationInfo } = await this.api.MergeRequests.all({
3636
projectId: externalRepositoryId,
37-
page,
37+
page,
3838
perPage,
3939
pagination: 'offset',
40-
showExpanded: true
40+
showExpanded: true,
41+
createdAfter: creationPeriod.from?.toISOString(),
42+
createdBefore: creationPeriod.to?.toISOString(),
4143
});
4244
return {
4345
mergeRequests: data.map((mr) => ({
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
export type { Pagination, SourceControl } from './source-control';
1+
export type { Pagination, TimePeriod, SourceControl } from './source-control';
22
export { GitlabSourceControl } from './gitlab';
33
export { GitHubSourceControl } from './github';

packages/integrations/source-control/src/source-control.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ export type Pagination = {
66
totalPages: number;
77
};
88

9+
export type TimePeriod = {
10+
from?: Date;
11+
to?: Date;
12+
}
13+
914
export interface SourceControl {
1015
fetchRepository(externalRepositoryId: number, namespaceName: string, repositoryName: string): Promise<{ repository: NewRepository, namespace?: NewNamespace }>;
11-
fetchMergeRequests(externalRepositoryId: number, namespaceName: string, repositoryName: string, repositoryId: number, page?: number, perPage?: number): Promise<{ mergeRequests: NewMergeRequest[], pagination: Pagination }>;
16+
fetchMergeRequests(externalRepositoryId: number, namespaceName: string, repositoryName: string, repositoryId: number, creationPeriod?: TimePeriod, page?: number, perPage?: number): Promise<{ mergeRequests: NewMergeRequest[], pagination: Pagination }>;
1217
}

0 commit comments

Comments
 (0)