Back-end Serviço de Notificações com NestJs, Apache Kafka, Upstash, TypeScript, Prisma e Jest
- Back-end Serviço de Notificações com NestJs, Apache Kafka, Upstash, TypeScript, Prisma e Jest
Sobre • Vitrine Dev • Tecnologias • Instalações • Funcionalidades • Autor • Licença
💻 Sobre o projeto
🚀 É um micro-serviço de notificações com NestJs, Apache Kafka, Upstash, TypeScript, Prisma e Jest. Este projeto faz parte do ignite-lad da RocketSeat.
Possui as funcionalidades de:
- Criar Notificações;
- Ver Notificações;
- Cancelar Notificações;
- Marcar Notificação como Lida;
- Marcar Notificação como não lida;
- Contar Notificações;
Criamos nossa estrutura como:
Kafka producer - Ao rodar o script kafka-producer.js enviamos uma notificação para o Topics do servidor kafka Upstash, esta notificação foi configurada para se manter no servidor ate 7 dias.
Prisma - Utilizei o Prisma como ORM e para ambiente de desenvolvimento utilizei o SQLite.
Test - Utilizei o JestJs para realizar os testes, são 13 testes no total.
Insomnia - Testei as rotas com Insomnia são 6 rotas no total.
SRC/app - Temos nossas entidades, repositórios e use-cases.
SRC/infra - simulação de database para testarmos a aplicação sem subir banco de dados. Temos nosso http que é nossa aplicação e também temos a messaging que é a nossa conexão com kafka.
O objetivo foi realizar um micro-serviço que não precisamos subir banco de dados para testar, que tenha um banco de dados com um ORM, que seja interligado ao kafka para protegermos a integridade do serviço, assim mantemos as notificações salva ate que nosso serviço volte a funcionar. Também era objetivo criar o projeto com testes, bem modulado.
O projeto é escalável, testável e seguro. Foi um grande desafio fazer a integração de todas as ferramentas e trabalhar com um projeto que poderia ser escalável.
📺 Vitrine Dev
🪧 Vitrine.Dev | |
---|---|
✨ Nome | Back-end Serviço de Notificações com NestJs, Apache Kafka, Upstash, TypeScript, Prisma e Jest |
🏷️ Tecnologias | Nestjs, Apache Kafka, Upstash, NodeJs, Typescript, Javascript, Jest, Prisma, Prettier, Eslint |
🛠 Tecnologias
As seguintes ferramentas foram usadas na construção do projeto
⚙️ Instalações
Instalando CLI do NestJs de forma global
npm i -g @nestjs/cli
Instalando modulo de Microservices do Nestjs
npm i --save @nestjs/microservices
Criando projeto com Nestjs
nest new notifications-service
Instalando KafkaJs
npm i kafkajs
Instalando Prisma
npm i prisma -D
npm i @prisma/client
Integrando o prisma com NestJs. Crie um arquivo dentro de src prisma.service.ts
import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect();
}
async enableShutdownHooks(app: INestApplication) {
this.$on('beforeExit', async () => {
await app.close();
});
}
}
Instalando validadores class-validator e class-transformer.
npm i class-validator class-transformer
⚙️ Funcionalidades
Running the app
# development (http://localhost:3000/)
$ npm run start
# watch mode (http://localhost:3000/)
$ npm run start:dev
# production mode
$ npm run start:prod
Test
# unit tests
$ npm run test
# unit tests with watch
$ npm run test:watch
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
ORM Prisma
# Criando BD prisma
npx prisma init --datasource-provider SQLite
# criando/atualizando as tabelas do BD no prisma
npx prisma migrate dev
# Enter a name for the new migration: » created tab Notification
# prisma studio (Verificar tabelas e realizar CRUD manual)
npx prisma studio
# ou
npx prisma studio -b firefox -p 5173
# -b firefox p/ especificar navegador
# -p 5173 p/ especificar porta
Kafka-producer
# Abrindo pasta Kafka-producer e executando o producer
cd Kafka-producer
node kafka-producer.js
🦸 Autor
Olá, eu sou Livio Alvarenga, Engenheiro de Produção | Dev Back-end e Front-end. Sou aficcionado por tecnologia, programação, processos e planejamento. Uni todas essas paixões em uma só profissão. Dúvidas, sugestões e críticas são super bem vindas. Seguem meus contatos.
📝 Licença
Este projeto é MIT licensed.