Skip to content

Back-end Serviço de Notificações com NestJs, TypeScript, Prisma e Jest

License

Notifications You must be signed in to change notification settings

LivioAlvarenga/notifications-service

Repository files navigation

logo ignite lab - Back-end Serviço de Notificações com NestJs, Apache Kafka, Upstash, TypeScript, Prisma e Jest

SobreVitrine DevTecnologiasInstalaçõesFuncionalidadesAutorLicença

 

Capa

 

💻 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.

 

issue site alurabooks total amount of programming languages used in the project most used language in the projects repository size


 

📺 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

 

NestJs badge Apache Kafka badge Upstash badge Node.js badge TypeScript badge JavaScript badge JestJs badge Prisma badge vscode download code formatter prettier code standardization eslint


 

⚙️ 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.

 

portifólio livio alvarenga perfil linkedin livio alvarenga perfil twitter livio alvarenga perfil instagram livio alvarenga perfil facebook livio alvarenga perfil youtube livio alvarenga

perfil vitrinedev livio alvarenga


 

📝 Licença

Este projeto é MIT licensed.

#CompartilheConhecimento