Skip to content

Repositório backend do Opus, plataforma com o objetivo de facilitar a empregabilidade na região de Pedro II - PI

Notifications You must be signed in to change notification settings

codewarriorsdevs/opus-backend

Repository files navigation

react typescript nodejs expressjs MySQL Docker

Opus

Documentação oficial do projeto "Opus", uma plataforma responsável por conectar candidatos a empresas e serviços da região de Pedro II - PI.

Explore the docs »

Em Desenvolvimento... ⚠

Equipe de Desenvolvimento

Foto do Ruan Victor no GitHub
Ruan Victor
Foto do Bruno Lima no GitHub
Bruno Lima
Foto de Kely Soares no GitHub
Kely Soares
Foto do Hugo Amadio no GitHub
Hugo Amadio
Foto do Jorge Jesus no GitHub
Jorge Jesus
Foto do Matheus Mozart no GitHub
Matheus Mozart
Foto do Jociel Andrade no GitHub
Jociel Andrade
Foto do João Carlos no GitHub
João Carlos
Foto do Abdenaide no GitHub
Abdenaide Ribeiro

Sumário

Documentação

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.

Tecnologias Utilizadas


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

Instalação

Sumário

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.


Comandos para rodar o projeto

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.

Rotas de autenticação e candidatos

Sumário

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 de login

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 de cadastro de candidato

Rota livre de autenticação.

Sumário

  • 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.

Rotas de busca de candidatos

Sumário

Buscar um candidato

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.

Buscar todos os candidatos

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.

Rotas de edição e deleção de candidatos

Sumário

Editar um candidato

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.

Deletar um candidato

Rota protegida por autenticação.

Sumário

  • 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.

Restaurar um candidato

Rota protegida por autenticação.

Sumário

  • 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.

Rotas de Upload de Arquivos

Sumário

Upload de Currículo

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>.

Rotas estáticas

Sumário

Visualizar Currículo

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.


Contact

Sumário

For any inquiries or feedback, please contact the community: codewarriorsdevs@gmail.com.

Thanks! :)

About

Repositório backend do Opus, plataforma com o objetivo de facilitar a empregabilidade na região de Pedro II - PI

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •