Skip to content

Latest commit

 

History

History
348 lines (285 loc) · 7.96 KB

README.md

File metadata and controls

348 lines (285 loc) · 7.96 KB

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