From 07ab5048c29dbf234700afb2831cc06ddd69c45b Mon Sep 17 00:00:00 2001 From: "rodrigo.zamboni" Date: Wed, 19 Jan 2022 15:08:47 -0300 Subject: [PATCH] implementation of enrichment module on gateway --- src/enrichment/config/grpc-client.ts | 17 +++++++ src/enrichment/dto/create-enrichment.dto.ts | 6 +++ src/enrichment/dto/update-enrichment.dto.ts | 6 +++ src/enrichment/enrichment.controller.spec.ts | 20 ++++++++ src/enrichment/enrichment.controller.ts | 49 ++++++++++++++++++++ src/enrichment/enrichment.module.ts | 9 ++++ src/enrichment/enrichment.service.spec.ts | 18 +++++++ src/enrichment/enrichment.service.ts | 26 +++++++++++ src/enrichment/entities/enrichment.entity.ts | 8 ++++ src/enrichment/proto/enrichment.proto | 44 ++++++++++++++++++ src/outputs/outputs.controller.ts | 4 +- 11 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 src/enrichment/config/grpc-client.ts create mode 100644 src/enrichment/dto/create-enrichment.dto.ts create mode 100644 src/enrichment/dto/update-enrichment.dto.ts create mode 100644 src/enrichment/enrichment.controller.spec.ts create mode 100644 src/enrichment/enrichment.controller.ts create mode 100644 src/enrichment/enrichment.module.ts create mode 100644 src/enrichment/enrichment.service.spec.ts create mode 100644 src/enrichment/enrichment.service.ts create mode 100644 src/enrichment/entities/enrichment.entity.ts create mode 100644 src/enrichment/proto/enrichment.proto diff --git a/src/enrichment/config/grpc-client.ts b/src/enrichment/config/grpc-client.ts new file mode 100644 index 0000000..7dcf5e1 --- /dev/null +++ b/src/enrichment/config/grpc-client.ts @@ -0,0 +1,17 @@ +import { join } from 'path'; +import { ClientOptions, Transport } from '@nestjs/microservices'; + +export const GrpcClientConfiguration: ClientOptions = { + transport: Transport.GRPC, + options: { + //url: `${process.env.USERS_SVC_URL}:${process.env.USERS_SVC_PORT}`, + url: `127.0.0.1:50053`, + package: 'enrichment', + protoPath: join(__dirname, '..', 'proto', 'enrichment.proto'), + loader: { + enums: String, + objects: true, + arrays: true, + }, + }, +}; diff --git a/src/enrichment/dto/create-enrichment.dto.ts b/src/enrichment/dto/create-enrichment.dto.ts new file mode 100644 index 0000000..026514a --- /dev/null +++ b/src/enrichment/dto/create-enrichment.dto.ts @@ -0,0 +1,6 @@ +export class CreateEnrichmentDto { + + type:string; + + columns:string[] +} diff --git a/src/enrichment/dto/update-enrichment.dto.ts b/src/enrichment/dto/update-enrichment.dto.ts new file mode 100644 index 0000000..570394a --- /dev/null +++ b/src/enrichment/dto/update-enrichment.dto.ts @@ -0,0 +1,6 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateEnrichmentDto } from './create-enrichment.dto'; + +export class UpdateEnrichmentDto extends PartialType(CreateEnrichmentDto) { + +} diff --git a/src/enrichment/enrichment.controller.spec.ts b/src/enrichment/enrichment.controller.spec.ts new file mode 100644 index 0000000..36dbdf8 --- /dev/null +++ b/src/enrichment/enrichment.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EnrichmentController } from './enrichment.controller'; +import { EnrichmentGrpcClientService } from './enrichment.service'; + +describe('EnrichmentController', () => { + let controller: EnrichmentController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [EnrichmentController], + providers: [EnrichmentGrpcClientService], + }).compile(); + + controller = module.get(EnrichmentController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/enrichment/enrichment.controller.ts b/src/enrichment/enrichment.controller.ts new file mode 100644 index 0000000..53d4c31 --- /dev/null +++ b/src/enrichment/enrichment.controller.ts @@ -0,0 +1,49 @@ +import { Controller, Delete, Get, Param, Post, Put } from '@nestjs/common'; +import { Client, ClientGrpc, Payload } from '@nestjs/microservices'; +import { EnrichmentGrpcClientService } from './enrichment.service'; +import { CreateEnrichmentDto } from './dto/create-enrichment.dto'; +import { UpdateEnrichmentDto } from './dto/update-enrichment.dto'; +import { ApiTags } from '@nestjs/swagger'; +import { GrpcClientConfiguration } from './config/grpc-client'; + +@ApiTags('enrichments') +@Controller('enrichment') +export class EnrichmentController { + + + + @Client(GrpcClientConfiguration) + private enrichmentServiceClient: ClientGrpc; + + private enrichmentService: EnrichmentGrpcClientService; + + onModuleInit() { + this.enrichmentService = + this.enrichmentServiceClient.getService('EnrichmentService'); + } + + @Post() + create(@Payload() createEnrichmentDto: CreateEnrichmentDto) { + return this.enrichmentService.create(createEnrichmentDto); + } + + @Get() + list() { + return this.enrichmentService.list(); + } + + @Get(':id') + show(@Param() id: string) { + return this.enrichmentService.show(id); + } + + @Put(':id') + update(@Param() id:string,@Payload() updateEnrichmentDto: UpdateEnrichmentDto) { + return this.enrichmentService.update(id, updateEnrichmentDto); + } + + @Delete(':id') + remove(@Param() id: string) { + return this.enrichmentService.remove(id); + } +} diff --git a/src/enrichment/enrichment.module.ts b/src/enrichment/enrichment.module.ts new file mode 100644 index 0000000..8743984 --- /dev/null +++ b/src/enrichment/enrichment.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { EnrichmentGrpcClientService } from './enrichment.service'; +import { EnrichmentController } from './enrichment.controller'; + +@Module({ + controllers: [EnrichmentController], + providers: [EnrichmentGrpcClientService] +}) +export class EnrichmentModule {} diff --git a/src/enrichment/enrichment.service.spec.ts b/src/enrichment/enrichment.service.spec.ts new file mode 100644 index 0000000..de7a907 --- /dev/null +++ b/src/enrichment/enrichment.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { EnrichmentService } from './enrichment.service'; + +describe('EnrichmentService', () => { + let service: EnrichmentService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [EnrichmentService], + }).compile(); + + service = module.get(EnrichmentService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/enrichment/enrichment.service.ts b/src/enrichment/enrichment.service.ts new file mode 100644 index 0000000..a2ab6d5 --- /dev/null +++ b/src/enrichment/enrichment.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreateEnrichmentDto } from './dto/create-enrichment.dto'; +import { UpdateEnrichmentDto } from './dto/update-enrichment.dto'; + +@Injectable() +export class EnrichmentGrpcClientService { + create(createEnrichmentDto: CreateEnrichmentDto) { + return 'This action adds a new enrichment'; + } + + list() { + return `This action returns all enrichment`; + } + + show(id: string) { + return `This action returns a #${id} enrichment`; + } + + update(id: string, updateEnrichmentDto: UpdateEnrichmentDto) { + return `This action updates a #${id} enrichment`; + } + + remove(id: string) { + return `This action removes a #${id} enrichment`; + } +} diff --git a/src/enrichment/entities/enrichment.entity.ts b/src/enrichment/entities/enrichment.entity.ts new file mode 100644 index 0000000..fecf084 --- /dev/null +++ b/src/enrichment/entities/enrichment.entity.ts @@ -0,0 +1,8 @@ +export class Enrichment { + + id:string; + + type:string; + + columns:string[] +} diff --git a/src/enrichment/proto/enrichment.proto b/src/enrichment/proto/enrichment.proto new file mode 100644 index 0000000..fe35124 --- /dev/null +++ b/src/enrichment/proto/enrichment.proto @@ -0,0 +1,44 @@ +syntax = "proto3"; + +package enrichment; + + +import "google/protobuf/timestamp.proto"; + + + +service EnrichmentService { + rpc Create(CreateEnrichmentRequest) returns (Enrichment) {} + rpc Show(IdRequest) returns (Enrichment) {} + rpc List(Empty) returns (ListResponse){} + rpc Update(UpdateEnrichmentRequest) returns (Enrichment){} + rpc Remove(IdRequest) returns (Empty){} +} + +message Empty {} + +message IdRequest{ + string id = 1; +} + +message UpdateEnrichmentRequest{ + string id = 1; + string type = 2; + repeated string columns = 3; +} + +message Enrichment { + string id = 1; + string type = 2; + repeated string columns = 3; +} + +message CreateEnrichmentRequest { + string type = 1; + repeated string columns = 2; +} + +message ListResponse { + repeated Enrichment enrichments = 2; +} + diff --git a/src/outputs/outputs.controller.ts b/src/outputs/outputs.controller.ts index f634063..c222a98 100644 --- a/src/outputs/outputs.controller.ts +++ b/src/outputs/outputs.controller.ts @@ -29,8 +29,8 @@ export class OutputsController implements OnModuleInit{ return this.outputService.list(); } - @Get() - show(@Payload() id: string) { + @Get(':id') + show(@Param() id: string) { return this.outputService.show(id); }