Skip to content

ocoiel/notification-service

Repository files navigation

Notifications Service - NestJS - Clean Architecture

GitHub top language GitHub last commit


SobreNotifications ServiceInstalaçãoTecnologiasAutor


Sobre

Projeto desenvolvido usando os conceitos de Clean Arch, DDD, SOLID, Decorator, Adapters, Repositories, InMemoryDatabase, Mappers, ViewModels, DI (Depedency Injection), Use-cases pattern e Jest.

  • Prisma como ORM (Object Relational Mapper)
  • Typescript (superset do Javascript com tipagem estática)
  • Apache Kafka (mensageria)

Wallpaper

Notifications Service

O Notifications Service é um microsserviço responsável por lidar com notificações de diversas fontes. A ideia do projeto é entender como arquitetar um microsserviço de melhor maneira afim de tê-lo desacoplado de qualquer tecnologia do meio externo e que seja altamente escalável, seguindo as melhores praticas de programação com esse tipo de arquitetura e as tecnologias mais modernas do momento no mundo do NodeJS.

Esse projeto é um consumer do Kafka que irá consumir mensagens de um tópico chamado notifications.send-notification e irá realizar registros das notificações em uma tabela no banco de dados.

O cluster Kafka pode ser criado de diversas formas e integrado ao projeto, a maneira realizada aqui foi utilizando o serviço Upstash. Ao acessa-lo, basta criar uma conta, criar o cluster e tópico e conectar a aplicação a ele. Deixo abaixo um exemplo do dashboard de uso do serviço aonde realizei os testes da aplicação:

Upstash Dashboard

Como podemos ver acima, no momento do print-screen, havia produzido 30 mensagens, das quais 27 foram consumidas por esse microsserviço e registradas em nosso banco de dados.

Ao executar a aplicação, ela se conecta ao nosso cluster e consome as mensagens que estão no tópico:

App start log

Caso existam mensagens a serem consumidas, a aplicação as consome e gera os registros em nosso BD, nesse caso, um banco SQLite. Vamos ver os registros no exemplo abaixo:

Notification table

A aplicação utiliza o Prisma e executando o comando prisma studio conseguimos subir uma interface web para visualizar nosso banco de dados, aonde podemos ver as notificações sendo registradas.

Para manipular nossos registros a aplicação conta com uma API REST contendo endpoints para criar e cancelar notificações, marca-las como lidas e não lidas, além de rotas para obter o total de notificações ou as próprias notificações de um usuário.

Deixarei abaixo a coleção das requisições para serem importadas no Insomnia:

Run in Insomnia

Como esse microsserviço é apenas um consumer, deixarei nesse repositório a pasta notifications-kafka-producer, a qual contem o código de um simples producer kafka para gerar as mensagens a serem consumidas pelo notifications-service.

Instalação

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: Git, Node.js. Além disso é bom ter um editor para trabalhar com o código como VSCode.

🎲 Rodando o Back End (servidor)

# Clone este repositório
$ git clone https://github.com/ocoiel/notification-service.git

# Acesse a pasta do projeto no terminal/cmd
$ cd notification-service

# Instale as dependências
$ npm install
# Caso prefira usar o Yarn execute o comando abaixo
$ yarn
# Caso prefira usar o pnpm execute o comando abaixo
$ pnpm i

# Execute a aplicação em modo de desenvolvimento
$ npm run start:dev
# Caso prefira usar o Yarn execute o comando abaixo
$ yarn start:dev
# Caso prefira usar o pnpm execute o comando abaixo
$ pnpm run start:dev

# Execute os testes da aplicação
$ npm run start:test
# Caso prefira usar o Yarn execute o comando abaixo
$ yarn start:test
# Execute os testes da aplicação
$ pnpm run start:test

# O servidor inciará na porta 3333 - acesse <http://localhost:3333>

Tecnologias

Node.js

NestJS

Jest

Kafka




Autor

Gabriel Albuquerque

Software Developer

LinkedIn GitHub Gmail WhatsApp

About

Microservice of Notifications made with NestJS

Resources

Stars

Watchers

Forks

Packages

No packages published