diff --git a/src/infra/grpc/grpc.options.ts b/src/infra/grpc/grpc.options.ts new file mode 100644 index 0000000..bf16ec9 --- /dev/null +++ b/src/infra/grpc/grpc.options.ts @@ -0,0 +1,12 @@ +import { GrpcOptions } from '@nestjs/microservices' +import { PROTO_PATHS } from '@teacinema/contracts' + +export const grpcPackages = ['auth.v1'] +export const grpcProtoPaths = [PROTO_PATHS.AUTH] +export const grpcLoader: GrpcOptions['options']['loader'] = { + keepCase: false, + longs: String, + enums: String, + defaults: true, + oneofs: true +} diff --git a/src/infra/grpc/grpc.server.ts b/src/infra/grpc/grpc.server.ts new file mode 100644 index 0000000..fec6a07 --- /dev/null +++ b/src/infra/grpc/grpc.server.ts @@ -0,0 +1,26 @@ +import { INestApplication } from '@nestjs/common' +import { ConfigService } from '@nestjs/config' +import { MicroserviceOptions, Transport } from '@nestjs/microservices' + +import { AllConfigs } from '@/config' + +import { grpcLoader, grpcPackages, grpcProtoPaths } from './grpc.options' + +export function createGrpcServer( + app: INestApplication, + config: ConfigService +) { + const host = config.get('grpc.host', { infer: true }) + const port = config.get('grpc.port', { infer: true }) + const url = `${host}:${port}` + + app.connectMicroservice({ + transport: Transport.GRPC, + options: { + url, + package: grpcPackages, + protoPath: grpcProtoPaths, + loader: grpcLoader + } + }) +} diff --git a/src/main.ts b/src/main.ts index 995def4..2dbdaaa 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,33 +1,15 @@ import { ConfigService } from '@nestjs/config' import { NestFactory } from '@nestjs/core' -import { MicroserviceOptions, Transport } from '@nestjs/microservices' + +import { createGrpcServer } from '@/infra/grpc/grpc.server' import { AppModule } from './app.module' -import { AllConfigs } from './config' async function bootstrap() { const app = await NestFactory.create(AppModule) - const config = app.get(ConfigService) - const host = config.get('grpc.host', { infer: true }) - const port = config.get('grpc.port', { infer: true }) - const url = `${host}:${port}` - - app.connectMicroservice({ - transport: Transport.GRPC, - options: { - url, - package: 'auth.v1', - protoPath: 'node_modules/@teacinema/contracts/proto/auth.proto', - loader: { - keepCase: false, - longs: String, - enums: String, - defaults: true, - oneofs: true - } - } - }) + const config = app.get(ConfigService) + createGrpcServer(app, config) await app.startAllMicroservices() await app.init() diff --git a/yarn.lock b/yarn.lock index 1cbf652..a78b8ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1360,9 +1360,9 @@ integrity sha512-L006mySvhRpUlRHf3ONbXA0RG42gbQ9QAnmQuZx4zejHEsWB9702xe18MSYcBilv+lmYkQpiX/g3p8P7suLfqQ== "@teacinema/contracts@^1.0.0": - version "1.0.1" - resolved "https://git.ksv741.keenetic.pro/api/packages/teacinema/npm/%40teacinema%2Fcontracts/-/1.0.1/contracts-1.0.1.tgz#25021fecb1d33d0505fd11ca3d8201660cb1bcbe" - integrity sha512-gvdbQ3Xowr4/h9Kq2P+pO2lr9vyWvIvRoU74mG3LSq2IiKKuwQUTxRaJnzI5MdtNqiq0WIUMo30cfqnBzNAJ1A== + version "1.0.4" + resolved "https://git.ksv741.keenetic.pro/api/packages/teacinema/npm/%40teacinema%2Fcontracts/-/1.0.4/contracts-1.0.4.tgz#178dc6392aae52c4dc2b60bb1470a0a2885a8715" + integrity sha512-3jHP4NAoH9munaN2Iegvg0X6KN/SR1rwZU7KpbuBtlcTJqsLljTaHwG+XKjEL84Y9b+sF73jGGbg/w2Y8IBQmw== dependencies: "@nestjs/microservices" "^11.1.12" protoc "33.4.0"