Todo o projeto consiste em criar microserviços que possam ter uma folha de pagamento adequada para cada usuário. Os serviços são comunicados através das bibliotecas do Spring Cloud, utilizando Eureka, Hystrix, Zuul, Ribbon e Feign. Também foi utilizado o OAuth para ter acesso aos endpoints, dependendo do nível de privilégio de cada usuário, protegendo assim os endpoints da aplicação para uso externo.
Toda a aplicação antes de ser levantada sera necessario fazer a instalaçao dos pacotes use sempre o comando
mvn clean install
para baixar e instalar os pacotes.
Antes de tudo, é necessário iniciar nosso hr-config-server, que é responsável por configurar o servidor dos outros microserviços. Após baixar as dependências do projeto basta apenas rodar a aplicação de bootstrap para subir o projeto na porta 8888.
Agora, é necessário iniciar nossa aplicação hr-eureka-server para permitir o registro automático e a descoberta dinâmica dos microserviços. A porta padrão é a 8761.
Agora, após ter instalado as dependências do hr-api-gateway-zuul, basta iniciar a aplicação que está configurada para rodar na porta 8765. O Zuul desempenha o papel de um gateway, servindo como o ponto de entrada centralizado para as demais aplicações.
Agora, após subir a aplicação hr-oauth, ela será responsável por conceder as devidas autorizações e permissões aos usuários cadastrados nas aplicações. Esse microserviço não precisa se preocupar com a porta em que está a ser executado, pois a nossa API Gateway fará o contato com a porta aleatória do serviço.
hr-payroll e aplicação é bastante simples; ela visa calcular o salário que o trabalhador receberá com base na quantidade de dias trabalhados.
- Endpoint:
GET /payments/{workerId}/days/{days}
Parâmetro | Tipo | Descrição |
---|---|---|
workerId |
Long |
ID do trabalhador. |
days |
Integer |
Número de dias trabalhados.. |
Resposta de exemplo:
{
"workerId": 123,
"daysWorked": 10,
"totalPayment": 500.00
}
O microserviço hr-user é responsável por estabelecer a relação entre o usuário cadastrado e suas respectivas autorizações e permissões.
- Endpoint:
GET /users/{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
Long |
ID do usuário. |
Resposta de exemplo:
{
"id": 1,
"name": "Claudio Dantas",
"email": "[email protected]",
"password": "0ec09ef9836da03f1add21e3ef607627e687e790",
"roles": ["ROLE_USER"]
}
GET /users/search?email=${email}
Parâmetro | Tipo | Descrição |
---|---|---|
email |
string |
email do usuário. |
Resposta de exemplo:
{
"id": 2,
"name": "Josuelen Dantas",
"email": "[email protected]",
"password": "0ec09ef9836da03f1add21e3ef607627e687e790",
"roles": ["ROLE_USER", "ROLE_ADMIN"]
}
Use essa query para o banco de dados para poder adicionar usuarios para testes.
INSERT INTO tb_user (name, email, password) VALUES ('Nina Brown', '[email protected]', '$2a$10$NYFZ/8WaQ3Qb6FCs.00jce4nxX9w7AkgWVsQCG6oUwTAcZqP9Flqu');
INSERT INTO tb_user (name, email, password) VALUES ('Leia Red', '[email protected]', '$2a$10$NYFZ/8WaQ3Qb6FCs.00jce4nxX9w7AkgWVsQCG6oUwTAcZqP9Flqu');
INSERT INTO tb_role (role_name) VALUES ('ROLE_OPERATOR');
INSERT INTO tb_role (role_name) VALUES ('ROLE_ADMIN');
INSERT INTO tb_user_role (user_id, role_id) VALUES (1, 1);
INSERT INTO tb_user_role (user_id, role_id) VALUES (2, 1);
INSERT INTO tb_user_role (user_id, role_id) VALUES (2, 2);
O microserviço hr-worker é responsável por retornar os trabalhadores cadastrados.
- Endpoint:
GET /workers
Resposta de exemplo:
[
{
"id": 1,
"name": "Claudio Dantas",
"dailyIncome": 55.32
},
{
"id": 2,
"name": "Ferdnandis Dantas",
"dailyIncome": 33.29
}
]
GET /workers/{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
Long |
ID do usuário. |
Resposta de exemplo:
{
"id": 1,
"name": "Claudio Dantas",
"dailyIncome": 55.32
}