Domain Notification em NodeJS 🚀

jhonesgoncalves

Jhones Gonçalves

Posted on February 22, 2023

Domain Notification em NodeJS 🚀

Introdução

Uma das responsabilidades do domínio de uma aplicação é garantir que os dados que a aplicação manipula estejam em um estado válido. No entanto, há casos em que os dados não estão em um estado válido, e o domínio precisa notificar o usuário sobre esses problemas. A notificação do usuário pode ser feita por meio de exceções ou erros, mas isso pode prejudicar a experiência do usuário e a confiabilidade do sistema. Uma alternativa é usar o padrão de Domain Notification para notificar o usuário sobre problemas em seus dados.

O padrão de Domain Notification permite que a aplicação capture todos os problemas em seus dados e apresente-os ao usuário de uma maneira amigável. Ele é usado para notificar o usuário sobre problemas de validação, erros de negócio, etc. Neste artigo, discutiremos como implementar o padrão de Domain Notification em NodeJS usando o pacote flunt-js.

O que é o flunt-js?

Flunt-js é uma biblioteca criada por min para validação de dados em JavaScript. Ele oferece uma abordagem simples e intuitiva para validar objetos. O flunt-js é inspirado no Flunt para .NET do André Baltieri e é compatível com o ES6 e o TypeScript ( Irei trabalhar na implementação para suportar 100% sem ter que sinalizar no arquivo para permitir js).

Implementação

Para implementar o padrão de Domain Notification, você precisa criar uma classe que encapsule a lógica de validação e notificação. Essa classe será responsável por notificar o usuário sobre quaisquer problemas em seus dados.

Vamos criar uma entidade de exemplo User que possui as seguintes propriedades: nome, email, senha e cpf. Vamos usar o flunt-js para validar as propriedades de User e notificar o usuário sobre quaisquer problemas.

Primeiro, precisamos instalar a biblioteca:

npm install flunt-js
Enter fullscreen mode Exit fullscreen mode

Usando o FluntJS e criando um entidade com validações

const { Notifiable, Contract } = require('flunt-js');

class User extends Notifiable {
  constructor(nome, email, senha, cpf) {
    super();

    this.nome = nome;
    this.email = email;
    this.senha = senha;
    this.cpf = cpf;
    this.dataCadastro = new Date();

    super.AddNotifications(
      new Contract()
        .isEmail(email, 'O email informado é inválido.')
        .hasMaxLen(nome, 50, 'O nome deve ter no máximo 50 caracteres.')
        .hasMinLen(senha, 6, 'A senha deve ter no mínimo 6 caracteres.')
        .isFixedLen(cpf, 11, 'O CPF informado é inválido.')
    );

  }
}

const usuario = new User('John Doe', 'johndoe@example.com', '123456', '12345678901');

// Executa a validação e imprime as mensagens de erro, se houver
if (!usuario.isValid()) {
  console.log(usuario.getMessages());
} else {
  console.log('Usuário válido.');
}

Enter fullscreen mode Exit fullscreen mode

Nesse código, a classe User encapsula a lógica de validação e notificação usando o flunt-js. A função validar() usa o flunt-js para validar as propriedades de User e notificar o usuário sobre quaisquer problemas.

O flunt-js suporta vários tipos de validação, incluindo validação de comprimento máximo (hasMaxLen), validação de comprimento mínimo (hasMinLen), validação de formato de e-mail (isEmail), validação de valor fixo (isFixedLen), etc. É possível personalizar as mensagens de erro retornadas por cada validação.


const usuario = new User('John Doe', 'johndoe@example.com', '123', '1234564233432478901');

// Executa a validação e imprime as mensagens de erro, se houver
if (!usuario.isValid()) {
  console.log(usuario.getMessages());
} else {
  // não entra aqui pois os dados são inválidos
  console.log('Usuário válido.');
}

Enter fullscreen mode Exit fullscreen mode

Nesse código, criamos um novo usuário com dados inválidos e validamos esses dados. Se a validação falhar, a função notifications retornará uma lista de mensagens de erro. Podemos usar essa lista para notificar o usuário sobre quaisquer problemas.

Agora que temos nossa entidade User, podemos usá-la para validar os dados do usuário em uma rota POST. Por exemplo, se estivermos criando um novo usuário em nossa aplicação, podemos fazer o seguinte:

const express = require('express');
const User = require('./User');

const app = express();
app.use(express.json());

app.post('/users', (req, res) => {
  const { name, email, password } = req.body;

  const user = new User(name, email, password);

  if (user.isValid()) {
    // retorna a lista de notificações ( caso queria somente as mensagens pode usar o getMessages() )
    return res.status(400).json(user.notifications);
  }

  // Salvar usuário no banco de dados
});
Enter fullscreen mode Exit fullscreen mode

Conclusão

O padrão de Domain Notification é uma maneira de notificar o usuário sobre problemas em seus dados. Ele permite que a aplicação capture todos os problemas em seus dados e apresente-os ao usuário de uma maneira amigável.

Neste artigo, discutimos como implementar o padrão de Domain Notification em Node.js usando o pacote flunt-js. É uma biblioteca para validação de dados em JavaScript que oferece uma abordagem simples e intuitiva para validar objetos.

A validação usando o flunt-js ajuda a garantir que os dados estejam em um estado válido e notifica o usuário sobre quaisquer problemas. Usando a validação, podemos garantir que a aplicação está recebendo dados válidos e evitar problemas futuros.

Referências

Flunt-js: https://github.com/jhonesgoncalves/flunt
Flunt: https://github.com/andrebaltieri/Flunt
Domain Notification: https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice#domain-events-and-notifications

💖 💪 🙅 🚩
jhonesgoncalves
Jhones Gonçalves

Posted on February 22, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Domain Notification em NodeJS 🚀
javascript Domain Notification em NodeJS 🚀

February 22, 2023