Skip to content
This repository has been archived by the owner on Nov 27, 2023. It is now read-only.

Commit

Permalink
Merge pull request #217 from KnisterPeter/gitlab-issues
Browse files Browse the repository at this point in the history
feat: add support for gitlab issues
  • Loading branch information
KnisterPeter authored Oct 3, 2017
2 parents 865db4b + a87f4c5 commit 51262af
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 3 deletions.
15 changes: 15 additions & 0 deletions src/provider/gitlab/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export interface GitLab {
getMergeRequests(id: string, parameters?: GetMergeRequestParameters): Promise<GitLabResponse<MergeRequest[]>>;
getMergeRequest(id: string, mr_iid: number): Promise<GitLabResponse<MergeRequest>>;
createMergeRequest(id: string, body: CreateMergeRequestBody): Promise<GitLabResponse<MergeRequest>>;
getProjectIssues(id: string, body: ProjectIssuesBody): Promise<GitLabResponse<Issue[]>>;
}

export interface GitLabResponse<T> {
Expand All @@ -20,6 +21,18 @@ export interface GitLabResponse<T> {
body: T;
}

export interface ProjectIssuesBody {
state?: 'opened' | 'closed';
order_by?: 'created_at' | 'updated_at';
sort?: 'asc' | 'desc';
}

export interface Issue {
iid: number;
title: string;
web_url: string;
}

export interface CreateMergeRequestBody {
source_branch: string;
target_branch: string;
Expand Down Expand Up @@ -137,6 +150,8 @@ namespace impl {
public getMergeRequest(): any {/* */}
@Post('/projects/:id/merge_requests')
public createMergeRequest(): any {/* */}
@Get('/projects/:id/issues')
public getProjectIssues(): any {/* */}
}

}
54 changes: 51 additions & 3 deletions src/provider/gitlab/repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,13 @@ import {
CreatePullRequestBody,
IssuesParameters
} from '../repository';
import { GitLab, Project, GetMergeRequestParameters, CreateMergeRequestBody } from './api';
import {
GitLab,
Project,
GetMergeRequestParameters,
CreateMergeRequestBody,
ProjectIssuesBody
} from './api';
import { GitLabMergeRequest } from './merge-request';

export class GitLabRepository implements Repository {
Expand Down Expand Up @@ -118,7 +124,49 @@ export class GitLabRepository implements Repository {
};
}

public async getIssues(_parameters?: IssuesParameters | undefined): Promise<Response<Issue[]>> {
throw new Error('Method not implemented.');
public async getIssues(parameters?: IssuesParameters | undefined): Promise<Response<Issue[]>> {
function getState(state: IssuesParameters['state']): ProjectIssuesBody['state'] {
switch (state) {
case 'open':
return 'opened';
case 'closed':
return 'closed';
}
return undefined;
}
function getOrderBy(orderBy: IssuesParameters['sort']): ProjectIssuesBody['order_by'] {
switch (orderBy) {
case 'created':
return 'created_at';
case 'updated':
return 'updated_at';
default:
return undefined;
}
}

const body: ProjectIssuesBody = {};
if (parameters) {
if (parameters.state && parameters.state !== 'all') {
body.state = getState(parameters.state);
}
if (parameters.sort) {
body.order_by = getOrderBy(parameters.sort);
}
if (parameters.direction) {
body.sort = parameters.direction;
}
}
const response = await this.client.getProjectIssues(
encodeURIComponent(this.project.path_with_namespace),
body
);
return {
body: response.body.map(issue => ({
number: issue.iid,
title: issue.title,
url: issue.web_url
}))
};
}
}

0 comments on commit 51262af

Please sign in to comment.