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.
- Java
- Spring Boot
- Spring Data JPA
- Spring Security
- Gradle
- Java Bean Validation
- Lombok
- JWT
- REST
- Back end: Heroku
- Front end: Heroku
- Banco de dados: Postgresql
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
Pré-requisitos: Postman
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Fabricio Siqueira Macedo