Skip to content

Este projeto engloba um simples microsserviço para gerenciar o agendamento de manutenções em veículos.

Notifications You must be signed in to change notification settings

rafaelmagalhaesguedes/MicrosservicoAgendamentos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Microsserviço de Agendamento

Java SpringBoot PostgreSQL Docker

Descrição

Este projeto engloba um simples microsserviço para gerenciar o agendamento de manutenções em veículos.

Instruções de instalação

Pré-requisitos

Para instalar e usar o projeto tenha em sua máquina os seguintes requisitos:

  • Git
  • Java 17
  • Docker

Etapas de instalação

  1. Crie uma pasta e clone o projeto para sua máquina:
  mkdir microsservicoAgendamento/
  cd microsservicoAgendamento/
  git clone git@github.com:rafaelmagalhaesguedes/MicrosservicoAgendamento.git
  1. Rodando o projeto com Docker:

Primeiro verifique se as portas 8080 (web service) e 5432 (postgres) não estão em uso em seu sistema.

Agora, suba os serviços docker com o comando abaixo

  docker compose up -d

Instruções de uso

O serviço estará disponível na porta 8080 em seu localhost

  1. Abra seu navegador ou API client e acesse http://localhost:8080/

Tecnologias

  • Java 17

  • Spring Boot

  • Postgres

  • Docker

  • Swagger (Para documentação da API)

  • IntelliJ (IDE de desenvolvimento)

  • Beekeeper Studio (Interface para gerenciar banco de dados)

  • Insomnia Client (API Client)

Padrões de Projeto

  • Builder: utilizamos o padrão criacional builder para construir objetos de forma mais controlada.

  • Strategy: utilizamos o padrão strategy para auxiliar na validação de dados sensíveis.

Testes

O projeto possui testes unitários para garantir a qualidade e a funcionalidade do código.

Para rodar os testes use o comando no terminal na raiz do projeto:

mvn test

Documentação

O projeto utiliza o Swagger para documentação dos endpoints, acesse neste link.

Proteção de dados

O projeto utiliza encriptação para os dados sensíveis da aplicação, para facilitar o processo utilizamos a biblioteca JASYPT.

📍 Principais Endpoints

Lista com os principais endpoints da aplicação

Rota Descrição
POST /customers Cria um novo cliente
POST /customers/{customerId}/vehicle Cria um veículo associado a um cliente
POST /customers/{customerId}/schedule Cria um agendamento associado a um cliente
GET /customers/{customerId}/schedule Lista os agendamento associados a um cliente
GET /customers/{customerId} Busca os dados de um cliente
PUT /customers/{customerId}/schedule/{scheduleId} Cancela um agendamento associado a um cliente
PUT /customers/{customerId}/address Atualiza um endereço associado a um cliente

Cria um cliente

POST /customers

REQUEST

{
  "name": "Rafa Guedes",
  "email": "rafa@email.com",
  "numberPhone": "31997785451",
  "document": "12345678910",
  "cep": "31510090"
}

RESPONSE

{
  "id": 1,
  "name": "Rafa Guedes",
  "email": "rafa@email.com",
  "numberPhone": "31997785451",
  "document": "12345678910",
  "address": {
    "cep": "31510-090",
    "logradouro": "Rua Anita Garibaldi",
    "bairro": "Candelária",
    "localidade": "Belo Horizonte",
    "uf": "MG"
  }
}

Cria um veículo associado a um cliente

POST /customers/{customerId}/vehicle

REQUEST

{
  "licensePlate": "RWT9988",
  "model": "HB20",
  "make": "Hyundai",
  "year": 2022
}

RESPONSE

{
  "id": 1,
  "licensePlate": "RWT9988",
  "model": "HB20",
  "manufacturer": "Hyundai",
  "year": 2022
}

Cria um agendamento associado a um cliente

POST /customers/{customerId}/schedule

REQUEST

{
  "dateSchedule": "2024-10-14T10:10:23.828952827",
  "descriptionService": "Manutenção preventiva e substituição da bomba d'água e válvula termostática."
}

RESPONSE

