Ruan Victor |
Bruno Lima |
Kely Soares |
Hugo Amadio |
Jorge Jesus |
Matheus Mozart |
Jociel Andrade |
João Carlos |
Abdenaide Ribeiro |
- Documentação
- Contact
Está documentação trás as informações necessárias para a utilização do backend do projeto Opus. Nela você encontrará informações sobre as rotas disponíveis, os métodos aceitos, os parâmetros necessários e os comandos para rodar o projeto e os testes.
Tecnologia | Descrição |
---|---|
Node.js | Runtime de JavaScript |
Express | Framework Web |
Prisma | ORM (Mapeamento de Objetos-Relacionais) |
Docker | Contêinerização |
MySQL | Banco de Dados |
Jest | Testes |
Vitest | Testes |
Bcrypt | Criptografia |
Json Web Token (JWT) | Autenticação |
Cors | Segurança |
Dotenv | Gerenciamento de Variáveis de Ambiente |
Nodemon | Ferramenta de Desenvolvimento |
SuperTest | Testes de Integração |
Multer | Upload de Arquivos |
Ts-node | Execução de Código TypeScript |
Typescript | Linguagem de Programação |
O servidor e o banco de dados estão em containers docker.
É altamente recomendável não modificar o arquivo docker-compose.yml
para evitar problemas com a execução do projeto. Igualmente, não altere os scripts de execução do projeto no package.json
.
Caso seja necessário alterar alguma configuração de porta, tenha certeza de fazer o bind corretamente no arquivo docker-compose.yml
e no dockerfile
no caso do backend.
Não é necessário instalar o banco de dados.
Instale as dependências do projeto:
npm install # Instala as dependências do projeto localmente
Essas dependências locais são necessária para poder fazer edições no projeto.
Em seguida, rode o projeto com o comando abaixo para rodar o servidor e o banco de dados:
docker-compose up # Roda o servidor e o banco de dados em modo de visualização de logs
docker-compose up -d # Roda o servidor e o banco de dados em modo de background
O Docker irá baixar as imagens e criar os containers automaticamente.
Além disso, irá instalar as dependências do projeto e um script irá inicializar o prisma(generate) e rodar as migrations e os seeders.
Após todos os comandos terem sidos executados, o projeto estará rodando e pronto para ser utilizado.
Para rodar os testes, você deverá estar dentro do container do backend e rodar o comando:
docker exec -it opus_backend /bin/bash # Acessa o container do backend
npm run test # Roda os testes
Caso encontre algum erro, por favor, abra uma issue no repositório do projeto.
Todas as rotas podem ser acessadas através do endereço http://localhost:8000/*
, onde *
é o caminho da rota.
Todas as rotas, com exceção da rota de login e cadastro, necessitam de um token de autenticação no header da requisição.
{
"Authorization": "Bearer <token-valido>"
}
Rota livre de autenticação.
- METHOD: POST.
- PATH:
/auth
. - BODY:
{
"email": "email@email.com",
"password": "senha123"
}
- RESPONSE:
{
"token": "<token>" # Isso é um exemplo, o token é gerado pelo jwt. Um token real terá um formato diferente
}
Descrição:
Essa rota autentica o usuário e gera um token com jwt (Json Web Token).
Ela recebe um objeto com o email e a senha do usuário e valida esses dados comparando as informações, email e senha, com os do banco de dados. A senha passada é comparada com o hash armazenado no banco de dados utilizando o bcrypt, e se for validado, o login é permitido e um token é gerado e retornado na resposta da requisição.
Rota livre de autenticação.
- METHOD: POST.
- PATH:
/candidate/register
. - BODY:
{
"name": "Nome do Candidato",
"email": "email@email.com",
"password": "senha123",
"phone": "123456789",
"address": "Rua dos Bobos, nº 0",
"age": 20,
"about": "Sobre o candidato",
"experience": "Experiência do candidato",
"formation": "Formação do candidato",
"curriculum": "file.pdf" # Arquivo do currículo
}
- RESPONSE:
{
"message": "Candidato cadastrado com sucesso"
}
DESCRIPTION:
O formato do email é validado utilizando uma expressão regular(regex).
Esses dados são divididos em três tabelas para melhor organização: candidates
, education
e contactInfo
.
-
A tabela
candidates
armazena as informações do candidato, como nome, email, senha, idade, sobre e as FKs para as outras duas tabelas. -
A tabela
education
armazena as informações de formação do candidato, como experiência, formação e o caminho do arquivo do currículo. -
A tabela
contactInfo
armazena as informações de contato do candidato, como telefone e endereço.
Todas as operações são executadas dentro de uma transação para garantir que, se ocorrer qualquer erro durante a inserção, nenhuma mudança seja feita no banco de dados, mantendo a integridade dos dados.
O arquivo do currículo é salvo no diretório uploads/curriculum
e o nomw do arquivo é salvo no banco de dados.
Rota protegida por autenticação.
- METHOD: GET.
- PATH:
/candidate/:id
. - RESPONSE:
{
"id": 1,
"name": "Nome do Candidato",
"email": "email@email.com",
"phone": "123456789",
"address": "Rua dos Bobos, nº 0",
"age": 20,
"about": "Sobre o candidato",
"experience": "Experiência do candidato",
"formation": "Formação do candidato",
"curriculum": "file.pdf" # caminho do currículo,
"createdAt": "2021-10-10T00:00:00.000Z",
"updatedAt": "2021-10-10T00:00:00.000Z",
"isDeleted": false
}
DESCRIPTION:
Essa rota é responsável por buscar um candidato pelo seu id.
Ela trás todas as informações do candidato incluido a URL
do currículo.
Rota protegida por autenticação.
- METHOD: GET.
- PATH:
/candidates
. - RESPONSE:
[
{
"id": 1,
"name": "João Silva",
"email": "joao.silva@example.com",
"age": 25,
"about": "Desenvolvedor Full Stack",
"createdAt": "2024-10-15T14:28:23.347Z",
"updatedAt": "2024-10-15T14:28:23.347Z",
"contactInfoId": 1,
"isDeleted": false,
"curriculum": "host/view/curriculum/curriculum.pdf" # o host é o endereço do servidor
},
{
"id": 2,
"name": "Maria Oliveira",
"email": "maria.oliveira@example.com",
"age": 30,
"about": "Designer Gráfico",
"createdAt": "2024-10-15T14:28:23.351Z",
"updatedAt": "2024-10-15T14:28:23.351Z",
"contactInfoId": 2,
"isDeleted": false,
"curriculum": "host/view/curriculum/curriculum.pdf" # o host é o endereço do servidor
}
]
DESCRIPTION:
Trás somente as informações básicas do candidato, como nome, email, idade e sobre o candidato.
Possivelmente será implementado um sistema de busca com filtros para que o recrutador possa buscar candidatos com base em suas habilidades, formação, experiência, idade, etc.
Rota protegida por autenticação.
- METHOD: PUT.
- PATH:
/candidate/:id
. - BODY:
{
"name": "John Doe",
"email": "test@test.com",
"phone": "123456789",
"address": "1234 Test St",
"age": 25,
"about": "I am a test",
"experience": "I have experience in testing",
"formation": "I have a degree in testing",
"curriculum": "file.pdf",
"password": "12345678'"
}
- RESPONSE:
{
"message": "Candidato atualizado com sucesso"
}
DESCRIPTION:
Essa edição pode ser parcial, ou seja, o candidato pode editar somente as informações que desejar ou todas as informações.
Essa mesma rota lida muito bem com os dois casos, pois ela verifica quais campos foram enviados e atualiza somente os campos que foram enviados.
Rota protegida por autenticação.
- METHOD: DELETE.
- PATH:
/candidate/:id
. - RESPONSE:
{
"message": "Candidato deletado com sucesso"
}
DESCRIPTION:
A deleção de um candidato é feita através do sistema de soft delete, ou seja, o candidato não é removido do banco de dados, mas sim marcado como deletado, isDeleted = true
.
Essa técnica é também conhecida como deleção lógica e é muito utilizada em sistemas que necessitam manter o histórico de dados. Assim é possível recuperar os dados deletados caso seja necessário.
Rota protegida por autenticação.
- METHOD: PATCH.
- PATH:
/candidate/restore/:id
. - RESPONSE:
{
"message": "Candidato restaurado com sucesso"
}
DESCRIPTION:
A restauração é feita alterando o campo isDeleted
para false
no banco de dados. Com isso, o candidato é restaurado e volta a ser exibido na lista de candidatos.
Rota protegida por autenticação.
-
METHOD: POST.
-
PATH:
/uploads/curriculum
. -
BODY: Multipart Form Data.
-
RESPONSE:
{ "message": "Currículo enviado com sucesso" }
-
RESPONSE COM ERROR: Resposta padrão, tanto para o não envio do arquivo, quanto para o envio de um arquivo inválido.
{ "message": "Arquivo não enviado ou com formato inválido. Permitido somente arquivos .pdf" }
DESCRIPTION:
O upload de arquivos é feito através de um formulário do tipo multipart/form-data
.
Um middleware é utilizado para fazer o upload do arquivo e salvar no diretório uploads/curriculum
. Uma string
com o nome do arquivo é salva no banco de dados e o arquivo pode ser acessado através do caminho estático /view/curriculum/<nome-do-arquivo>
.
Rota protegidas por autenticação.
- METHOD: GET.
- PATH:
/view/curriculum/* - O asterisco é o nome do arquivo
.
RESPONSE:
O arquivo será exibido no navegador.
DESCRIPTION:
Todas as rotas estáticas começam com prefixo /view
e são utilizadas para visualizar arquivos estáticos, como imagens, currículos, etc.
For any inquiries or feedback, please contact the community: codewarriorsdevs@gmail.com.
Thanks! :)