Skip to content

API de gerenciamento de clientes. Fornece rotas para criar novos clientes, consultar clientes por CPF e recuperar todos os clientes com paginação.

Notifications You must be signed in to change notification settings

GabrielaTiago/CustomersRegistrations

Repository files navigation

Customers Registration

Teste técnico igma

$~$

📋 Descrição

Este é um projeto de API de gerenciamento de clientes, construído com as tecnologias TypeScript, Express, Jest, SuperTest e PostgreSQL. Ele fornece rotas para criar novos clientes, consultar clientes por CPF e recuperar todos os clientes com paginação.

A API permite que você crie clientes com nome, CPF e data de nascimento, e armazene essas informações em um banco de dados PostgreSQL. As rotas de GET permitem que você consulte um cliente específico pelo seu CPF ou todos os clientes de uma só vez, com a opção de paginação.

Este projeto é construído com TypeScript, o que garante uma tipagem segura e uma melhor manutenibilidade do código. O Express é usado para criar as rotas da API, enquanto o Jest e o SuperTest são utilizados para testar as funcionalidades da API. Além disso, o PostgreSQL é usado como banco de dados para armazenar as informações dos clientes.

🗃️ Acesse aqui


✅ Testes

  • Criação de um novo cliente
  • Buscar um cliente pelo CPF
  • Buscar todos os clientes

🗺️ Rotas

[POST]  /customer

    - Rota para criar um novo cliente
    - Inputs são obrigatórios
    - Nome: apenas letras,
    - CPF: apenas números - ###.###.###-## ou 12345678900,
    - Data de nascimento: apenas números, (necessário as barras /) - DD/MM/AAAA

    - body:
        {
            "name": "Vitor Santos",
            "cpf": "818.037.660-50",
            "birth_date" : "22/07/1993"
        }

Descrição:

A rota POST /customer é a rota responsável por adicionar novos clientes ao banco de dados da API de cadastro de clientes. Esta rota permite que o usuário envie informações de cliente, incluindo nome, CPF e data de nascimento, para serem registrados na base de dados.

Ao fazer uma requisição POST para esta rota, o usuário envia os dados do cliente através do corpo da requisição. As informações são validadas antes de serem armazenadas na base de dados, garantindo que apenas informações válidas sejam aceitas.

  • Campo de nome: foi implementada uma validação para garantir que apenas caracteres alfabéticos sejam aceitos, evitando assim a inserção de caracteres numéricos e especiais.

  • Campo de CPF, a validação permite apenas caracteres numéricos, aceitando os pontos e traços nas posições corretas. Além disso, foi implementada uma validação dos dois últimos caracteres, garantindo que somente um usuário com CPF válido possa ser cadastrado.

  • Campo de data de nascimento, a validação foi realizada para garantir que apenas datas no formato DD/MM/YYYY sejam aceitas, e que apenas datas menores que a data de hoje possam ser cadastradas, evitando assim informações inválidas ou inconsistentes.

Retornos:

Status Code Situação
201 Cliente com sucesso
409 Cliente já criado
422 Nenhum 'body' enviado
422 Nome inválido
422 CPF inválido
422 Data de nascimento inválida

$~$

[GET] /customers?page=1&limit=10

    - Rota para buscar todas os clientes
    - Possui paginação
    - Por padrão, page = 1 e limit = 10

    - response:
        [
            {
                "id": 1,
                "name": "João da Silva",
                "cpf": "383.470.470-90",
                "birth_date": "1982-02-02T03:00:00.000Z"
            },
            {
                "id": 2,
                "name": "Maria Oliveira",
                "cpf": "849.159.140-03",
                "birth_date": "1983-03-03T03:00:00.000Z"
            },
            {
                "id": 3,
                "name": "Rafaela Souza",
                "cpf": "99247520070",
                "birth_date": "1991-11-11T02:00:00.000Z",
            },
            ...
        ]

Descrição:

A rota GET /customers permite a recuperação de todos os clientes registrados na base de dados da API de cadastro de clientes. Esta rota é implementada com a utilização de paginação, o que significa que os resultados são retornados em conjuntos, ou páginas, para melhorar a performance da consulta e evitar problemas de sobrecarga de dados.

