Skip to content

Node.js Microservice Notification on Hexagonal Architecture, Domain Driven Design , Object Oriented Programming, SOLID, Adapter, Factory.

Notifications You must be signed in to change notification settings

yuryss98/Microservice-Notification

Repository files navigation

Boas vindas ao repositório do projeto Microservice-Notification!


Neste projeto, foi desenvolvido um microsserviço de notificações. Nele, você pode enviar uma notificação, cancelá-la, marcá-la como lida, marcá-la como não lida, ver quantas notificações um destinatário tem e ver todas as notificações de um destinatário.

Meu objetivo neste projeto era criar uma aplicação escalável e de fácil manutenção. Para isso, construí o projeto em Programação Orientada a Objetos (POO), seguindo os princípios do SOLID e aplicando o Domain-Driven Design (DDD) e a arquitetura hexagonal. Também utilizei os padrões de design "Adapter" e "Factory Method". Para garantir que a aplicação estava funcionando corretamente desde o início do desenvolvimento, apliquei o conceito de Behavior-Driven Development (BDD) para testar e validar o software.

🛠 Tecnologias usadas:

  • Node;
  • Typescript;
  • Ts-node;
  • Ts-node-dev;
  • Chai;
  • Mocha;
  • Eslint;
  • Express;
  • Helmet;
  • Mongoose;
  • Docker;

Execute localmente (é preciso ter o docker instalado):

Clone o projeto

git clone git@github.com:yuryss98/Microservice-Notification.git

Vá para o diretório do projeto:

cd Microservice-Notification

Execute os seguintes comandos:

  docker compose up -d
  docker exec -it node_container bash
  npm install

Apartir daqui pode executar um comando para rodar os testes de comportamento do software, execute o seguinte comando:

  npm run test

Para iniciar a aplicação em modo de desenvolvimento:

  npm run dev

Para iniciar a aplicação em modo de produção:

  npm start

A partir desse ponto ja pode testar os endpoints. Todos os endpoints vao ser acessiveis a partir de http://localhost:3005/notifications

gif

POST /send/recipientId -- O método POST em /send/recipientId onde recipientId é o id de um destinatario, é responsavel pelo envio de uma notificação, para esse endpoint funcionar corretamente ele precisa de dois campos no corpo da requisição, sendo eles:

--

  • content: campo do tipo texto - CAMPO OBRIGATORIO

  • category: campo do tipo texto - CAMPO OBRIGATORIO

--

EXEMPLO:

http://localhost:3005/notifications/send/10

{
  "content": "Você foi aprovado no processo seletivo",
  "category": "profissional"
}

RETORNO ESPERADO:

Status 201 e corpo da resposta:

{
  "id": "63f7bd74801f5820a2cdd107",
  "category": "profissional",
  "content": "Você foi aprovado no processo seletivo",
  "recipientId": "10"
}
GET /from/recipientId/count -- O método GET em /from/recipientId/count onde recipientId é o id de um destinatario, é responsavel por retornar a quantidade de notificações de um destinatario.

EXEMPLO:

http://localhost:3005/notifications/from/10/count

--

RETORNO ESPERADO:

Status 200 e o corpo da resposta:

  • 1;
GET /from/recipientId -- O método GET em /from/recipientId onde recipientId é o id de um destinatario, é responsavel por retornar todas as notificações de um destinatario.

--

EXEMPLO:

http://localhost:3005/notifications/from/10

--

RETORNO ESPERADO:

Status 200 e o corpo da resposta:

  [
    {
      "id": "63f7bf12801f5820a2cdd10b",
      "category": "profissional",
      "content": "Você foi aprovado no processo seletivo",
      "recipientId": "10",
      "createdAt": "2023-02-23T19:31:30.332Z",
      "canceledAt": null,
      "readAt": null
    }
  ]
PATCH /notificationId/read -- O método PATCH em /notificationId/read onde notificationId é o id de uma notificação, é responsavel por marca uma notificação como lida.

--

EXEMPLO:

http://localhost:3005/notifications/63f7bf12801f5820a2cdd10b/read

--

RETORNO ESPERADO:

Status 204, sem conteudo no corpo da resposta;

PATCH /notificationId/unread -- O método PATCH em /notificationId/unread onde notificationId é o id de uma notificação, é responsavel por marca uma notificação como não lida.

--

EXEMPLO:

http://localhost:3005/notifications/63f7bf12801f5820a2cdd10b/unread

--

RETORNO ESPERADO:

Status 204, sem conteudo no corpo da resposta;

PATCH /notificationId/cancel -- O método PATCH em /notificationId/cancel onde notificationId é o id de uma notificação, é responsavel por marcar uma notificação como cancelada.

--

EXEMPLO:

http://localhost:3005/notifications/63f7bf12801f5820a2cdd10b/cancel

--

RETORNO ESPERADO:

Status 204, sem conteudo no corpo da resposta;

About

Node.js Microservice Notification on Hexagonal Architecture, Domain Driven Design , Object Oriented Programming, SOLID, Adapter, Factory.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published