Hire - Back-End
Sobre o projeto
Hire back-end é uma API REST construída para fins de aprendizado que visa gerar oportunidades a trabalhadores autônomos, expondo seu perfil para que clientes possam visualizar, entrar em contato e dar sua avaliação dos serviços prestados.
Modelo Lógico
Tecnologias utilizadas
- Java
- Spring Boot
- Spring Data JPA
- Spring Security
- Gradle
- Java Bean Validation
- Lombok
- JWT
Arquitetura
- REST
Implementação do Front-End
Implantação em produção
- Back end: Heroku
- Front end: Heroku
- Banco de dados: Postgresql
Como executar o projeto
Pré-requisitos: Java 11, Gradle 6.8.3
# clonar repositório
git clone https://github.com/fabriciio95/hire-backend
# Entre na pasta raiz do projeto:
cd hire-backend
# E para rodar o projeto, você pode executar:
gradle bootRun
Manual das requisições da API
Pré-requisitos: Postman
Buscando profissionais pela descrição
Para realizar uma busca por um profissional pela sua descrição no banco de dados, você deve fazer uma requisição utilizando o método GET do protocolo HTTP passando um texto para ser buscado pela URL:
http://localhost:8080/search/java
Sendo que java é o parâmetro para ser realizado a busca. E então, caso encontre profissionais que correspondam a busca, será retornado uma resposta com status 200 e o objeto JSON com os campos: id, nome, descricao, valorHora e fotoBase64 preenchidos com os dados dos profissionais encontrados. Caso contrário será retornado um status 404.
Salvando um novo usuário
Para salvar um novo usuário, você deve enviar uma requisição utilizando o método POST do protocolo HTTP com a URL:
http://localhost:8080/usuario
E no corpo da requisição, você deverá enviar um objeto JSON com os campos:
{
"usuario": "",
"senha": "",
"nome" : "",
"fotoBase64" : ""
}
Sendo que no campo fotoBase64 deve conter uma imagem codificada em base 64.
Caso a requisição for bem-sucedida será retornado uma resposta com status 201 e no corpo um objeto JSON com os campos: id, usuario e nome preenchidos com os dados do usuário salvo.
Salvando um novo profissional
Para salvar um novo profissional, você deve enviar uma requisição utilizando o método POST do protocolo HTTP com a URL:
http://localhost:8080/profissional
E no corpo da requisição, você deverá enviar um objeto JSON com os campos:
{
"usuario": "",
"senha": "",
"nome" : "",
"endereco": "",
"email": "",
"descricao": "",
"valorHora" : "",
"telefone": "",
"euQuero" : "AMBOS || SER_CONTRATADO",
"fotoBase64" : ""
}
Sendo que no campo fotoBase64 deve conter uma imagem codificada em base 64 e no campo euQuero deve conter obrigatóriamente apenas um dos valores: AMBOS ou SER_CONTRATADO.
E caso a requisição for bem-sucedida será retornado uma resposta com status 201 e no corpo um objeto JSON com os campos: id, usuario, nome, endereco, email, descricao, valorHora, telefone e euQuero preenchidos com os dados do profissional salvo.
Fazendo o login
Para fazer o login, você deve enviar uma requisição utilizando o método POST do protocolo HTTP com a URL:
http://localhost:8080/login
E no corpo da requisição você precisará informar um usuário e senha válidos para serem autenticados e então receberá um token JWT que será utilizado posteriormente para requisições que necessitem de autorização. Para isso, você primeiro precisará enviar um objeto JSON com os campos:
{
"usuario" : "",
"senha" : ""
}
E se, e somente se, o usuário e senha forem válidos será retornado uma resposta com status 200 com um cabeçalho Authorization com o token JWT gerado pela API.
Atualizando os dados de um usuário
Para atualizar os dados de um usuário, você deve fazer uma requisição utilizando o método PUT do protocolo HTTP passando o id do usuário na URL:
http://localhost:8080/usuario/2
Sendo que o 2 é o id do usuário a ser atualizado. Você também obrigatoriamente deverá enviar na requisição um cabeçalho Authorization com o token JWT obtido após o processo de login.
E no corpo da requisição, você deverá enviar um objeto JSON com os campos:
{
"usuario": "",
"senha": "",
"nome" : "",
"fotoBase64" : ""
}
Sendo que no campo fotoBase64 deve conter uma imagem codificada em base 64. Caso a requisição for bem-sucedida será retornado uma resposta com status 200 e no corpo um objeto JSON com os campos: id, usuario e nome preenchidos com os dados atualizados do usuário.
Atualizando os dados de um profissional
Para atualizar os dados de um profissional, você deve fazer uma requisição utilizando o método PUT do protocolo HTTP passando o id do profissional na URL:
http://localhost:8080/usuario/2
Sendo que o 2 é o id do profissional a ser atualizado. Você também obrigatoriamente deverá enviar na requisição um cabeçalho Authorization com o token JWT obtido após o processo de login.
E no corpo da requisição, você deverá enviar um objeto JSON com os campos:
{
"usuario": "",
"senha": "",
"nome" : "",
"endereco": "",
"email": "",
"descricao": "",
"valorHora" : "",
"telefone": "",
"euQuero" : "AMBOS || SER_CONTRATADO",
"fotoBase64" : ""
}
Sendo que no campo fotoBase64 deve conter uma imagem codificada em base 64 e no campo euQuero deve conter obrigatóriamente apenas um dos valores: AMBOS ou SER_CONTRATADO.
E caso a requisição for bem-sucedida será retornado uma resposta com status 200 e no corpo um objeto JSON com os campos: id, usuario, nome, endereco, email, descricao, valorHora, telefone e euQuero preenchidos com os dados atualizado do profissional.
Obtendo os dados de um usuário ou profissional
Para obter os dados de um usuário ou de um profissional, você deve fazer uma requisição utilizando o método GET do protocolo HTTP passando o id do profissional ou usuário desejado na URL:
http://localhost:8080/usuario-profissional/2
Sendo que o 2 é o id do profissional ou usuário desejado. Você também obrigatoriamente deverá enviar na requisição um cabeçalho Authorization com o token JWT obtido após o processo de login.
Caso o id passado como parâmetro seja um de um usuário, será retornado uma resposta com status 200 e o objeto JSON com os campos: id, usuario, nome e euQuero preenchidos com os dados do usuário.
Caso o id passado como parâmetro seja de um profissional, será retornado uma resposta com status 200 e o objeto JSON com os campos: id, usuario, nome, endereco, email, descricao, valorHora, telefone e euQuero preenchidos com os dados do profissional.
Caso contrário será retornado um status 404.
Obtendo os dados e avaliações de um profissional
Para obter os dados e avaliações de um profissional, você deve fazer uma requisição utilizando o método GET do protocolo HTTP passando o id do profissional desejado na URL:
http://localhost:8080/profissional/perfil/10
Sendo que o 10 é o id do profissional desejado. Você também obrigatoriamente deverá enviar na requisição um cabeçalho Authorization com o token JWT obtido após o processo de login.
Caso encontre um profissional que corresponda ao id passado como parâmetro, será retornado uma resposta com status 200 e o objeto JSON com os campos: id, nome, endereco, email, descricao, valorHora, telefone e fotoBase64 preenchidos com os dados do profissional.
Além de um array avaliacoes com objetos com os campos: id, comentario, idAutor, nomeAutor, idProfissional e fotoAutorBase64.
Publicando uma avaliação de um profissional
Para publicar uma avaliação de um profissional, você deve fazer uma requisição utilizando o método POST do protocolo HTTP com a URL:
http://localhost:8080/avaliacao
Você também obrigatoriamente deverá enviar na requisição um cabeçalho Authorization com o token JWT obtido após o processo de login.
E no corpo da requisição, você deverá enviar um objeto JSON com os campos:
{
"comentario" : "",
"idAutor" : ,
"idProfissional":
}
Sendo que nos campos idAutor e idProfissional devem ser passados os ids do usuário autor do comentário e do profissional que está sendo avaliado respectivamente como números (sem estar dentro de aspas).
Caso o id do autor e do profissional sejam iguais será retornado uma resposta com status 400, além de um objeto JSON com os campos status da resposta, dataHora da requisição e titulo com a mensagem "Você não pode fazer uma avaliação de si mesmo".
Caso a requisição seja bem-sucedida, será retornado uma resposta com status 201 e o objeto JSON com os campos: id, comentario, idAutor, nomeAutor, idProfissional e fotoAutorBase64.
Testando a API implantada no Heroku
Para testar a API implantada no heroku, você precisa apenas fazer a seguinte alteração nas urls dos exemplos acima:
http://localhost:8080
Para:
https://tohireapp.herokuapp.com
Lembrando que caso o servidor não esteja ativo no Heroku as primeiras requisições podem não funcionar, então apenas faça uma requisição e aguarde alguns instantes para que o servidor seja inicializado no Heroku.
Autor
Fabricio Siqueira Macedo