FIAP-6SOAT-G10 / tech-challenge-fase-1

0 stars 2 forks source link

PosTech - Arquitetura de Software - FIAP

Documentação - Tech Challenge - Grupo 10 6SOAT

Repositório para o desafio do Tech Challenge da Pós-gradução em Software Architecture pela FIAP.

Introdução

Uma lanchonete de bairro que está expandido sua operação devido seu grande sucesso. Porém, com a expansão e sem um sistema de controle de pedidos, o atendimento aos clientes pode ser caótico e confuso. Para solucionar o problema, a lanchonete irá investir em um sistema de autoatendimento de fast food, que é composto por uma série de dispositivos e interfaces que permitem aos clientes selecionar e fazer pedidos sem precisar interagir com um atendente.

Índice

  1. Membros do Grupo
  2. Documentação do Projeto com Event Storming
  3. Requisitos para Execução
  4. Execução do projeto localmente
  5. Execução do projeto pelo Docker
  6. Rotas da API
  7. Ordem de Execução das API
  8. Recursos
  9. Códigos de Erro

Membros do Grupo

Documentação do Projeto com Event Storming

Fizemos o mapeamento do fluxo de forma evolutiva, pensando a partir dos eventos passados, incrementando com os pontos de atenção para na sequência adicionar os comandos, modelos de leitura, políticas e sistemas externos, conforme o que foi aprendido em aula.

Event Storming

Requisitos para Execução

  1. Docker
  2. DBeaver
  3. Maven
  4. Postman (opcional, pois há Swagger em /api/api-docs ou /api/swagger-ui.html)

Antes de iniciar, certifique-se de que sua máquina atenda aos seguintes requisitos:

JDK 11 instalado:
Certifique-se de ter o JDK 11 instalado em sua máquina.
Para verificar a versão do JDK instalada, execute o seguinte comando no terminal:

java -version

Maven >= 3 instalado:
Verifique se você tem o Maven instalado em sua máquina. Para verificar a versão do Maven instalada, execute o seguinte comando no terminal:

mvn -version

Docker desktop instalado:
Verifique se você tem o Docker instalado em sua máquina. Para verificar a versão do Docker instalada, execute o seguinte comando no terminal:

docker -v

Se o Docker não estiver instalado, faça o download e siga as instruções de instalação do site oficial do Docker ou de outra fonte confiável.

Clonando o projeto:
Clone o repositório do projeto em seu ambiente local.

git clone https://github.com/FIAP-6SOAT-G10/tech-challenge.git

Execução do projeto localmente

Passo 1: Iniciar o Postgres

Na raiz do projeto, execute o seguinte comando para criar o container com o banco de dados Postgres:

docker run --name=postgres -p 5432:5432 -e POSTGRES_USER=tech -e POSTGRES_PASSWORD=tech_passwd -d postgres

Passo 2: Compilar o projeto

Após a criação do container do Postgres, você deve realizar o build do projeto utilizando o Maven:

mvn clean install -DskipTests -Plocal -q

Passo 3: Executar o projeto

Após a criação do container do Postgres, você pode iniciar o projeto.

mvn spring-boot:run

Execução do projeto pelo Docker

Passo 1: Executar o Docker Compose

Na raiz do projeto, execute o seguinte comando para criar os containers com o banco de dados Postgres, e realizar o build da aplicação via Docker:

docker-compose up -d

Documentação

A documentação da API pode ser acessada através do Swagger em: http://localhost:8080/api/swagger-ui.html

Testes

Para executar os testes unitários, basta executar o comando abaixo:

mvn test

Observações

Rotas da API

Abaixo está descrito todas as rotas fornecidas da aplicação, bem como seu objetivo e possíveis códigos de retorno:

Rotas de Categorias

Rotas de Clientes

Rotas de Produtos

Rotas de Pedidos

Ordem de Execução das API

Para o funcionamento correto das APIs, a ordem abaixo deverá ser seguida à depender do cenário desejado:

Realizar pedido para cliente não identificado

  1. Listar produtos por categoria
  2. Criar pedido
  3. Realizar checkout
  4. Atualizar status do pedido para 'Em preparação'
  5. Atualizar status do pedido para 'Pronto'
  6. Atualizar status do pedido para 'Finalizado'

Realizar pedido para cliente identificado

  1. Cadastrar cliente
  2. Listar produtos por categoria
  3. Criar pedido
  4. Realizar checkout
  5. Atualizar status do pedido para 'Em preparação'
  6. Atualizar status do pedido para 'Pronto'
  7. Atualizar status do pedido para 'Finalizado'

Recursos

Cliente

Cadastrar Cliente

POST http://localhost:8080/api/clientes
{
    "cpf": "52001817983",
    "email": "rafaela-almada91@imail.com",
    "nome": "Rafaela Lorena Almada"
}

Listar Clientes

GET http://localhost:8080/api/clientes?page=0&size=10

Atualização Parcial de Clientes

PATCH http://localhost:8080/api/clientes
{
    "cpf": "52001817983",
    "email": "rafaela-almada91@imail.com",
    "nome": "Rafaela Lorena Almada"
}

Atualização de Clientes

PUT http://localhost:8080/api/clientes
{
    "cpf": "52001817983",
    "email": "rafaela-almada91@imail.com",
    "nome": "Rafaela Lorena Almada"
}

Produto

Cadastrar Produto

POST http://localhost:8080/api/produtos
{
    "nome": "Bebida Láctea de Morango",
    "descricao": "Bebida Láctea de Morango 500ml",
    "categoria": "BEBIDA",
    "preco": 19.9,
    "imagem": "CDN:imagem"
}

Listar Produtos

GET http://localhost:8080/api/produtos?pageIndex=0&pageSize=10&nome=string&descricao=string&preco=string

Atualização Parcial de Produto

PATCH http://localhost:8080/api/produtos/:id
[
    {
    "op": "replace",
    "path": "/nome",
    "value": "Novo Nome do Produto"
    }
]

Atualização de Produto

PUT http://localhost:8080/api/produtos/:id
{
    "nome": "Bebida Láctea de Morango",
    "descricao": "Bebida Láctea de Morango 500ml",
    "categoria": "BEBIDA",
    "preco": 19.9,
    "imagem": "CDN:imagem"
}

Exclusão de Produto

DELETE http://localhost:8080/api/produtos/:id

Listar Produtos por Categoria

GET http://localhost:8080/api/produtos/categoria/:categoria
:categoria
- LANCHE
- BEBIDA
- ACOMPANHAMENTO
- SOBREMESA

Pedido

Obter Pedido por Identificador

GET http://localhost:8080/api/pedidos/:id

Listar Pedidos

GET http://localhost:8080/api/pedidos?page=0&size=10

Realizar Pagamento de Pedido

POST http://localhost:8080/api/pedidos/:id/checkout

Atualizar Status do Pedido

PATCH http://localhost:8080/api/pedidos/:id/status
[
    {
        "op": "replace",
        "path": "/status",
        "value": "preparacao|pronto|finalizado"
    }
]

Atualizar Status de Pagamento do Pedido

PATCH http://localhost:8080/api/pedidos/:id/pagamento
[
  {
    "op": "replace",
    "path": "/statusPagamento",
    "value": "pendente|pago|recusado"
  }
]

Listar Pedidos por Status

GET http://localhost:8080/api/pedidos/status/:status

Códigos de Erro

Erros genéricos: