stream interface, data handling logic

This commit is contained in:
Rupenieks
2020-05-19 15:19:35 +02:00
parent 6e0a8a143a
commit 110f368bca
4 changed files with 248 additions and 57 deletions

View File

@@ -23,6 +23,8 @@ import {
import { snakeCase } from 'change-case';
import { streamFields, streamOperations } from './StreamDescription';
import { userOperations, userFields } from './UserDescription';
import { IStream } from './StreamInterface';
import { validateJSON } from './GenericFunctions';
export class Zulip implements INodeType {
description: INodeTypeDescription = {
@@ -220,6 +222,145 @@ export class Zulip implements INodeType {
responseData.uri = `${credentials!.url}${responseData.uri}`;
}
}
if (resource === 'stream') {
const body: IStream = {};
if (operation === 'getAll') {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
if (additionalFields.includePublic) {
body.include_public = additionalFields.includePublic as boolean;
}
if (additionalFields.includeSubscribed) {
body.include_subscribed = additionalFields.includeSubscribed as boolean;
}
if (additionalFields.includeAllActive) {
body.include_all_active = additionalFields.includeAllActive as boolean;
}
if (additionalFields.includeDefault) {
body.include_default = additionalFields.includeDefault as boolean;
}
if (additionalFields.includeOwnersubscribed) {
body.include_owner_subscribed = additionalFields.includeOwnersubscribed as boolean;
}
responseData = await zulipApiRequest.call(this, 'GET', `/streams`, body);
}
if (operation === 'getSubscribed') {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
if (additionalFields.includeSubscribers) {
body.include_subscribers = additionalFields.includeSubscribers as boolean;
}
responseData = await zulipApiRequest.call(this, 'GET', `/users/me/subscriptions`, body);
}
if (operation === 'create') {
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
if (jsonParameters) {
const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i) as string;
if (additionalFieldsJson !== '') {
if (validateJSON(additionalFieldsJson) !== undefined) {
Object.assign(body, JSON.parse(additionalFieldsJson));
} else {
throw new Error('Additional fields must be a valid JSON');
}
}
} else {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
if (additionalFields.subscriptions) {
//@ts-ignore
body.subscriptions = additionalFields.subscriptions.properties as [{}];
}
if (additionalFields.inviteOnly) {
body.invite_only = additionalFields.inviteOnly as boolean;
}
if (additionalFields.principals) {
//@ts-ignore
body.principals = additionalFields.principals.properties as string[];
}
if (additionalFields.authorizationErrorsFatal) {
body.authorization_errors_fatal = additionalFields.authorizationErrorsFatal as boolean;
}
if (additionalFields.historyPublicToSubscribers) {
body.history_public_to_subscribers = additionalFields.historyPublicToSubscribers as boolean;
}
if (additionalFields.streamPostPolicy) {
body.stream_post_policy = additionalFields.streamPostPolicy as number;
}
if (additionalFields.announce) {
body.announce = additionalFields.announce as boolean;
}
}
responseData = await zulipApiRequest.call(this, 'POST', `/users/me/subscriptions`, body);
}
if (operation === 'delete') {
const streamId = this.getNodeParameter('streamId', i) as string;
responseData = await zulipApiRequest.call(this, 'POST', `streams/${streamId}`, {});
}
if (operation === 'update') {
const streamId = this.getNodeParameter('streamId', i) as string;
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
if (jsonParameters) {
const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i) as string;
if (additionalFieldsJson !== '') {
if (validateJSON(additionalFieldsJson) !== undefined) {
Object.assign(body, JSON.parse(additionalFieldsJson));
} else {
throw new Error('Additional fields must be a valid JSON');
}
}
} else {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
if (additionalFields.description) {
body.description = additionalFields.description as string;
}
if (additionalFields.newName) {
body.new_name = additionalFields.newName as string;
}
if (additionalFields.isPrivate) {
body.is_private = additionalFields.isPrivate as boolean;
}
if (additionalFields.isAnnouncementOnly) {
body.is_announcement_only = additionalFields.isAnnouncementOnly as boolean;
}
if (additionalFields.streamPostPolicy) {
body.stream_post_policy = additionalFields.streamPostPolicy as number;
}
if (additionalFields.historyPublicToSubscribers) {
body.history_public_to_subscribers = additionalFields.historyPublicToSubscribers as boolean;
}
responseData = await zulipApiRequest.call(this, 'PATCH', `/streams/${streamId}`, body);
}
}
}
if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData as IDataObject[]);
} else {