From ec9f69a9eb477e993ddb64fae1a2bc01916e0dbb Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 21:05:46 -0400 Subject: [PATCH] Adding dicussions API --- src/index.js | 3 ++ src/services/EpicDiscussions.js | 9 ++++ src/services/IssueDiscussions.js | 9 ++++ src/services/ProjectSnippetDiscussions.js | 9 ++++ src/services/index.js | 5 ++- src/templates/ResourceDiscussions.js | 53 +++++++++++++++++++++++ 6 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/services/EpicDiscussions.js create mode 100644 src/services/IssueDiscussions.js create mode 100644 src/services/ProjectSnippetDiscussions.js create mode 100644 src/templates/ResourceDiscussions.js diff --git a/src/index.js b/src/index.js index 554f0752..200de0a1 100644 --- a/src/index.js +++ b/src/index.js @@ -19,6 +19,7 @@ export const GroupsBundle = init(Pick(APIServices, [ 'Epics', 'EpicIssues', 'EpicNotes', + 'EpicDiscussions', ])); // Users @@ -39,6 +40,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'Environments', 'Issues', 'IssueNotes', + 'IssueDiscussions', 'Jobs', 'Labels', 'MergeRequests', @@ -57,6 +59,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'ProjectMilestones', 'ProjectSnippet', 'ProjectSnippetNotes', + 'ProjectSnippetDiscussions', 'ProtectedBranches', 'ProjectVariables', 'Repositories', diff --git a/src/services/EpicDiscussions.js b/src/services/EpicDiscussions.js new file mode 100644 index 00000000..eb96930d --- /dev/null +++ b/src/services/EpicDiscussions.js @@ -0,0 +1,9 @@ +import { ResourceDiscussions } from '../templates'; + +class EpicDiscussions extends ResourceDiscussions { + constructor(options) { + super('groups', 'epics', options); + } +} + +export default EpicDiscussions; diff --git a/src/services/IssueDiscussions.js b/src/services/IssueDiscussions.js new file mode 100644 index 00000000..95f0aeb3 --- /dev/null +++ b/src/services/IssueDiscussions.js @@ -0,0 +1,9 @@ +import { ResourceDiscussions } from '../templates'; + +class IssueDiscussions extends ResourceDiscussions { + constructor(options) { + super('projects', 'issues', options); + } +} + +export default IssueDiscussions; diff --git a/src/services/ProjectSnippetDiscussions.js b/src/services/ProjectSnippetDiscussions.js new file mode 100644 index 00000000..ac6f074b --- /dev/null +++ b/src/services/ProjectSnippetDiscussions.js @@ -0,0 +1,9 @@ +import { ResourceDiscussions } from '../templates'; + +class ProjectSnippetDiscussions extends ResourceDiscussions { + constructor(options) { + super('projects', 'snippets', options); + } +} + +export default ProjectSnippetDiscussions; diff --git a/src/services/index.js b/src/services/index.js index aff502ab..58b80d87 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -11,6 +11,7 @@ export GroupVariables from './GroupVariables'; export Epics from './Epics'; export EpicIssues from './EpicIssues'; export EpicNotes from './EpicNotes'; +export EpicDiscussions from './EpicDiscussions'; // Users export Users from './Users'; @@ -27,6 +28,7 @@ export DeployKeys from './DeployKeys'; export Environments from './Environments'; export Issues from './Issues'; export IssueNotes from './IssueNotes'; +export IssueDiscussions from './IssueDiscussions'; export IssueAwardEmojis from './IssueAwardEmojis'; export Jobs from './Jobs'; export Labels from './Labels'; @@ -44,8 +46,9 @@ export ProjectIssueBoards from './ProjectIssueBoards'; export ProjectHooks from './ProjectHooks'; export ProjectMembers from './ProjectMembers'; export ProjectMilestones from './ProjectMilestones'; -export ProjectSnippet from './ProjectSnippet'; +export ProjectSnippets from './ProjectSnippets'; export ProjectSnippetNotes from './ProjectSnippetNotes'; +export ProjectSnippetDiscussions from './ProjectSnippetDiscussions'; export ProjectSnippetAwardEmojis from './ProjectSnippetAwardEmojis'; export ProtectedBranches from './ProtectedBranches'; export ProjectVariables from './ProjectVariables'; diff --git a/src/templates/ResourceDiscussions.js b/src/templates/ResourceDiscussions.js new file mode 100644 index 00000000..069d2973 --- /dev/null +++ b/src/templates/ResourceDiscussions.js @@ -0,0 +1,53 @@ +import URLJoin from 'url-join'; +import { BaseService, RequestHelper } from '../infrastructure'; + +class ResourceDiscussions extends BaseService { + constructor(resourceType, resource2Type, ...args) { + super(...args); + + this.url = URLJoin(this.url, resourceType); + this.resource2Type = resource2Type; + } + + addNote(resourceId, resource2Id, discussiodId, noteId, options) { + if (!options.body) throw new Error('Missing required property: body'); + + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId].map(encodeURIComponent); + + return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, options); + } + + all(resourceId, resource2Id, options) { + const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/discussions`, options); + } + + create(resourceId, resource2Id, options) { + if (!options.body) throw new Error('Missing required property: body'); + + const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); + + return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/discussions`, options); + } + + editNote(resourceId, resource2Id, discussiodId, noteId, body) { + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId].map(encodeURIComponent); + + return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, { body }); + } + + removeNote(resourceId, resource2Id, discussiodId, noteId) { + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId].map(encodeURIComponent); + + return RequestHelper.delete(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`); + } + + show(resourceId, resource2Id, discussiodId) { + const [rId, r2Id, dId] = [resourceId, resource2Id, discussiodId].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}`); + } +} + +export default ResourceDiscussions;