{
  "id": 1,
  "dateSchedule": "2024-10-14T10:10:23",
  "descriptionService": "Manutenção preventiva e substituição da bomba d'água e válvula termostática.",
  "status": "PENDENTE",
  "customer": {
    "id": 1,
    "name": "Rafa Guedes",
    "email": "rafa@email.com",
    "numberPhone": "31997785451",
    "vehicles": [
      {
        "model": "HB20",
        "licensePlate": "RWT9988"
      }
    ]
  }
}

Lista todos os agendamentos associados a um cliente

GET /customers/{customerId}/schedule

RESPONSE

[
  {
    "id": 1,
    "dateSchedule": "2024-10-14T10:10:23",
    "descriptionService": "Manutenção preventiva e substituição da bomba d'água e válvula termostática.",
    "status": "PENDENTE",
    "customer": {
      "id": 1,
      "name": "Rafa Guedes",
      "email": "rafa@email.com",
      "numberPhone": "31997785451",
      "vehicles": [
        {
          "model": "HB20",
          "licensePlate": "RWT9988"
        }
      ]
    }
  },
  {
    "id": 2,
    "dateSchedule": "2024-10-13T10:00:00",
    "descriptionService": "Alinhamento, balancemanto e troca de pastilhas de freio.",
    "status": "PENDENTE",
    "customer": {
      "id": 1,
      "name": "Rafa Guedes",
      "email": "rafa@email.com",
      "numberPhone": "31997785451",
      "vehicles": [
        {
          "model": "HB20",
          "licensePlate": "RWT9988"
        }
      ]
    }
  }
]

Busca um cliente por ID

GET /customers/{customerId}

RESPONSE

{
  "id": 1,
  "name": "Rafael Guedes",
  "email": "rafa@email.com",
  "numberPhone": "31997785451",
  "document": "12345678910",
  "address": {
    "cep": "31510-090",
    "logradouro": "Rua Anita Garibaldi",
    "bairro": "Candelária",
    "localidade": "Belo Horizonte",
    "uf": "MG"
  },
  "vehicles": [
    {
      "id": 1,
      "licensePlate": "RWT9988",
      "model": "HB20",
      "make": "Hyundai",
      "year": 2022
    }
  ],
  "schedules": [
    {
      "id": 1,
      "dateSchedule": "2024-10-14T10:10:23",
      "descriptionService": "Manutenção preventiva e substituição da bomba d'água e válvula termostática.",
      "status": "PENDENTE"
    },
    {
      "id": 2,
      "dateSchedule": "2024-10-14T10:10:00",
      "descriptionService": "Alinhamento, balancemanto e troca de pastilhas de freio.",
      "status": "PENDENTE"
    }
  ]
}

Atualiza um endereço associado a um cliente

PUT /customers/{customerId}/address

REQUEST

{
  "cep": "45810-000",
  "logradouro": "Rua Carlos C Silva",
  "bairro": "Parque Ecológico",
  "localidade": "Porto Seguro",
  "uf": "BA"
}

RESPONSE

{
  "id": 1,
  "cep": "45810-000",
  "logradouro": "Rua Carlos C Silva",
  "bairro": "Parque Ecológico",
  "localidade": "Porto Seguro",
  "uf": "BA"
}

Atualiza o Status de um agendamento

PUT /scheduling/{scheduleId}

REQUEST

{
  "status": "REALIZADO"
}

RESPONSE

{
  "id": 1,
  "dateSchedule": "2024-10-14T10:10:23",
  "descriptionService": "Manutenção preventiva e substituição da bomba d'água e válvula termostática.",
  "status": "REALIZADO",
  "customer": {
    "id": 1,
    "name": "Rafa Guedes",
    "email": "rafa@email.com",
    "numberPhone": "31997785451",
    "vehicles": [
      {
        "model": "HB20",
        "licensePlate": "RWT9988"
      }
    ]
  }
}

Licença

Livre para usar, estudar, brincar, trabalhar, etc.

Developed By

Rafa Guedes

About

Este projeto engloba um simples microsserviço para gerenciar o agendamento de manutenções em veículos.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published