Compare commits

...
39 Commits
Author SHA1 Message Date
Rodrigo Zamboni b49633cbc2 Merge pull request #54 from dadosfera/beta
Beta
2022-04-18 13:58:14 -03:00
Rodrigo Zamboni 4d956e55c6 Merge pull request #53 from dadosfera/alpha
Alpha
2022-04-18 12:18:28 -03:00
Rodrigo Zamboni 735703bf3b Merge pull request #52 from dadosfera/feat/activatePipeline
Feat/activate pipeline
2022-04-18 11:54:43 -03:00
rodrigo.zamboni 93cdc3f030 UPDATE: remove unescessary console log 2022-04-18 11:50:17 -03:00
rodrigo.zamboni 12b8b5926c UPDATE: Created Trigger Pipeline route 2022-04-18 11:44:19 -03:00
rodrigo.zamboni 1643096d47 Created Trigger Pipeline route 2022-04-18 11:43:36 -03:00
Rodrigo Zamboni 8a519ac217 Merge pull request #51 from dadosfera/beta
Beta
2022-04-14 15:33:36 -03:00
Victor Radael ffa69a0cf5 Merge pull request #50 from dadosfera/alpha
Alpha
2022-04-14 15:14:12 -03:00
Rodrigo Zamboni 7722e380e3 Merge pull request #49 from dadosfera/authFix
FIX: using Unauth nest function
2022-04-14 15:01:18 -03:00
rodrigo.zamboni ecdc7b4eb6 FIX: using Unauth nest function 2022-04-14 14:56:18 -03:00
rodrigo.zamboni 7d14080ac1 FIX: Invalid auth credentials return 2022-04-14 14:48:40 -03:00
Victor Radael 7e7deba2ab FIX: CI 2022-04-12 18:10:40 -03:00
Victor Radael e425e90eeb FIX: CI 2022-04-12 17:59:41 -03:00
Victor Radael 45f35b4e39 Merge branch 'alpha' into main 2022-04-12 17:44:29 -03:00
Victor Radael d450acd007 FIX: CI 2022-04-12 17:43:46 -03:00
Victor Radael e9c1dfc320 Merge pull request #48 from dadosfera/beta
Beta
2022-04-12 17:20:18 -03:00
Rodrigo Zamboni 67484cbef8 Merge pull request #47 from dadosfera/alpha
Alpha
2022-04-12 17:07:57 -03:00
rodrigo.zamboni 740be1d98b FIX: CI 2022-04-12 16:20:03 -03:00
rodrigo.zamboni b9989d86c1 Merge branch 'alpha' of https://github.com/dadosfera/maestro into alpha 2022-04-12 16:15:25 -03:00
rodrigo.zamboni 9b3a127f6a fixed authorization on case of missing Authorization header 2022-04-12 16:15:04 -03:00
Victor Radael 55028c4b83 Merge pull request #46 from dadosfera/alpha
Alpha
2022-04-08 13:02:06 -03:00
Victor Radael 7d5dee4b0c FIX: Deploy 2022-04-08 12:48:40 -03:00
Victor Radael 708bf2f585 FIX: Deploy 2022-04-07 18:41:39 -03:00
Rodrigo Zamboni 1d53226540 Merge pull request #45 from dadosfera/alpha
FIX: CI
2022-04-07 18:12:58 -03:00
Victor Radael 5f6ae5d512 FIX: CI 2022-04-07 17:54:14 -03:00
Rodrigo Zamboni c51092260a Merge pull request #44 from dadosfera/alpha
Alpha
2022-04-07 16:54:25 -03:00
Victor Radael 3add8b026e Merge branch 'alpha' of https://github.com/dadosfera/maestro into alpha 2022-04-07 16:44:10 -03:00
Victor Radael 42726b805b FIX: Ci 2022-04-07 16:43:59 -03:00
Victor Radael 8d8c5c000e Merge pull request #43 from dadosfera/alpha
Deploy STG
2022-04-07 16:17:27 -03:00
rodrigo.zamboni b7f608f246 FIX: TestConnection Fix 2022-04-07 11:22:57 -03:00
rodrigo.zamboni e513689f4a REFACTOR: Att Functions to work with info given by auth 2022-03-30 11:32:59 -03:00
rodrigo.zamboni 761a00c6a6 removing default true value from auth 2022-03-29 18:16:18 -03:00
rodrigo.zamboni ef9cff601f Merge branch 'alpha' of https://github.com/dadosfera/maestro into alpha 2022-03-29 17:44:10 -03:00
rodrigo.zamboni a3ba9c743f Prepared Outputs and Transformations to use info params given by auth 2022-03-29 17:43:44 -03:00
Victor Radael 9dd3ec4579 FIX: Change Header Name 2022-03-29 15:44:53 -03:00
rodrigo.zamboni 8b19da9217 fixed merge conflicts 2022-03-29 15:22:42 -03:00
rodrigo.zamboni 238de920dc Prepared Inputs for info params added by auth 2022-03-29 15:18:35 -03:00
rodrigo.zamboni c68207728b merge fix 2022-03-29 12:06:26 -03:00
rodrigo.zamboni c431867814 preparing info param 2022-03-29 12:04:10 -03:00
29 changed files with 10240 additions and 292 deletions
+28 -4
View File
@@ -7,8 +7,26 @@ on:
- main
jobs:
extract_environment:
runs-on: ubuntu-latest
outputs:
environment: ${{ steps.extract_environment.outputs.environment }}
steps:
- name: Extract Environment
run: |
if [ ${GITHUB_REF} == "refs/heads/main" ]; then
echo "##[set-output name=environment;]$(echo "prd")"
elif [ ${GITHUB_REF} == "refs/heads/alpha" ]; then
echo "##[set-output name=environment;]$(echo "dev")"
elif [ ${GITHUB_REF} == "refs/heads/beta" ]; then
echo "##[set-output name=environment;]$(echo "stg")"
fi
id: extract_environment
deploy:
runs-on: self-hosted
needs: extract_environment
runs-on:
[self-hosted, '${{ needs.extract_environment.outputs.environment }}']
steps:
- name: Checkout
uses: actions/checkout@v2
@@ -70,6 +88,7 @@ jobs:
- name: Configure AWS Region
if: steps.semantic.outputs.new_release_published == 'true'
uses: aws-actions/configure-aws-credentials@v1
id: aws
with:
aws-region: us-east-1
@@ -78,9 +97,11 @@ jobs:
shell: bash
run: |
if [ ${GITHUB_REF} == "refs/heads/main" ]; then
echo "##[set-output name=result;]$(echo "production")"
else
echo "##[set-output name=result;]$(echo ${GITHUB_REF#refs/heads/})"
echo "##[set-output name=result;]$(echo "prd")"
elif [ ${GITHUB_REF} == "refs/heads/alpha" ]; then
echo "##[set-output name=result;]$(echo "dev")"
elif [ ${GITHUB_REF} == "refs/heads/beta" ]; then
echo "##[set-output name=result;]$(echo "stg")"
fi
id: extract_environment
@@ -94,6 +115,7 @@ jobs:
env:
ENV: ${{ steps.extract_environment.outputs.result }}
IMAGE_TAG: ${{ steps.semantic.outputs.new_release_version }}
ACCOUNT_ID: ${{ steps.aws.outputs.aws-account-id }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
docker-compose -f build.docker-compose.yml build --build-arg NPM_TOKEN=${NPM_TOKEN}
@@ -104,9 +126,11 @@ jobs:
env:
ENV: ${{ steps.extract_environment.outputs.result }}
IMAGE_TAG: ${{ steps.semantic.outputs.new_release_version }}
ACCOUNT_ID: ${{ steps.aws.outputs.aws-account-id }}
run: |
sed -i -e "s/\${ENV}/$ENV/g" docker-compose.yml
sed -i -e "s/\${IMAGE_TAG}/$IMAGE_TAG/g" docker-compose.yml
sed -i -e "s/\${ACCOUNT_ID}/$ACCOUNT_ID/g" docker-compose.yml
zip deploy.zip docker-compose.yml -r .ebextensions
- name: Deploy AWS Beanstalk
+11 -1
View File
@@ -16,6 +16,7 @@ jobs:
- name: Install Docker Compose
run: |
python3 -m pip install docker-compose --upgrade
- name: Build
env:
ENV: test
@@ -24,13 +25,22 @@ jobs:
run: |
export ENV=test
export IMAGE_TAG=test
export ACCOUNT_ID=test
docker-compose -f build.docker-compose.yml build --build-arg NPM_TOKEN=${NPM_TOKEN}
- name: Run Test
env:
ENV: test
IMAGE_TAG: test
ACCOUNT_ID: test
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
export ENV=test
export IMAGE_TAG=test
docker-compose -f build.docker-compose.yml run -e NPM_TOKEN=${NPM_TOKEN} --rm --entrypoint="npm run test" maestro
docker-compose -f build.docker-compose.yml run -e NPM_TOKEN=${NPM_TOKEN} --rm --entrypoint="npm run test" maestro
- name: Remove Docker's Trash
continue-on-error: true
run: |
docker system prune
docker rmi -f $(docker images -aq)
+3 -1
View File
@@ -33,7 +33,9 @@
{ "from": "main", "to": "alpha" },
{ "from": "main", "to": "beta" }
],
"backmergeStrategy": "merge"
"backmergeStrategy": "merge",
"clearWorkspace": true,
"restoreWorkspace": true
}
],
"@semantic-release/npm",
+2 -4
View File
@@ -1,6 +1,4 @@
<p align="center">
<image src="./assets/maestro.svg" style="width:10rem">
<h1 align="center">Maestro</h1>
</p>
x
<h1 align="center">Maestro</h1>
</p>
+1 -1
View File
@@ -2,4 +2,4 @@ version: "3.8"
services:
maestro:
build: .
image: 468720548566.dkr.ecr.us-east-1.amazonaws.com/microservices/maestro_${ENV}:${IMAGE_TAG}
image: ${ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/microservices/maestro_${ENV}:${IMAGE_TAG}
+1 -1
View File
@@ -1,7 +1,7 @@
version: "3.8"
services:
maestro:
image: 468720548566.dkr.ecr.us-east-1.amazonaws.com/microservices/maestro_${ENV}:${IMAGE_TAG}
image: ${ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/microservices/maestro_${ENV}:${IMAGE_TAG}
container_name: maestro
restart: always
ports:
+9811 -30
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -30,7 +30,7 @@
"@nestjs/microservices": "^8.4.3",
"@nestjs/platform-express": "^8.4.3",
"@nestjs/swagger": "^5.2.1",
"@victorradael/protospack": "^1.3.2",
"@victorradael/protospack": "^1.4.2",
"axios": "^0.25.0",
"dotenv": "^14.2.0",
"grpc": "^1.24.11",
+26 -20
View File
@@ -1,7 +1,16 @@
import { OnModuleInit, Inject } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { InputService } from '@victorradael/protospack';
import { IIdRequest, ITestConnectionRequest } from './interfaces';
import {
objectCamelToSnake,
objectSnakeToCamel,
} from 'src/utils/CaseConverter';
import {
ICreateInputRequest,
IIdRequest,
ITestConnectionRequest,
UpdateInputRequest,
} from './interfaces';
export class InputsClientService implements OnModuleInit {
private inputService: InputService;
@@ -14,13 +23,13 @@ export class InputsClientService implements OnModuleInit {
this.grpcClient.getService<InputService>('InputService');
}
async create(createInputDto) {
async create(createInputDto: ICreateInputRequest) {
console.log('InputClientService', 'Create');
const createInputResponse = await new Promise((resolve, reject) => {
this.inputService.Create(createInputDto).subscribe({
this.inputService.Create(objectSnakeToCamel(createInputDto)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
@@ -42,12 +51,10 @@ export class InputsClientService implements OnModuleInit {
async findOne(data: IIdRequest) {
console.log('InputClientService', 'FindOne');
const { id } = data;
const findOneInputResponse = await new Promise((resolve, reject) => {
this.inputService.FindOne({ id }).subscribe({
this.inputService.FindOne(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
@@ -66,13 +73,13 @@ export class InputsClientService implements OnModuleInit {
return findOneInputResponse;
}
async findAll({}) {
async findAll(data) {
console.log('InputClientService', 'FindAll');
const findAllInputResponse = await new Promise((resolve, reject) => {
this.inputService.FindAll({}).subscribe({
this.inputService.FindAll(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
@@ -91,12 +98,12 @@ export class InputsClientService implements OnModuleInit {
return findAllInputResponse;
}
async update(updateInputDTO) {
async update(updateInputDTO: UpdateInputRequest) {
console.log('InputClientService', 'Update');
const updateInputResponse = await new Promise((resolve, reject) => {
this.inputService.Update(updateInputDTO).subscribe({
this.inputService.Update(objectSnakeToCamel(updateInputDTO)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
@@ -119,9 +126,9 @@ export class InputsClientService implements OnModuleInit {
console.log('InputClientService', 'Remove');
const removeInputResponse = await new Promise((resolve, reject) => {
this.inputService.Remove(idRequest).subscribe({
this.inputService.Remove(objectSnakeToCamel(idRequest)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
@@ -141,12 +148,11 @@ export class InputsClientService implements OnModuleInit {
}
async testConnection(data: ITestConnectionRequest) {
console.log('InputClientService', 'TestCOnnection');
console.log('InputClientService', 'TestConnection');
const testConnectionResponse = await new Promise((resolve, reject) => {
this.inputService.TestConnection(data).subscribe({
this.inputService.TestConnection(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
+9 -1
View File
@@ -28,24 +28,32 @@ interface Cron {
week_days_resourse_value: number;
}
export interface Info {
costumer_id: string;
user_id: string;
}
export interface ICreateInputRequest {
cron: string;
name: string;
plugin: string;
values: Values;
operation: string;
info: Info;
}
export interface IIdRequest {
id: string;
info: Info;
}
interface UpdateInputRequest {
export interface UpdateInputRequest {
id: string;
cron: string;
name: string;
plugin: string;
values: Values;
operation: string;
info: Info;
}
export interface ITestConnectionRequest {
+1 -1
View File
@@ -19,4 +19,4 @@ export class OutputsClientConfiguration {
},
};
}
};
}
+13 -10
View File
@@ -1,7 +1,10 @@
import { Controller, Inject, OnModuleInit } from '@nestjs/common';
import { ClientGrpc, Payload } from '@nestjs/microservices';
import { OutputsServiceInterface } from '@victorradael/protospack';
import { objectCamelToSnake } from 'src/utils/CaseConverter';
import {
objectCamelToSnake,
objectSnakeToCamel,
} from 'src/utils/CaseConverter';
import {
ICreateOutputRequest,
IIdRequest,
@@ -24,7 +27,7 @@ export class OutputsClientService implements OnModuleInit {
console.log('OutputClientService', 'Create');
const createOutputResponse = await new Promise((resolve, reject) => {
this.outputService.Create(createOutputDto).subscribe({
this.outputService.Create(objectSnakeToCamel(createOutputDto)).subscribe({
next(x) {
resolve(x);
},
@@ -47,11 +50,11 @@ export class OutputsClientService implements OnModuleInit {
return createOutputResponse;
}
async findAll() {
async findAll(data) {
console.log('OutputClientService', 'FindAll');
const findAllOutputResponse = await new Promise((resolve, reject) => {
this.outputService.FindAll({}).subscribe({
this.outputService.FindAll(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
},
@@ -76,11 +79,11 @@ export class OutputsClientService implements OnModuleInit {
return { outputs: convertedOutputs };
}
async findOne({ id }: IIdRequest) {
async findOne(data: IIdRequest) {
console.log('OutputClientService', 'FindOne');
const findOneOutputResponse = await new Promise((resolve, reject) => {
this.outputService.FindOne({ id }).subscribe({
this.outputService.FindOne(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
},
@@ -105,7 +108,7 @@ export class OutputsClientService implements OnModuleInit {
console.log('OutputClientService', 'Update');
const updateOutputResponse = await new Promise((resolve, reject) => {
this.outputService.Update(updateOutPutDTO).subscribe({
this.outputService.Update(objectSnakeToCamel(updateOutPutDTO)).subscribe({
next(x) {
resolve(x);
},
@@ -126,13 +129,13 @@ export class OutputsClientService implements OnModuleInit {
return objectCamelToSnake(updateOutputResponse);
}
async remove({ id }: IIdRequest) {
async remove(data: IIdRequest) {
console.log('OutputClientService', 'Remove');
const removeOutputResponse = await new Promise((resolve, reject) => {
this.outputService.Remove({ id }).subscribe({
this.outputService.Remove(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
+7
View File
@@ -9,8 +9,14 @@ export interface Values {
prefix: string;
}
interface Info {
user_id: string;
customer_id: string;
}
export interface IIdRequest {
id: string;
info: Info;
}
export interface IOutputUpdateRequest {
@@ -19,4 +25,5 @@ export interface IOutputUpdateRequest {
values: Values;
plugin: string;
name: string;
info: Info;
}
+66 -31
View File
@@ -1,10 +1,15 @@
import { Inject, OnModuleInit } from '@nestjs/common';
import { ClientGrpc, Payload } from '@nestjs/microservices';
import { PipelinesServiceInterface } from '@victorradael/protospack';
import {
objectCamelToSnake,
objectSnakeToCamel,
} from 'src/utils/CaseConverter';
import {
ICreatePipelineDto,
IdRequest,
IGetPipelineLogsRequest,
IIdRequest,
IUpdatePipelineRequest,
} from './interfaces';
@@ -23,18 +28,20 @@ export class PipelinesClientService implements OnModuleInit {
console.log('PipelinesClientService', 'Create');
const createPipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.create(createPipelineDto).subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
this.pipelineService
.create(objectSnakeToCamel(createPipelineDto))
.subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
})
.then((res) => res)
.catch((err) => {
@@ -44,11 +51,11 @@ export class PipelinesClientService implements OnModuleInit {
return createPipelineResponse;
}
async findAll() {
async findAll(data: IIdRequest) {
console.log('PipelinesClientService', 'FindAll');
const findAllPipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.findAll({}).subscribe({
this.pipelineService.findAll(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
},
@@ -69,11 +76,11 @@ export class PipelinesClientService implements OnModuleInit {
return findAllPipelineResponse;
}
async findOne({ id }: IdRequest) {
async findOne(data: IIdRequest) {
console.log('PipelinesClientService', 'FindOne');
const findOnePipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.findOne({ id }).subscribe({
this.pipelineService.findOne(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
},
@@ -98,18 +105,20 @@ export class PipelinesClientService implements OnModuleInit {
console.log('PipelinesClientService', 'Update');
const updatePipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.update(UpdatePipelineRequest).subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
this.pipelineService
.update(objectSnakeToCamel(UpdatePipelineRequest))
.subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
})
.then((res) => res)
.catch((err) => {
@@ -119,13 +128,13 @@ export class PipelinesClientService implements OnModuleInit {
return updatePipelineResponse;
}
async remove({ id }: IdRequest) {
async remove(data: IIdRequest) {
console.log('PipelinesClientService', 'Remove');
const removePipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService.remove({ id }).subscribe({
this.pipelineService.remove(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
resolve(objectCamelToSnake(x));
},
error(err) {
console.log('Observable Error');
@@ -193,4 +202,30 @@ export class PipelinesClientService implements OnModuleInit {
return statusPipelineResponse;
}
async runPipeline({ id, info }: IIdRequest) {
console.log('PipelinesClientService', 'RunPipeline');
const statusPipelineResponse = await new Promise((resolve, reject) => {
this.pipelineService
.triggerPipeline(objectSnakeToCamel({ id, info }))
.subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
})
.then((res) => res)
.catch((err) => {
throw new Error(err);
});
return statusPipelineResponse;
}
}
+12
View File
@@ -5,12 +5,23 @@ export interface ICreatePipelineDto {
tags: string[];
name: string;
description: string;
info: Info;
}
export interface Info {
customer_id: sting;
user_id: string;
}
export interface IdRequest {
id: string;
}
export interface IIdRequest {
id: string;
info: Info;
}
export interface IUpdatePipelineRequest {
input: IdRequest;
transformations: IdRequest[];
@@ -19,6 +30,7 @@ export interface IUpdatePipelineRequest {
name: string;
description: string;
id: string;
info: Info;
}
export interface IGetPipelineLogsRequest {
+39 -32
View File
@@ -1,8 +1,11 @@
import { Controller, Inject, OnModuleInit, Post } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { TransformationsServiceInterface } from '@victorradael/protospack';
import { objectCamelToSnake } from 'src/utils/CaseConverter';
import { ICreateTransformationsRequest, IdRequest } from './interfaces';
import {
objectCamelToSnake,
objectSnakeToCamel,
} from 'src/utils/CaseConverter';
import { ICreateTransformationsRequest, IIdRequest } from './interfaces';
@Controller('transformation')
export class TransformationsClientService implements OnModuleInit {
@@ -24,18 +27,20 @@ export class TransformationsClientService implements OnModuleInit {
const createTransformationResponse = await new Promise(
(resolve, reject) => {
this.transformationService.create(createTransformationsDto).subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
this.transformationService
.create(objectSnakeToCamel(createTransformationsDto))
.subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
},
)
.then((res) => res)
@@ -52,12 +57,12 @@ export class TransformationsClientService implements OnModuleInit {
return { transformations: convertedTransforms };
}
async findAll() {
async findAll(data) {
console.log('TransformationClientService', 'FindAll');
const findAllTransformationResponse = await new Promise(
(resolve, reject) => {
this.transformationService.findAll({}).subscribe({
this.transformationService.findAll(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
},
@@ -83,12 +88,12 @@ export class TransformationsClientService implements OnModuleInit {
return { transformations: convertedTransforms };
}
async findOne({ id }: IdRequest) {
async findOne(data: IIdRequest) {
console.log('TransformationClientService', 'FindOne');
const findOneTransformationResponse = await new Promise(
(resolve, reject) => {
this.transformationService.findOne({ id }).subscribe({
this.transformationService.findOne(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
},
@@ -115,18 +120,20 @@ export class TransformationsClientService implements OnModuleInit {
const updateTransformationResponse = await new Promise(
(resolve, reject) => {
this.transformationService.update(updateTransformationDTO).subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
this.transformationService
.update(objectSnakeToCamel(updateTransformationDTO))
.subscribe({
next(x) {
resolve(x);
},
error(err) {
console.log('Observable Error');
reject(err);
},
complete() {
console.log('done');
},
});
},
)
.then((res) => res)
@@ -137,12 +144,12 @@ export class TransformationsClientService implements OnModuleInit {
return objectCamelToSnake(updateTransformationResponse);
}
async remove({ id }: IdRequest) {
async remove(data: IIdRequest) {
console.log('TransformationClientService', 'Remove');
const removeTransformationResponse = await new Promise(
(resolve, reject) => {
this.transformationService.remove({ id }).subscribe({
this.transformationService.remove(objectSnakeToCamel(data)).subscribe({
next(x) {
resolve(x);
},
+10 -1
View File
@@ -1,5 +1,6 @@
export interface ICreateTransformationsRequest {
transformations: Transformation[];
info: Info;
}
interface Param {
base_column: string;
@@ -9,6 +10,12 @@ interface Param {
randbelow: number;
const: string;
}
export interface Info {
customer_id: string;
user_id: string;
}
interface Transformation {
created_at: string;
id: string;
@@ -19,10 +26,12 @@ interface Transformation {
table: string;
}
export interface IdRequest {
export interface IIdRequest {
id: string;
info: Info;
}
export interface IUpdateTransformationRequest {
transformation: Transformation;
info: Info;
}
+26 -24
View File
@@ -14,7 +14,7 @@ import { HttpExceptionFilter } from 'src/error/http-exception.filter';
@UseFilters(new HttpExceptionFilter())
export class LoggerMiddleware implements NestMiddleware {
use = async (request: Request, response: Response, next: NextFunction) => {
const idToken = request.get('User-Agent');
const idToken = request.get('Dadosfera-User');
const accessToken = request.get('Authorization');
const privateKey = process.env.JWT_PRIVATE_KEY;
@@ -27,7 +27,7 @@ export class LoggerMiddleware implements NestMiddleware {
}
});
const jwtDecoded: any = decode(idToken);
console.log(jwtDecoded);
const permissions = jwtDecoded.user.permissions;
const clienId = jwtDecoded.user.customerId;
const userId = jwtDecoded.user.id;
@@ -94,29 +94,31 @@ const verifyToken = async (accessToken: string) => {
try {
await setUp(awsRegion, awsPoolId);
if (accessToken) {
const user: any = decode(accessToken, { complete: true });
if (user === null) {
throw new UnauthorizedException();
}
const { kid } = user.header;
const pem = pems.filter((item: any) => item[kid]);
const pemValue: any = pem[0][kid];
if (!pem) {
throw new UnauthorizedException();
}
verify(accessToken, pemValue, (err: any) => {
if (err) {
throw new UnauthorizedException();
}
return;
});
if (!accessToken) {
throw new UnauthorizedException();
}
const user: any = decode(accessToken, { complete: true });
if (user === null) {
throw new UnauthorizedException();
}
const { kid } = user.header;
const pem = pems.filter((item: any) => item[kid]);
const pemValue: any = pem[0][kid];
if (!pem) {
throw new UnauthorizedException();
}
verify(accessToken, pemValue, (err: any) => {
if (err) {
throw new UnauthorizedException();
}
return;
});
} catch (error) {
throw new UnauthorizedException();
}
+4 -2
View File
@@ -1,4 +1,4 @@
import { Body, Controller, Post } from '@nestjs/common';
import { Body, Controller, Post, UnauthorizedException } from '@nestjs/common';
import { AuthClientService } from 'src/clients/auth/client.service';
@@ -18,7 +18,9 @@ export class AuthController {
const tokens = await this.authClient
.signIn({ username, password })
.then((result) => result)
.catch((err) => console.log(err));
.catch((err) => {
throw new UnauthorizedException(err.message);
});
return tokens;
}
+14 -11
View File
@@ -9,18 +9,19 @@ import {
} from '@nestjs/common';
import { InputsService } from './inputs.service';
import { InputsClientService } from 'src/clients/inputs/client.service';
import { Payload } from '@nestjs/microservices';
import {
ICreateInputRequest,
UpdateInputRequest,
} from 'src/clients/inputs/interfaces';
@Controller('inputs')
export class InputsController {
constructor(private inputsClientService: InputsClientService) {}
@Get('/test-connection')
@Post('/test-connection')
async testConnection(@Body() data) {
console.log(`/test-connection`, 'ON TEST CONNECTION ROUTE');
console.log(data);
const inputService = new InputsService(this.inputsClientService);
const response = await inputService.testConnection(data);
@@ -28,7 +29,7 @@ export class InputsController {
}
@Post()
async create(@Body() createInputDto) {
async create(@Body() createInputDto: ICreateInputRequest) {
console.log(`/input`, 'ON CREATE ROUTE');
const inputService = new InputsService(this.inputsClientService);
@@ -49,37 +50,39 @@ export class InputsController {
}
@Get('/:id')
async findOne(@Param() params) {
async findOne(@Body() body, @Param() params) {
const { id } = params;
console.log(`/input/${id}`, 'ON FIND ONE ROUTE');
const inputService = new InputsService(this.inputsClientService);
const response = await inputService.findOne(id);
const response = await inputService.findOne({ id, ...body });
return response;
}
@Put(':id')
async update(@Payload() updateInputDto, @Param() params) {
async update(@Body() updateInputDto: UpdateInputRequest, @Param() params) {
const { id } = params;
const { info } = updateInputDto;
delete updateInputDto.info;
console.log(`/input/${id}`, 'ON UPDATE ROUTE');
const inputService = new InputsService(this.inputsClientService);
const response = await inputService.update(id, updateInputDto);
const response = await inputService.update(id, updateInputDto, info);
return response;
}
@Delete(':id')
async delete(@Param() params) {
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(`/input/${id}`, 'ON DELETE ROUTE');
const inputService = new InputsService(this.inputsClientService);
const response = await inputService.remove(id);
const response = await inputService.remove({ id, ...data });
return response;
}
+13 -7
View File
@@ -1,11 +1,16 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { Body, HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { InputsClientService } from 'src/clients/inputs/client.service';
import {
ICreateInputRequest,
IIdRequest,
Info,
} from 'src/clients/inputs/interfaces';
@Injectable()
export class InputsService {
constructor(private inputClient: InputsClientService) {}
async create(data) {
async create(@Body() data: ICreateInputRequest) {
try {
const createInputResponse = await this.inputClient.create(data);
@@ -25,19 +30,20 @@ export class InputsService {
}
}
async findOne(id: string) {
async findOne(idRequest: IIdRequest) {
try {
const findOneInputResponse = await this.inputClient.findOne({ id });
const findOneInputResponse = await this.inputClient.findOne(idRequest);
return findOneInputResponse;
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
async update(id: string, data) {
async update(id: string, data, info: Info) {
try {
const updateInputResponse = await this.inputClient.update({
id,
info,
...data,
});
@@ -47,9 +53,9 @@ export class InputsService {
}
}
async remove(id: string) {
async remove(idRequest: IIdRequest) {
try {
const removeInputResponse = await this.inputClient.remove({ id });
const removeInputResponse = await this.inputClient.remove(idRequest);
return removeInputResponse;
} catch (err) {
+22 -26
View File
@@ -6,7 +6,6 @@ import {
Param,
Post,
Put,
Redirect,
} from '@nestjs/common';
import { Payload } from '@nestjs/microservices';
import { OutputsClientService } from 'src/clients/outputs/client.service';
@@ -14,63 +13,60 @@ import { OutputsService } from './outputs.service';
@Controller('outputs')
export class OutputsController {
constructor( private outputsClientService:OutputsClientService){}
constructor(private outputsClientService: OutputsClientService) {}
@Post()
async create(@Body() createOutputDto) {
console.log(process.env.DEV_URL + `/output`, 'ON CREATE ROUTE');
const outputService = new OutputsService(this.outputsClientService)
const response = await outputService.create(createOutputDto)
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.create(createOutputDto);
return response;
}
@Get()
async findAll() {
async findAll(@Body() data) {
console.log(process.env.DEV_URL + `/output`, 'ON Find All ROUTE');
const outputService = new OutputsService(this.outputsClientService)
const response = await outputService.findAll()
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.findAll(data);
return response;
}
@Get('/:id')
async findOne(@Param() params) {
const {id} = params;
async findOne(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/output/${id}`, 'ON Find One ROUTE');
const outputService = new OutputsService(this.outputsClientService)
const response = await outputService.findOne(id)
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.findOne({ id, ...data });
return response;
}
@Put(':id')
async update(
@Payload() updateOutputDto,
@Param() params,
) {
const {id} = params;
async update(@Payload() updateOutputDto, @Param() params) {
const { id } = params;
const { info } = updateOutputDto;
delete updateOutputDto.info;
console.log(process.env.DEV_URL + `/output/${id}`, 'ON UPDATE ROUTE');
const outputService = new OutputsService(this.outputsClientService)
const response = await outputService.update(id,updateOutputDto)
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.update(id, updateOutputDto, info);
return response;
}
@Delete(':id')
async delete(@Param() params) {
const {id} = params;
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/output/${id}`, 'ON DELETE ROUTE');
const outputService = new OutputsService(this.outputsClientService)
const response = await outputService.remove(id)
const outputService = new OutputsService(this.outputsClientService);
const response = await outputService.remove({ id, ...data });
return response;
}
+44 -50
View File
@@ -1,69 +1,63 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { IIdRequest, Info } from 'src/clients/outputs/interfaces';
import { OutputsClientService } from 'src/clients/outputs/client.service';
@Injectable()
export class OutputsService {
constructor(private outputClient: OutputsClientService) {}
constructor( private outputClient: OutputsClientService){}
async create(createOutputDto) {
try {
const createOutputResponse = await this.outputClient.create(
createOutputDto,
);
async create(createOutputDto){
try{
const createOutputResponse = await this.outputClient.create(createOutputDto);
return createOutputResponse
}catch(err){
throw new HttpException(err.message,HttpStatus.NOT_FOUND)
}
}
async findOne(id:string){
try{
const findOneOutputResponse = await this.outputClient.findOne({id});
return findOneOutputResponse
}catch(err){
throw new HttpException(err.message,HttpStatus.NOT_FOUND)
}
}
async findAll(){
try{
const findAllOutputResponse = await this.outputClient.findAll();
return findAllOutputResponse
}catch(err){
throw new HttpException(err.message,HttpStatus.NOT_FOUND)
return createOutputResponse;
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
async update(id:string, data){
try{
const updateOutputResponse = await this.outputClient.update({id,...data});
return updateOutputResponse
}catch(err){
throw new HttpException(err.message,HttpStatus.NOT_FOUND)
async findOne(data: IIdRequest) {
try {
const findOneOutputResponse = await this.outputClient.findOne(data);
return findOneOutputResponse;
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
async remove(id:string){
async findAll(data) {
try {
const findAllOutputResponse = await this.outputClient.findAll(data);
try{
return findAllOutputResponse;
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
const removeOutputResponse = await this.outputClient.remove({id});
return removeOutputResponse
async update(id: string, data, info: Info) {
try {
const updateOutputResponse = await this.outputClient.update({
id,
info,
...data,
});
}catch(err){
throw new HttpException(err.message,HttpStatus.NOT_FOUND)
return updateOutputResponse;
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
async remove(data: IIdRequest) {
try {
const removeOutputResponse = await this.outputClient.remove(data);
return removeOutputResponse;
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
}
+27 -9
View File
@@ -7,7 +7,6 @@ import {
Post,
Put,
} from '@nestjs/common';
import { Payload } from '@nestjs/microservices';
import { PipelinesClientService } from 'src/clients/pipelines/client.service';
import { PipelinesService } from './pipelines.service';
@@ -15,6 +14,22 @@ import { PipelinesService } from './pipelines.service';
export class PipelinesController {
constructor(private pipelinesClientService: PipelinesClientService) {}
@Get('start/:id')
async activate(@Param() params, @Body() body) {
const { id } = params;
const { info } = body;
console.log(
process.env.DEV_URL + `/transformation/start/${id}`,
'ON START PIPELINE ROUTE',
);
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.runPipeline({ id, info });
return response;
}
@Get(':id/status')
async getPipelineStatus(@Param() params) {
const { id } = params;
@@ -54,44 +69,47 @@ export class PipelinesController {
}
@Get()
async findAll() {
async findAll(@Body() data) {
console.log(process.env.DEV_URL + `/pipeline`, 'ON Find All ROUTE');
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.findAll();
const response = await pipelineService.findAll(data);
return response;
}
@Get('/:id')
async findOne(@Param() params) {
async findOne(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON Find One ROUTE');
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.findOne(id);
const response = await pipelineService.findOne({ id, ...data });
return response;
}
@Put(':id')
async update(@Payload() updatePipelineDto, @Param() params) {
async update(@Body() updatePipelineDto, @Param() params) {
const { id } = params;
const { info } = updatePipelineDto;
delete updatePipelineDto.info;
console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON UPDATE ROUTE');
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.update(id, updatePipelineDto);
const response = await pipelineService.update(id, updatePipelineDto, info);
return response;
}
@Delete(':id')
async delete(@Param() params) {
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON DELETE ROUTE');
const pipelineService = new PipelinesService(this.pipelinesClientService);
const response = await pipelineService.remove(id);
const response = await pipelineService.remove({ id, ...data });
return response;
}
+22 -7
View File
@@ -1,5 +1,6 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { PipelinesClientService } from 'src/clients/pipelines/client.service';
import { IIdRequest, Info } from 'src/clients/pipelines/interfaces';
import { objectCamelToSnake } from 'src/utils/CaseConverter';
@Injectable()
@@ -19,18 +20,18 @@ export class PipelinesService {
}
}
async findOne(id: string) {
async findOne(data: IIdRequest) {
try {
const findOnePipelineResponse = await this.pipelineClient.findOne({ id });
const findOnePipelineResponse = await this.pipelineClient.findOne(data);
return objectCamelToSnake(findOnePipelineResponse);
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
async findAll() {
async findAll(data) {
try {
const findAllPipelineResponse = await this.pipelineClient.findAll();
const findAllPipelineResponse = await this.pipelineClient.findAll(data);
return objectCamelToSnake(findAllPipelineResponse);
} catch (err) {
@@ -38,10 +39,11 @@ export class PipelinesService {
}
}
async update(id: string, data) {
async update(id: string, data, info: Info) {
try {
const updatePipelineResponse = await this.pipelineClient.update({
id,
info,
...data,
});
@@ -51,9 +53,9 @@ export class PipelinesService {
}
}
async remove(id: string) {
async remove(data: IIdRequest) {
try {
const removePipelineResponse = await this.pipelineClient.remove({ id });
const removePipelineResponse = await this.pipelineClient.remove(data);
return removePipelineResponse;
} catch (err) {
@@ -82,4 +84,17 @@ export class PipelinesService {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
async runPipeline({ id, info }: IIdRequest) {
try {
const triggerPipelineResponse = await this.pipelineClient.runPipeline({
id,
info,
});
return objectCamelToSnake(triggerPipelineResponse);
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
}
@@ -9,6 +9,7 @@ import {
} from '@nestjs/common';
import { Payload } from '@nestjs/microservices';
import { TransformationsClientService } from 'src/clients/transformations/client.service';
import { IIdRequest } from 'src/clients/transformations/interfaces';
import { TransformationsService } from './transformations.service';
@Controller('transformations')
@@ -32,19 +33,19 @@ export class TransformationsController {
}
@Get()
async findAll() {
async findAll(@Body() data: IIdRequest) {
console.log(process.env.DEV_URL + `/transformation`, 'ON Find All ROUTE');
const transformationService = new TransformationsService(
this.transformationsClientService,
);
const response = await transformationService.findAll();
const response = await transformationService.findAll(data);
return response;
}
@Get('/:id')
async findOne(@Param() params) {
async findOne(@Body() data, @Param() params) {
const { id } = params;
console.log(
process.env.DEV_URL + `/transformation/${id}`,
@@ -54,7 +55,7 @@ export class TransformationsController {
const transformationService = new TransformationsService(
this.transformationsClientService,
);
const response = await transformationService.findOne(id);
const response = await transformationService.findOne({ id, ...data });
return response;
}
@@ -79,7 +80,7 @@ export class TransformationsController {
}
@Delete(':id')
async delete(@Param() params) {
async delete(@Body() data, @Param() params) {
const { id } = params;
console.log(
process.env.DEV_URL + `/transformation/${id}`,
@@ -89,7 +90,7 @@ export class TransformationsController {
const transformationService = new TransformationsService(
this.transformationsClientService,
);
const response = await transformationService.remove(id);
const response = await transformationService.remove({ id, ...data });
return response;
}
@@ -1,6 +1,9 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { TransformationsClientService } from 'src/clients/transformations/client.service';
import { ICreateTransformationsRequest } from 'src/clients/transformations/interfaces';
import {
ICreateTransformationsRequest,
IIdRequest,
} from 'src/clients/transformations/interfaces';
import { trSnakeToCamel } from 'src/utils/CaseConverter';
@Injectable()
@@ -8,14 +11,20 @@ export class TransformationsService {
constructor(private transformationClient: TransformationsClientService) {}
async create(createTransformationDto: ICreateTransformationsRequest) {
const { transformations, info } = createTransformationDto;
if (!transformations || transformations.length == 0) {
throw new HttpException('Missing transformations field.', 400);
}
try {
const convertedDTO = createTransformationDto.transformations.map((tr) => {
const convertedDTO = transformations.map((tr) => {
return trSnakeToCamel(tr);
});
const createTransformationResponse =
await this.transformationClient.create({
transformations: convertedDTO,
info: info,
});
return createTransformationResponse;
@@ -24,20 +33,20 @@ export class TransformationsService {
}
}
async findOne(id: string) {
async findOne(data: IIdRequest) {
try {
const findOneTransformationResponse =
await this.transformationClient.findOne({ id });
await this.transformationClient.findOne(data);
return findOneTransformationResponse;
} catch (err) {
throw new HttpException(err.message, HttpStatus.NOT_FOUND);
}
}
async findAll() {
async findAll(data) {
try {
const findAllTransformationResponse =
await this.transformationClient.findAll();
await this.transformationClient.findAll(data);
return findAllTransformationResponse;
} catch (err) {
@@ -57,10 +66,10 @@ export class TransformationsService {
}
}
async remove(id: string) {
async remove(data: IIdRequest) {
try {
const removeTransformationResponse =
await this.transformationClient.remove({ id });
await this.transformationClient.remove(data);
return removeTransformationResponse;
} catch (err) {
+1 -1
View File
@@ -41,8 +41,8 @@ export const objectSnakeToCamel = (object) => {
delete object[key];
}
});
objectValues.forEach((value) => {
if (value == null) return;
if (typeof value === 'object') {
objectSnakeToCamel(value);
}
+1 -1
View File
@@ -1 +1 @@
{"openapi":"3.0.0","paths":{"/inputs/test-connection":{"get":{"operationId":"InputsController_testConnection","parameters":[],"responses":{"200":{"description":""}}}},"/inputs":{"post":{"operationId":"InputsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"InputsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/inputs/{id}":{"get":{"operationId":"InputsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"InputsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"InputsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/transformations":{"post":{"operationId":"TransformationsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"TransformationsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/transformations/{id}":{"get":{"operationId":"TransformationsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"TransformationsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"TransformationsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/outputs":{"post":{"operationId":"OutputsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"OutputsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/outputs/{id}":{"get":{"operationId":"OutputsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"OutputsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"OutputsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}/status":{"get":{"operationId":"PipelinesController_getPipelineStatus","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}/{details}":{"get":{"operationId":"PipelinesController_getPipelineLogs","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines":{"post":{"operationId":"PipelinesController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"PipelinesController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}":{"get":{"operationId":"PipelinesController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"PipelinesController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"PipelinesController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/auth":{"post":{"operationId":"AuthController_signIn","parameters":[],"responses":{"201":{"description":""}}}},"/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":""}}}}},"info":{"title":"Maestro Grpc Documentation","description":"Documentation for Maestro gateway","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{}}}
{"openapi":"3.0.0","paths":{"/inputs/test-connection":{"post":{"operationId":"InputsController_testConnection","parameters":[],"responses":{"201":{"description":""}}}},"/inputs":{"post":{"operationId":"InputsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"InputsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/inputs/{id}":{"get":{"operationId":"InputsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"InputsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"InputsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/transformations":{"post":{"operationId":"TransformationsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"TransformationsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/transformations/{id}":{"get":{"operationId":"TransformationsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"TransformationsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"TransformationsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/outputs":{"post":{"operationId":"OutputsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"OutputsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/outputs/{id}":{"get":{"operationId":"OutputsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"OutputsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"OutputsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/start/{id}":{"get":{"operationId":"PipelinesController_activate","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}/status":{"get":{"operationId":"PipelinesController_getPipelineStatus","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}/{details}":{"get":{"operationId":"PipelinesController_getPipelineLogs","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines":{"post":{"operationId":"PipelinesController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"PipelinesController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}":{"get":{"operationId":"PipelinesController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"PipelinesController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"PipelinesController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/auth":{"post":{"operationId":"AuthController_signIn","parameters":[],"responses":{"201":{"description":""}}}},"/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":""}}}}},"info":{"title":"Maestro Grpc Documentation","description":"Documentation for Maestro gateway","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{}}}