Sobre • Vitrine Dev • Tecnologias • Instalações • Funcionalidades • Autor • Licença
🚀 É 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 | |
---|---|
✨ 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 |
As seguintes ferramentas foram usadas na construção do projeto
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
# development (http://localhost:3000/)
$ npm run start
# watch mode (http://localhost:3000/)
$ npm run start:dev
# production mode
$ npm run start:prod
# 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
# 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
# Abrindo pasta Kafka-producer e executando o producer
cd Kafka-producer
node kafka-producer.js
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.
Este projeto é MIT licensed.