Skip to content

Commit dc2fcc1

Browse files
authored
Merge pull request #2 from danthekishan/fix-linear-create-issues
Fix Linear Graphql Client Issues when Creating Issue/s
2 parents 742dba6 + 44d112b commit dc2fcc1

File tree

5 files changed

+35
-15
lines changed

5 files changed

+35
-15
lines changed

src/__tests__/graphql-client.test.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import {
99
UpdateIssuesResponse,
1010
SearchIssuesInput,
1111
SearchIssuesResponse,
12-
DeleteIssueResponse
12+
DeleteIssueResponse,
13+
IssueBatchResponse
1314
} from '../features/issues/types/issue.types';
1415
import {
1516
ProjectInput,
@@ -144,7 +145,7 @@ describe('LinearGraphQLClient', () => {
144145
expect(mockRawRequest).toHaveBeenCalledWith(
145146
expect.any(String),
146147
expect.objectContaining({
147-
input: [input]
148+
input: input
148149
})
149150
);
150151

@@ -390,15 +391,15 @@ describe('LinearGraphQLClient', () => {
390391
}
391392
];
392393

393-
const result: CreateIssuesResponse = await graphqlClient.createIssues(issues);
394+
const result: IssueBatchResponse = await graphqlClient.createIssues(issues);
394395

395396
expect(result).toEqual(mockResponse.data);
396397
// Verify single mutation call
397398
expect(mockRawRequest).toHaveBeenCalledTimes(1);
398399
expect(mockRawRequest).toHaveBeenCalledWith(
399400
expect.any(String),
400401
expect.objectContaining({
401-
input: issues
402+
input: { issues }
402403
})
403404
);
404405
});

src/core/types/tool.types.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ export const toolSchemas = {
7070
description: 'Issue priority (0-4)',
7171
optional: true,
7272
},
73+
projectId: {
74+
type: 'string',
75+
description: 'Project ID',
76+
optional: true,
77+
},
7378
createAsUser: {
7479
type: 'string',
7580
description: 'Name to display for the created issue',
@@ -382,6 +387,16 @@ export const toolSchemas = {
382387
type: 'string',
383388
description: 'Team ID',
384389
},
390+
assigneeId: {
391+
type: 'string',
392+
description: 'Assignee user ID',
393+
optional: true,
394+
},
395+
priority: {
396+
type: 'number',
397+
description: 'Issue priority (0-4)',
398+
optional: true,
399+
},
385400
projectId: {
386401
type: 'string',
387402
description: 'Project ID',

src/features/issues/handlers/issue.handler.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import {
1515
UpdateIssuesResponse,
1616
SearchIssuesResponse,
1717
DeleteIssueResponse,
18-
Issue
18+
Issue,
19+
IssueBatchResponse
1920
} from '../types/issue.types.js';
2021

2122
/**
@@ -67,13 +68,13 @@ export class IssueHandler extends BaseHandler implements IssueHandlerMethods {
6768
throw new Error('Issues parameter must be an array');
6869
}
6970

70-
const result = await client.createIssues(args.issues) as CreateIssuesResponse;
71+
const result = await client.createIssues(args.issues) as IssueBatchResponse;
7172

72-
if (!result.issueCreate.success) {
73+
if (!result.issueBatchCreate.success) {
7374
throw new Error('Failed to create issues');
7475
}
7576

76-
const createdIssues = result.issueCreate.issues as Issue[];
77+
const createdIssues = result.issueBatchCreate.issues as Issue[];
7778

7879
return this.createResponse(
7980
`Successfully created ${createdIssues.length} issues:\n` +

src/graphql/client.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { LinearClient } from '@linear/sdk';
22
import { DocumentNode } from 'graphql';
33
import {
44
CreateIssueInput,
5+
CreateIssuesInput,
56
CreateIssueResponse,
67
CreateIssuesResponse,
78
UpdateIssueInput,
@@ -54,14 +55,16 @@ export class LinearGraphQLClient {
5455

5556
// Create single issue
5657
async createIssue(input: CreateIssueInput): Promise<CreateIssueResponse> {
57-
const { CREATE_ISSUES_MUTATION } = await import('./mutations.js');
58-
return this.execute<CreateIssueResponse>(CREATE_ISSUES_MUTATION, { input: [input] });
58+
const { CREATE_ISSUE_MUTATION } = await import('./mutations.js');
59+
return this.execute<CreateIssueResponse>(CREATE_ISSUE_MUTATION, { input: input });
5960
}
6061

6162
// Create multiple issues
62-
async createIssues(issues: CreateIssueInput[]): Promise<CreateIssuesResponse> {
63-
const { CREATE_ISSUES_MUTATION } = await import('./mutations.js');
64-
return this.execute<CreateIssuesResponse>(CREATE_ISSUES_MUTATION, { input: issues });
63+
async createIssues(issues: CreateIssueInput[]): Promise<IssueBatchResponse> {
64+
const { CREATE_BATCH_ISSUES } = await import('./mutations.js');
65+
return this.execute<IssueBatchResponse>(CREATE_BATCH_ISSUES, {
66+
input: { issues }
67+
});
6568
}
6669

6770
// Create a project

src/graphql/mutations.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { gql } from 'graphql-tag';
22

3-
export const CREATE_ISSUES_MUTATION = gql`
4-
mutation CreateIssues($input: [IssueCreateInput!]!) {
3+
export const CREATE_ISSUE_MUTATION = gql`
4+
mutation CreateIssues($input: IssueCreateInput!) {
55
issueCreate(input: $input) {
66
success
77
issue {

0 commit comments

Comments
 (0)