Com esta rota, é possível recuperar informações sobre todos os clientes registrados na base de dados, incluindo nome, CPF e data de nascimento. É possível especificar o número da página a ser retornada, bem como o número de resultados por página, para que os dados sejam retornados de forma eficiente e organizada.

Por padrão, esta rota vem filtrada para primeira página limitada à 10 clientes.

  • Parametros de página e limite, possuem validações para números inválidos, tais como números negativos ou muito grandes.

Retornos:

Status Code Situação
200 Retorna os clientes
404 Não econtra nenhum cliente
422 Número da página inválido
422 Número do limite inválido
422 Números da página e do limite inválidos

$~$

GET /customer/:cpf

    - Rota para buscar um cliente específico pelo seu cpf
    - params: '123.456.789-14'
    - response:
        [
            {
                "id": 9,
                "name": "Rafaela Souza",
                "cpf": "12345678914",
                "birth_date" : "1985-05-05T03:00:00.000Z"
            }
        ]

Descrição:

A rota GET /customer/:cpf é a rota responsável por buscar informações sobre um cliente específico na base de dados da API de cadastro de clientes. Esta rota utiliza o CPF do cliente como parâmetro de busca, permitindo a recuperação precisa e rápida das informações relevantes.

Ao fazer uma requisição GET para esta rota, o usuário especifica o CPF do cliente desejado na URL, como por exemplo: GET /customer/123.456.789-10. A API então realiza uma busca na base de dados por um cliente com esse CPF, e retorna as informações encontradas, incluindo nome e data de nascimento.

  • No parâmetro cpf, a validação permite apenas caracteres numéricos, aceitando os pontos e traços nas posições corretas.

Retornos:

Status Code Situação
200 Retorna o cliente
404 Não econtra nenhum cliente
422 CPF inválido

🚀 Rodando esse projeto localmente

Para inicializar esse projeto é necessário que você possua a última versão estável do Node.js e npm rodando localmente. Você também precisará instalar o postgres para configurar o banco de dados.

Primeiro de tudo, clone este projeto ou faça o download do ZIP.

Para realizar o clone, no terminal de sua máquina, utilize o git e insira o seguinte comando:

    https://github.com/GabrielaTiago/CustomersRegistration.git

Entre na pasta do projeto

    cd CustomersRegistration

Execute o seguinte comando para instalar as dependências.

    npm install

Crie um banco de dados postgres para armazenar as informações de clientes. Você pode fazer isso usando o terminal ou a ferramenta de gerenciamento gráfico pgAdmin.

Execute a seguinte query para criar a tabela de usuários:

    CREATE TABLE "users" (
        "id" SERIAL PRIMARY KEY,
        "name" TEXT NOT NULL,
        "cpf" CHAR(11) NOT NULL,
        "birth_date" DATE NOT NULL
    );

Criar um arquivo .env e um .env.test na raiz do projeto com os seguintes dados:

⚠️ Atenção: A 'DATABASE_URL' deve conter seus dados pessoais postgres para funcionar corretamente.

.env

    PORT=4000
    DATABASE_URL="postgres://[YourUserName]:[YourPassword]@[YourHostname]:5432/[YourDatabaseName]";

.env.test

    PORT=4000
    DATABASE_URL="postgres://[YourUserName]:[YourPassword]@[YourHostname]:5432/[YourDatabaseName_test]";

Para iniciar o servidor, execute o comando:

    npm run start

A aplicação estará disponível em: http://localhost:4000 no seu navegador.

Para rodar todos os testes,

    npm run test

Para ver apenas os testes end to end (e2e)

    npm run test:e2e

Testes unitários no serviço

    npm run test:service

💡 Reconhecimentos


👩‍🦱 Autora

Gabriela Tiago de Araújo

email: gabrielatiagodearaujo@outlook.com linkedin: https://www.linkedin.com/in/gabrielatiago/


🔝 Back to top

About

API de gerenciamento de clientes. Fornece rotas para criar novos clientes, consultar clientes por CPF e recuperar todos os clientes com paginação.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published