Skip to content

Commit

Permalink
refactor: Requiring content for the Note related APIs
Browse files Browse the repository at this point in the history
The Note APIs were  checking the options argument for a body parameter misleading the user to believe it was optional.

BREAKING CHANGE: Notes now require a body argument
  • Loading branch information
jdalrymple committed May 25, 2019
1 parent 1ba9126 commit 7453779
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 26 deletions.
3 changes: 1 addition & 2 deletions src/services/EpicNotes.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { ResourceNotes } from '../templates';
import { BaseModelContructorOptions } from '../infrastructure/BaseService';

class EpicNotes extends ResourceNotes {
constructor(options: BaseModelContructorOptions) {
constructor(options: BaseServiceOptions) {
super('groups', 'epics', options);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/services/IssueNotes.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ResourceNotes } from '../templates';

class IssueNotes extends ResourceNotes {
constructor(options: temporaryAny) {
constructor(options: BaseServiceOptions) {
super('projects', 'issues', options);
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/services/MergeRequestNotes.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { ResourceNotes } from '../templates';
import { BaseModelContructorOptions } from '../infrastructure/BaseService';

class MergeRequestNotes extends ResourceNotes {
constructor(options: BaseModelContructorOptions) {
constructor(options: BaseServiceOptions) {
super('projects', 'merge_requests', options);
}
}
Expand Down
3 changes: 1 addition & 2 deletions src/services/ProjectSnippetNotes.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { ResourceNotes } from '../templates';
import { BaseModelContructorOptions } from '../infrastructure/BaseService';

class ProjectSnippetNotes extends ResourceNotes {
constructor(options: BaseModelContructorOptions) {
constructor(options: BaseServiceOptions) {
super('projects', 'snippets', options);
}
}
Expand Down
51 changes: 32 additions & 19 deletions src/templates/ResourceNotes.ts
Original file line number Diff line number Diff line change
@@ -1,50 +1,63 @@
import URLJoin from 'url-join';
import { BaseService, RequestHelper } from '../infrastructure';
import { BaseModelContructorOptions } from '../infrastructure/BaseService';
import { RequestOptions } from '../infrastructure/RequestHelper';

class ResourceNotes extends BaseService {
protected resource2Type: string;

constructor(resourceType: string, resource2Type: string, baseParams: BaseModelContructorOptions) {
super(baseParams);
constructor(
resourceType: string,
resource2Type: string,
options: BaseServiceOptions,
) {
super({ url: resourceType, ...options });

this.url = URLJoin(this.url, resourceType);
this.resource2Type = resource2Type;
}

all(resourceId: ResourceId, resource2Id: Resource2Id, options: RequestOptions) {
all(resourceId: ResourceId, resource2Id: ResourceId, options?: PaginatedRequestOptions) {
const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent);

return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, options);
}

create(resourceId: ResourceId, resource2Id: Resource2Id, options: RequestOptions) {
if (!options.body) throw new Error('Missing required property: body');

create(
resourceId: ResourceId,
resource2Id: ResourceId,
body: string,
options?: BaseRequestOptions,
) {
const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent);

return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, options);
return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, {
body,
...options,
});
}

edit(resourceId: ResourceId, resource2Id: Resource2Id, noteId: NoteId, options: RequestOptions) {
if (!options.body) throw new Error('Missing required property: body');

edit(
resourceId: ResourceId,
resource2Id: ResourceId,
noteId: NoteId,
body: string,
options?: BaseRequestOptions,
) {
const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent);

return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options);
return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, {
body,
...options,
});
}

remove(resourceId: ResourceId, resource2Id: Resource2Id, noteId: NoteId) {
remove(resourceId: ResourceId, resource2Id: ResourceId, noteId: NoteId, options?: Sudo) {
const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent);

return RequestHelper.delete(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`);
return RequestHelper.del(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options);
}

show(resourceId: ResourceId, resource2Id: Resource2Id, noteId: NoteId) {
show(resourceId: ResourceId, resource2Id: ResourceId, noteId: NoteId, options?: Sudo) {
const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent);

return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`);
return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options);
}
}

Expand Down

0 comments on commit 7453779

Please sign in to comment.