diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 86c3f74..2de5846 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -17,8 +17,10 @@
"customizations": {
"vscode": {
"extensions": [
+ "ms-azuretools.vscode-docker",
"humao.rest-client",
- "esbenp.prettier-vscode"
+ "esbenp.prettier-vscode",
+ "prisma.prisma"
]
}
},
diff --git a/.docker/mysql/init.sql b/.docker/mysql/init.sql
new file mode 100644
index 0000000..fbe953f
--- /dev/null
+++ b/.docker/mysql/init.sql
@@ -0,0 +1,2 @@
+CREATE DATABASE IF NOT EXISTS `orders` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
+CREATE DATABASE IF NOT EXISTS `payments` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 22f55ad..cd8c379 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,4 +32,6 @@ lerna-debug.log*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
-!.vscode/extensions.json
\ No newline at end of file
+!.vscode/extensions.json
+
+.history/
\ No newline at end of file
diff --git a/README.md b/README.md
index 00a13b1..34b4596 100644
--- a/README.md
+++ b/README.md
@@ -1,73 +1,15 @@
-
-
-
+## Microserviço com Nestjs + Kafka
-[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456
-[circleci-url]: https://circleci.com/gh/nestjs/nest
+### Fluxo
- A progressive Node.js framework for building efficient and scalable server-side applications.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+1. Orders publica mensagem no Kafka
-## Description
+2. Payments consome mensagem do Kafka (pagamento realizado)
-[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository.
+3. Payments processou o pagamento
-## Installation
+4. Payments publicou mensagem no Kafka
-```bash
-$ npm install
-```
+5. Orders consome mensagem no Kafka (pagamento realizado)
-## Running the app
-
-```bash
-# development
-$ npm run start
-
-# watch mode
-$ npm run start:dev
-
-# production mode
-$ npm run start:prod
-```
-
-## Test
-
-```bash
-# unit tests
-$ npm run test
-
-# e2e tests
-$ npm run test:e2e
-
-# test coverage
-$ npm run test:cov
-```
-
-## Support
-
-Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
-
-## Stay in touch
-
-- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com)
-- Website - [https://nestjs.com](https://nestjs.com/)
-- Twitter - [@nestframework](https://twitter.com/nestframework)
-
-## License
-
-Nest is [MIT licensed](LICENSE).
+6. Orders altera o status do pedido
\ No newline at end of file
diff --git a/api.http b/api.http
index 6f3dd47..d7a523c 100644
--- a/api.http
+++ b/api.http
@@ -1 +1,13 @@
-GET http://localhost:3000/
\ No newline at end of file
+GET http://localhost:3000/orders
+
+###
+POST http://localhost:3000/orders
+Content-Type: application/json
+
+{
+ "client_id": 1,
+ "price": 100
+}
+
+###
+GET http://localhost:3001/payments
\ No newline at end of file
diff --git a/apps/orders/.gitignore b/apps/orders/.gitignore
new file mode 100644
index 0000000..11ddd8d
--- /dev/null
+++ b/apps/orders/.gitignore
@@ -0,0 +1,3 @@
+node_modules
+# Keep environment variables out of version control
+.env
diff --git a/apps/orders/prisma/migrations/20231002114824_init/migration.sql b/apps/orders/prisma/migrations/20231002114824_init/migration.sql
new file mode 100644
index 0000000..bb34193
--- /dev/null
+++ b/apps/orders/prisma/migrations/20231002114824_init/migration.sql
@@ -0,0 +1,10 @@
+-- CreateTable
+CREATE TABLE `Order` (
+ `id` INTEGER NOT NULL AUTO_INCREMENT,
+ `price` INTEGER NOT NULL,
+ `client_id` INTEGER NOT NULL,
+ `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
+ `status` ENUM('PENDING', 'PAYED', 'CANCELLED') NOT NULL,
+
+ PRIMARY KEY (`id`)
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
diff --git a/apps/orders/prisma/migrations/migration_lock.toml b/apps/orders/prisma/migrations/migration_lock.toml
new file mode 100644
index 0000000..e5a788a
--- /dev/null
+++ b/apps/orders/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (i.e. Git)
+provider = "mysql"
\ No newline at end of file
diff --git a/apps/orders/prisma/schema.prisma b/apps/orders/prisma/schema.prisma
new file mode 100644
index 0000000..9e41823
--- /dev/null
+++ b/apps/orders/prisma/schema.prisma
@@ -0,0 +1,26 @@
+// This is your Prisma schema file,
+// learn more about it in the docs: https://pris.ly/d/prisma-schema
+
+generator client {
+ provider = "prisma-client-js"
+ output = "../../../node_modules/.prisma/client/orders"
+}
+
+datasource db {
+ provider = "mysql"
+ url = env("DATABASE_URL")
+}
+
+model Order {
+ id Int @id @default(autoincrement())
+ price Int
+ client_id Int
+ created_at DateTime @default(now())
+ status OrderStatus
+}
+
+enum OrderStatus {
+ PENDING
+ PAYED
+ CANCELLED
+}
diff --git a/apps/orders/src/main.ts b/apps/orders/src/main.ts
index 0b93421..91702ba 100644
--- a/apps/orders/src/main.ts
+++ b/apps/orders/src/main.ts
@@ -1,8 +1,22 @@
import { NestFactory } from '@nestjs/core';
import { OrdersModule } from './orders.module';
+import { MicroserviceOptions, Transport } from '@nestjs/microservices';
async function bootstrap() {
const app = await NestFactory.create(OrdersModule);
+ app.connectMicroservice({
+ transport: Transport.KAFKA,
+ options: {
+ client: {
+ brokers: ['kafka:29092']
+ },
+ consumer: {
+ groupId: 'orders-consumer',
+ }
+ }
+ })
+
+ await app.startAllMicroservices()
await app.listen(3000);
}
bootstrap();
diff --git a/apps/orders/src/orders.controller.ts b/apps/orders/src/orders.controller.ts
index 2d2343a..fac4717 100644
--- a/apps/orders/src/orders.controller.ts
+++ b/apps/orders/src/orders.controller.ts
@@ -1,12 +1,29 @@
-import { Controller, Get } from '@nestjs/common';
+import { Body, Controller, Get, Post } from '@nestjs/common';
import { OrdersService } from './orders.service';
+import { Prisma, OrderStatus } from '.prisma/client/orders';
+import { MessagePattern, Payload } from '@nestjs/microservices';
-@Controller()
+@Controller('orders')
export class OrdersController {
constructor(private readonly ordersService: OrdersService) {}
@Get()
- getHello(): string {
- return this.ordersService.getHello();
+ getHello(): Promise {
+ return this.ordersService.all();
+ }
+
+ @Post()
+ create(@Body() data: Prisma.OrderCreateInput): Promise {
+ return this.ordersService.create(data);
+ }
+
+ @MessagePattern('payments')
+ async complete(@Payload() message: any) {
+ await this.ordersService.complete(
+ message.order_id,
+ message.status === 'APPROVED'
+ ? OrderStatus.PAYED
+ : OrderStatus.CANCELLED,
+ );
}
}
diff --git a/apps/orders/src/orders.module.ts b/apps/orders/src/orders.module.ts
index 2b8c162..cd8de2d 100644
--- a/apps/orders/src/orders.module.ts
+++ b/apps/orders/src/orders.module.ts
@@ -1,9 +1,22 @@
import { Module } from '@nestjs/common';
import { OrdersController } from './orders.controller';
import { OrdersService } from './orders.service';
+import { PrismaModule } from './prisma/prisma.module';
+import { ClientsModule, Transport } from '@nestjs/microservices';
@Module({
- imports: [],
+ imports: [PrismaModule, ClientsModule.register([
+ {
+ name: 'ORDERS_SERVICE',
+ transport: Transport.KAFKA,
+ options: {
+ client: {
+ clientId: 'orders',
+ brokers: ['kafka:29092']
+ }
+ }
+ }
+ ])],
controllers: [OrdersController],
providers: [OrdersService],
})
diff --git a/apps/orders/src/orders.service.ts b/apps/orders/src/orders.service.ts
index 1291824..0d629bc 100644
--- a/apps/orders/src/orders.service.ts
+++ b/apps/orders/src/orders.service.ts
@@ -1,8 +1,38 @@
-import { Injectable } from '@nestjs/common';
+import { Inject, Injectable } from '@nestjs/common';
+import { PrismaService } from './prisma/prisma/prisma.service';
+import { Prisma, OrderStatus } from '.prisma/client/orders';
+import { ClientKafka } from '@nestjs/microservices';
+import { lastValueFrom } from 'rxjs';
@Injectable()
export class OrdersService {
- getHello(): string {
- return 'Hello World!';
+ constructor(
+ private prismaService: PrismaService,
+ @Inject('ORDERS_SERVICE') private kafkaClient: ClientKafka,
+ ) {}
+
+ all(): Promise {
+ return this.prismaService.order.findMany();
+ }
+
+ async create(data: Prisma.OrderCreateInput): Promise {
+ const order = await this.prismaService.order.create({
+ data: {
+ ...data,
+ status: OrderStatus.PENDING,
+ },
+ });
+
+ console.log(order);
+
+ await lastValueFrom(this.kafkaClient.emit('orders', order));
+ return order;
+ }
+
+ complete(id: number, status: OrderStatus) {
+ return this.prismaService.order.update({
+ where: { id },
+ data: { status },
+ });
}
}
diff --git a/apps/orders/src/prisma/prisma.module.ts b/apps/orders/src/prisma/prisma.module.ts
new file mode 100644
index 0000000..75664ab
--- /dev/null
+++ b/apps/orders/src/prisma/prisma.module.ts
@@ -0,0 +1,9 @@
+import { Global, Module } from '@nestjs/common';
+import { PrismaService } from './prisma/prisma.service';
+
+@Global()
+@Module({
+ providers: [PrismaService],
+ exports: [PrismaService]
+})
+export class PrismaModule {}
diff --git a/apps/orders/src/prisma/prisma/prisma.service.ts b/apps/orders/src/prisma/prisma/prisma.service.ts
new file mode 100644
index 0000000..cf87db6
--- /dev/null
+++ b/apps/orders/src/prisma/prisma/prisma.service.ts
@@ -0,0 +1,17 @@
+import { Injectable, OnModuleInit } from '@nestjs/common';
+import { PrismaClient } from '.prisma/client/orders';
+
+@Injectable()
+export class PrismaService extends PrismaClient implements OnModuleInit {
+
+ async onModuleInit() {
+ await this.$connect();
+ }
+
+ async enableShutdownHooks(app: any) {
+ process.on("beforeExit", async () => {
+ await app.close();
+ })
+ }
+
+}
diff --git a/apps/payments/.gitignore b/apps/payments/.gitignore
new file mode 100644
index 0000000..11ddd8d
--- /dev/null
+++ b/apps/payments/.gitignore
@@ -0,0 +1,3 @@
+node_modules
+# Keep environment variables out of version control
+.env
diff --git a/apps/payments/prisma/migrations/20231002165823_payments/migration.sql b/apps/payments/prisma/migrations/20231002165823_payments/migration.sql
new file mode 100644
index 0000000..6f1de46
--- /dev/null
+++ b/apps/payments/prisma/migrations/20231002165823_payments/migration.sql
@@ -0,0 +1,11 @@
+-- CreateTable
+CREATE TABLE `Payment` (
+ `id` INTEGER NOT NULL AUTO_INCREMENT,
+ `amount` DOUBLE NOT NULL,
+ `order_id` INTEGER NOT NULL,
+ `client_id` INTEGER NOT NULL,
+ `create_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
+ `status` ENUM('APPROVED', 'REJECT') NOT NULL,
+
+ PRIMARY KEY (`id`)
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
diff --git a/apps/payments/prisma/migrations/migration_lock.toml b/apps/payments/prisma/migrations/migration_lock.toml
new file mode 100644
index 0000000..e5a788a
--- /dev/null
+++ b/apps/payments/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (i.e. Git)
+provider = "mysql"
\ No newline at end of file
diff --git a/apps/payments/prisma/schema.prisma b/apps/payments/prisma/schema.prisma
new file mode 100644
index 0000000..84e2419
--- /dev/null
+++ b/apps/payments/prisma/schema.prisma
@@ -0,0 +1,26 @@
+// This is your Prisma schema file,
+// learn more about it in the docs: https://pris.ly/d/prisma-schema
+
+generator client {
+ provider = "prisma-client-js"
+ output = "../../../node_modules/.prisma/client/payments"
+}
+
+datasource db {
+ provider = "mysql"
+ url = env("DATABASE_URL")
+}
+
+model Payment {
+ id Int @id @default(autoincrement())
+ amount Float
+ order_id Int
+ client_id Int
+ create_at DateTime @default(now())
+ status PaymentStatus
+}
+
+enum PaymentStatus {
+ APPROVED
+ REJECT
+}
diff --git a/apps/payments/src/main.ts b/apps/payments/src/main.ts
new file mode 100644
index 0000000..9c40f4e
--- /dev/null
+++ b/apps/payments/src/main.ts
@@ -0,0 +1,22 @@
+import { NestFactory } from '@nestjs/core';
+import { PaymentsModule } from './payments.module';
+import { MicroserviceOptions, Transport } from '@nestjs/microservices';
+
+async function bootstrap() {
+ const app = await NestFactory.create(PaymentsModule);
+ app.connectMicroservice({
+ transport: Transport.KAFKA,
+ options: {
+ client: {
+ brokers: ['kafka:29092']
+ },
+ consumer: {
+ groupId: 'payments-consumer',
+ }
+ }
+ })
+
+ await app.startAllMicroservices()
+ await app.listen(3001);
+}
+bootstrap();
diff --git a/apps/payments/src/payments.controller.ts b/apps/payments/src/payments.controller.ts
new file mode 100644
index 0000000..e0845ff
--- /dev/null
+++ b/apps/payments/src/payments.controller.ts
@@ -0,0 +1,24 @@
+import { Controller, Get, Post } from '@nestjs/common';
+import { PaymentsService } from './payments.service';
+import { MessagePattern, Payload } from '@nestjs/microservices';
+
+@Controller('payments')
+export class PaymentsController {
+ constructor(private readonly paymentsService: PaymentsService) {}
+
+ @Get()
+ all(): Promise {
+ return this.paymentsService.all();
+ }
+
+ @MessagePattern('orders')
+ async payment(@Payload() message) {
+ await this.paymentsService.payment({
+ amount: message.price,
+ order_id: message.id,
+ client_id: message.client_id,
+ status: null
+ })
+ }
+
+}
diff --git a/apps/payments/src/payments.module.ts b/apps/payments/src/payments.module.ts
new file mode 100644
index 0000000..f25b353
--- /dev/null
+++ b/apps/payments/src/payments.module.ts
@@ -0,0 +1,26 @@
+import { Module } from '@nestjs/common';
+import { PaymentsController } from './payments.controller';
+import { PaymentsService } from './payments.service';
+import { PrismaModule } from './prisma/prisma.module';
+import { ClientsModule, Transport } from '@nestjs/microservices';
+
+@Module({
+ imports: [
+ PrismaModule,
+ ClientsModule.register([
+ {
+ name: 'PAYMENTS_SERVICE',
+ transport: Transport.KAFKA,
+ options: {
+ client: {
+ clientId: 'payments',
+ brokers: ['kafka:29092'],
+ },
+ },
+ },
+ ]),
+ ],
+ controllers: [PaymentsController],
+ providers: [PaymentsService],
+})
+export class PaymentsModule {}
diff --git a/apps/payments/src/payments.service.ts b/apps/payments/src/payments.service.ts
new file mode 100644
index 0000000..eab351a
--- /dev/null
+++ b/apps/payments/src/payments.service.ts
@@ -0,0 +1,28 @@
+import { Inject, Injectable } from '@nestjs/common';
+import { PrismaService } from './prisma/prisma/prisma.service';
+import { Prisma, PaymentStatus } from '.prisma/client/payments';
+import { ClientKafka } from '@nestjs/microservices';
+import { lastValueFrom } from 'rxjs';
+
+@Injectable()
+export class PaymentsService {
+ constructor(
+ private prismaService: PrismaService,
+ @Inject('PAYMENTS_SERVICE') private kafkaClient: ClientKafka,
+ ) {}
+
+ all() {
+ return this.prismaService.payment.findMany();
+ }
+
+ async payment(data: Prisma.PaymentCreateInput) {
+ const payment = await this.prismaService.payment.create({
+ data: {
+ ...data,
+ status: PaymentStatus.APPROVED,
+ },
+ });
+ await lastValueFrom(this.kafkaClient.emit('payments', payment))
+ return payment;
+ }
+}
diff --git a/apps/payments/src/prisma/prisma.module.ts b/apps/payments/src/prisma/prisma.module.ts
new file mode 100644
index 0000000..75664ab
--- /dev/null
+++ b/apps/payments/src/prisma/prisma.module.ts
@@ -0,0 +1,9 @@
+import { Global, Module } from '@nestjs/common';
+import { PrismaService } from './prisma/prisma.service';
+
+@Global()
+@Module({
+ providers: [PrismaService],
+ exports: [PrismaService]
+})
+export class PrismaModule {}
diff --git a/apps/payments/src/prisma/prisma/prisma.service.ts b/apps/payments/src/prisma/prisma/prisma.service.ts
new file mode 100644
index 0000000..d6d0354
--- /dev/null
+++ b/apps/payments/src/prisma/prisma/prisma.service.ts
@@ -0,0 +1,17 @@
+import { Injectable, OnModuleInit } from '@nestjs/common';
+import { PrismaClient } from '.prisma/client/payments';
+
+@Injectable()
+export class PrismaService extends PrismaClient implements OnModuleInit {
+
+ async onModuleInit() {
+ await this.$connect();
+ }
+
+ async enableShutdownHooks(app: any) {
+ process.on("beforeExit", async () => {
+ await app.close();
+ })
+ }
+
+}
diff --git a/apps/payments/test/app.e2e-spec.ts b/apps/payments/test/app.e2e-spec.ts
new file mode 100644
index 0000000..8c9de08
--- /dev/null
+++ b/apps/payments/test/app.e2e-spec.ts
@@ -0,0 +1,24 @@
+import { Test, TestingModule } from '@nestjs/testing';
+import { INestApplication } from '@nestjs/common';
+import * as request from 'supertest';
+import { PaymentsModule } from './../src/payments.module';
+
+describe('PaymentsController (e2e)', () => {
+ let app: INestApplication;
+
+ beforeEach(async () => {
+ const moduleFixture: TestingModule = await Test.createTestingModule({
+ imports: [PaymentsModule],
+ }).compile();
+
+ app = moduleFixture.createNestApplication();
+ await app.init();
+ });
+
+ it('/ (GET)', () => {
+ return request(app.getHttpServer())
+ .get('/')
+ .expect(200)
+ .expect('Hello World!');
+ });
+});
diff --git a/apps/payments/test/jest-e2e.json b/apps/payments/test/jest-e2e.json
new file mode 100644
index 0000000..e9d912f
--- /dev/null
+++ b/apps/payments/test/jest-e2e.json
@@ -0,0 +1,9 @@
+{
+ "moduleFileExtensions": ["js", "json", "ts"],
+ "rootDir": ".",
+ "testEnvironment": "node",
+ "testRegex": ".e2e-spec.ts$",
+ "transform": {
+ "^.+\\.(t|j)s$": "ts-jest"
+ }
+}
diff --git a/apps/payments/tsconfig.app.json b/apps/payments/tsconfig.app.json
new file mode 100644
index 0000000..35b10b0
--- /dev/null
+++ b/apps/payments/tsconfig.app.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "declaration": false,
+ "outDir": "../../dist/apps/payments"
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "test", "**/*spec.ts"]
+}
diff --git a/docker-compose.yml b/docker-compose.yml
index 5b44148..f68cc9d 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -55,4 +55,10 @@ services:
CONTROL_CENTER_INTERNAL_TOPICS_PARTITIONS: 1
CONTROL_CENTER_MONITORING_INTERCEPTOR_TOPIC_PARTITIONS: 1
CONFLUENT_METRICS_TOPIC_REPLICATION: 1
- PORT: 9021
\ No newline at end of file
+ PORT: 9021
+ mysql:
+ image: mysql:8.0.30-debian
+ environment:
+ - MYSQL_ROOT_PASSWORD=root
+ volumes:
+ - ././docker/mysql:/docker-entrypoint-initdb.d
\ No newline at end of file
diff --git a/nest-cli.json b/nest-cli.json
index 86c1982..8ad7bf4 100644
--- a/nest-cli.json
+++ b/nest-cli.json
@@ -18,6 +18,15 @@
"compilerOptions": {
"tsConfigPath": "apps/orders/tsconfig.app.json"
}
+ },
+ "payments": {
+ "type": "application",
+ "root": "apps/payments",
+ "entryFile": "main",
+ "sourceRoot": "apps/payments/src",
+ "compilerOptions": {
+ "tsConfigPath": "apps/payments/tsconfig.app.json"
+ }
}
}
}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index d88a346..dcbfb86 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,10 @@
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
+ "@nestjs/microservices": "^10.2.6",
"@nestjs/platform-express": "^10.0.0",
+ "@prisma/client": "^5.3.1",
+ "kafkajs": "^2.2.4",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1"
},
@@ -1528,6 +1531,63 @@
}
}
},
+ "node_modules/@nestjs/microservices": {
+ "version": "10.2.6",
+ "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.2.6.tgz",
+ "integrity": "sha512-Ef5Tv0arRSXmMwzlOvXHZEoOS8QlftIrDVrLkpcR6x5Q3BaKrkGOKBet6w2JbssX4eEGt2nw4dy/TbzN9pQYFw==",
+ "dependencies": {
+ "iterare": "1.2.1",
+ "tslib": "2.6.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nest"
+ },
+ "peerDependencies": {
+ "@grpc/grpc-js": "*",
+ "@nestjs/common": "^10.0.0",
+ "@nestjs/core": "^10.0.0",
+ "@nestjs/websockets": "^10.0.0",
+ "amqp-connection-manager": "*",
+ "amqplib": "*",
+ "cache-manager": "*",
+ "ioredis": "*",
+ "kafkajs": "*",
+ "mqtt": "*",
+ "nats": "*",
+ "reflect-metadata": "^0.1.12",
+ "rxjs": "^7.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@grpc/grpc-js": {
+ "optional": true
+ },
+ "@nestjs/websockets": {
+ "optional": true
+ },
+ "amqp-connection-manager": {
+ "optional": true
+ },
+ "amqplib": {
+ "optional": true
+ },
+ "cache-manager": {
+ "optional": true
+ },
+ "ioredis": {
+ "optional": true
+ },
+ "kafkajs": {
+ "optional": true
+ },
+ "mqtt": {
+ "optional": true
+ },
+ "nats": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@nestjs/platform-express": {
"version": "10.2.6",
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.2.6.tgz",
@@ -1719,6 +1779,31 @@
"url": "https://opencollective.com/unts"
}
},
+ "node_modules/@prisma/client": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.3.1.tgz",
+ "integrity": "sha512-ArOKjHwdFZIe1cGU56oIfy7wRuTn0FfZjGuU/AjgEBOQh+4rDkB6nF+AGHP8KaVpkBIiHGPQh3IpwQ3xDMdO0Q==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@prisma/engines-version": "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59"
+ },
+ "engines": {
+ "node": ">=16.13"
+ },
+ "peerDependencies": {
+ "prisma": "*"
+ },
+ "peerDependenciesMeta": {
+ "prisma": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@prisma/engines-version": {
+ "version": "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59",
+ "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59.tgz",
+ "integrity": "sha512-y5qbUi3ql2Xg7XraqcXEdMHh0MocBfnBzDn5GbV1xk23S3Mq8MGs+VjacTNiBh3dtEdUERCrUUG7Z3QaJ+h79w=="
+ },
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -5817,6 +5902,14 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/kafkajs": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz",
+ "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/keyv": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
diff --git a/package.json b/package.json
index 98e6e15..df1f39f 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,10 @@
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
+ "@nestjs/microservices": "^10.2.6",
"@nestjs/platform-express": "^10.0.0",
+ "@prisma/client": "^5.3.1",
+ "kafkajs": "^2.2.4",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1"
},