Este é o backend da aplicação cadastro de alunos - onde os usuários podem realizar operações CRUD (Create, Read, Update, Delete) em registros de alunos. Os dados de cada aluno incluem nome, e-mail e CPF. Além disso, a aplicação permite a busca de alunos por qualquer um desses campos.
Antes de iniciar, certifique-se de ter as seguintes ferramentas instaladas em seu sistema:
Node.js e npm: O Node.js é um ambiente de tempo de execução JavaScript e o npm é o gerenciador de pacotes para o Node.js. Você pode baixá-los e instalá-los a partir do site oficial do Node.js.
PostgreSQL: O PostgreSQL é um sistema de gerenciamento de banco de dados relacional de código aberto. Baixe e instale o PostgreSQL a partir do site oficial do PostgreSQL.
DBeaver ou outra ferramenta de administração de banco de dados: Essa ferramenta será usada para criar e administrar seu banco de dados local PostgreSQL. Você pode baixar o DBeaver ou outra ferramenta similar de sua preferência.
-
Clone este repositório para o seu ambiente local:
git@github.com:luandniz/students-register-back.git
-
Instale as dependências necessárias usando
cd students-register-back npm install
-
Criar um banco de dados local e iniciá-lo:
Utilize o DBeaver ou outra ferramenta de administração de banco de dados para criar um banco de dados local PostgreSQL. Após a criação do banco de dados, inicie o servidor.
- Configurar as variáveis de ambiente:
Dentro do diretório da sua aplicação, crie um arquivo .env e defina as variáveis de ambiente necessárias, conforme instruções do arquivo .env.example:
-
Executar as migrações do TypeORM:
Execute o seguinte comando para aplicar as migrações definidas no projeto e criar a estrutura inicial do banco de dados:
npm run typeorm migration:run -- -d src/data-source
Caso você esteja usando yarn, o comando será:
npm run typeorm migration:run -d src/data-source
- Enfim, chegamos na última etapa e você pode rodar a aplicação localmente com o seguinte comando:
npm run dev
A API tem um total de 4 endpoints.
GET /students - FORMATO DA RESPOSTA - STATUS 200
[
{
"id": 18,
"name": "Mary Aneexlll",
"email": "maryanee@email.corna",
"cpf": "05089748987"
},
{
"id": 20,
"name": "john",
"email": "john@email.com",
"cpf": "05897458963"
},
{
"id": 21,
"name": "Kate",
"email": "kate@email.com",
"cpf": "54896321458"
},
{
"id": 22,
"name": "jessy",
"email": "jessy@email.com",
"cpf": "56897412365"
},
{
"id": 23,
"name": "carrie",
"email": "carrie@email.com",
"cpf": "52145789632"
},
]
Podemos utilizar os query params para filtrar a lista, usando o tipo de busca que será name, email ou cpf e o valor a ser pesquisado.
GET /students?email=mary - FORMATO DA RESPOSTA - STATUS 200
[
{
"id": 2,
"name": "Mary Kate Update",
"email": "marykate@email.com",
"cpf": "25896312549"
}
]
POST /students - FORMATO DA REQUISIÇÃO
{
"name": "john Doe",
"email": "johndoe@email.com",
"cpf": "05089748986"
}
Caso dê tudo certo, a resposta será assim:
POST /students - FORMATO DA RESPOSTA - STATUS 201
{
"name": "john Doe",
"email": "johndoe@email.com",
"cpf": "05089748986",
"id": 19
}
Caso você acabe errando e mandando algum campo errado, a resposta de erro será assim: No exemplo a requisição foi feita faltando o campo "name" um "email" inválido e com o tipo de "cpf" errado.
POST /students -
FORMATO DA RESPOSTA - STATUS 400
{
"name": [
"String must contain at least 3 character(s)"
],
"email": [
"Invalid email"
],
"cpf": [
"Expected string, received number"
]
}
PATCH /students/:studentId - FORMATO DA REQUISIÇÃO
{
"name": "john Doe Update",
"email": "johndoe@email.com",
"cpf": "12345678912"
}
ou por campo específico
{
"email": "johndoe@email.com",
}
Caso dê tudo certo, a resposta será assim:
PATCH /students/:studentsId - FORMATO DA RESPOSTA - STATUS 201
{
"id": 11,
"name": "john Doe Update",
"email": "johndoe@email.com",,
"cpf": "12345678912"
}
Caso você acabe errando e mandando algum campo errado, a resposta de erro será assim: No exemplo a requisição foi feita com um cpf que já está cadastrado no banco de dados.
PATCH /students/:studentId -
FORMATO DA RESPOSTA - STATUS 400
{
"message": "CPF already in use"
}
DELETE /students/:studentId
Não é necessário um corpo da requisição.
Caso dê tudo certo, o status da requisição será 200: