diff --git a/README.md b/README.md index 054663c7..9939a0b6 100644 --- a/README.md +++ b/README.md @@ -1,153 +1,7 @@ -# Challenge 1 +# Challenge - Fase 1 -Este projeto é um sistema de pedidos de lanches adaptável para web e mobile, focado no backend. +Este projeto é um Sistema de Pedidos para uma Lanchonete adaptável para web e mobile, focado no backend. A aplicação é desenvolvida utilizando FastAPI, SQLAlchemy, e Docker. -Você irá encontrar todos os Passos do Nosso Projeto na nossa -[Plataforma de Documentação](https://software-architecture-fiap.github.io/tech-challenge/). - -## Pré-requisitos - -1. **Sistema Operacional**: O projeto pode ser executado em qualquer sistema operacional que suporte Docker e Python. Recomenda-se um sistema baseado em Unix (Linux ou macOS) para facilitar o uso de Docker. -2. **Python**: Versão 3.8 ou superior. -3. **Docker**: Para containerização da aplicação. -4. **Docker Compose**: Para orquestração dos contêineres Docker. - -## Configuração do Ambiente - -### Instalação do Python - -**Linux/macOS**: - -```sh -sudo apt update -sudo apt install python3 python3-pip -``` - -**Windows**: - -- Baixe e instale o Python no [site oficial](https://www.python.org/downloads/). - -### Instalação do Docker - -Siga as instruções no site oficial do Docker para instalar o Docker e Docker Compose: - -- [Docker](https://docs.docker.com/get-docker/) -- [Docker Compose](https://docs.docker.com/compose/install/) - -### Clonando o Repositório - -Clone este repositório para sua máquina local: - -```sh -git clone https://github.com/seu-usuario/tech-challenge.git -cd tech-challenge -``` - -### Configuração do Banco de Dados - -1. **Criar Banco de Dados e Usuário no PostgreSQL**: - -- Acesse o PostgreSQL (certifique-se de que o serviço está em execução). - -```sh -sudo -u postgres psql -``` - -- Execute os comandos SQL para criar o banco de dados e o usuário: - -```sql -CREATE DATABASE mydb; -\c mydb -CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypassword'; -GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser; -``` - -- Crie um arquivo `.env` na raiz do projeto e defina as seguintes variáveis: - -```bash -DATABASE_URL=postgresql://postgres:localhost%401988@db:5432/challenge -SECRET_KEY=mySecurePassword -ADMIN_NAME=Admin User -ADMIN_EMAIL=email@email.com.br -ADMIN_CPF=00000000000 -ADMIN_PASSWORD=your_password - -``` - -### Instalando Dependências - -- Crie e ative um ambiente virtual (opcional, mas recomendado): - -```sh -python3 -m venv venv -source venv/bin/activate # Linux/macOS -.\venv\Scripts\activate # Windows -``` - -- Instale as dependências do projeto: - -```sh -pip install -r requirements.txt -``` - -- Execute as migrações do Alembic para criar o banco de dados e as tabelas necessárias: - - ```sh - alembic revision --autogenerate -m 'initial migration' - alembic upgrade head - ``` - -### Executando a Aplicação - -**Com Docker:** - -Certifique-se de que o Docker e o Docker Compose estão instalados. -Navegue até a pasta do projeto e execute: - -```sh -docker-compose up --build -``` - -A aplicação estará disponível em `localhost:2000`. - -**Sem Docker:** - -Execute o servidor FastAPI: - -```sh -uvicorn app.main:app --host 0.0.0.0 --port 2000 --reload -``` - -A aplicação estará disponível em `localhost:2000`. - -### Documentação da API - -A documentação interativa da API está disponível em `localhost:2000/docs`. - -### Estrutura de Arquivos e Funções - -- `app/main.py`: Ponto de entrada da aplicação. -- `app/models.py`: Definição dos modelos de dados. -- `app/schemas.py`: Definição dos esquemas Pydantic para validação. -- `app/crud.py`: Funções CRUD para manipulação dos dados. -- `app/database.py`: Configuração do banco de dados e sessão. -- `app/routers`: Roteadores FastAPI para diferentes endpoints (clientes, produtos, pedidos). -- `app/middleware.py`: Middleware para limitação de taxa (Rate Limiting). - -### Limitação de Taxa - -Foi criado mas ainda não implementado um middleware para limitar as solicitações de um mesmo IP para o endpoint de token. Este middleware usa Redis para rastrear e limitar as solicitações: - -- Limite de 10 solicitações por minuto por IP. -- Mensagem de erro personalizada quando o limite é atingido. - -### Contribuição - -Para contribuir com este projeto, siga os passos: - -- Fork o repositório. -- Crie uma nova branch (`git checkout -b feature/nova-funcionalidade`). -- Commit suas mudanças (`git commit -am 'Adicionei uma nova funcionalidade'`). -- Push para a branch (`git push origin feature/nova-funcionalidade`). -- Abra um Pull Request. +Você irá encontrar todos os Passos do Nosso Projeto através desse link na nossa +[Plataforma de Documentação](https://software-architecture-fiap.github.io/tech-challenge/). \ No newline at end of file diff --git a/app/tools/initialize_db.py b/app/tools/initialize_db.py index 6b872519..277c9101 100644 --- a/app/tools/initialize_db.py +++ b/app/tools/initialize_db.py @@ -36,7 +36,7 @@ def initialize_db(db: Session): for product in products: if product['name'] in existing_product_names: - logger.info(f"Product already exists in the database: {product['name']} - Category: {product['category']}") + logger.info(f"Product already exists in the database: {product['name']} - Category: {product['category_id']}") else: db_product = Product(**product) db.add(db_product) diff --git a/docs/testando.md b/docs/entrega.md similarity index 91% rename from docs/testando.md rename to docs/entrega.md index 6499f89a..2e4cf6fb 100644 --- a/docs/testando.md +++ b/docs/entrega.md @@ -23,7 +23,7 @@ _É importante que os desenhos sigam os padrões utilizados na explicação._ ### :material-package-variant-plus: Entregável 2 -2. Uma Aplicação para todo o sistema de backend (monolito) que deverá ser desenvolvido seguindo os padrões apresentados +1. Uma Aplicação para todo o sistema de backend (monolito) que deverá ser desenvolvido seguindo os padrões apresentados nas aulas: - [X] Utilizando Arquitetura Hexagonal @@ -33,15 +33,15 @@ nas aulas: - [X] Sem cpf: Pode ser feito pela Rota [Create Anonymous Customer](http://localhost:2000/docs#/customers/create_anonymous_customer_customers_anonymous_post) - [X] Identificação do Cliente via CPF: Se cadastrado com [Create Customer](http://localhost:2000/docs#/customers/create_customer_customers_admin_post) - [X] [Criar](http://localhost:2000/docs#/products/create_product_products__post), [Editar](http://localhost:2000/docs#/products/update_product_products__product_id__put) e [Remover](http://localhost:2000/docs#/products/delete_product_products__product_id__delete) Produtos: Necessário estar logado com Username (e-mail) e Token cadastrado com Admin; - - [ ] Buscar Produtos por Categoria - - [ ] Fake Checkout: apenas enviar os produtos escolhidos para a fila. O checkout é a finalização do pedido. - - [ ] Listar os Pedidos + - [X] Buscar Produtos por Categoria + - [X] Fake Checkout: apenas enviar os produtos escolhidos para a fila. O checkout é a finalização do pedido. + - [X] Listar os Pedidos - [X] Banco de Dados à sua Escolha: Escolhemos o Postgres. - Inicialmente, deveremos trabalhar e organizar a fila dos pedidos apenas em um banco de dados. ### :material-package-variant-plus: Entregável 3 -3. [X] A aplicação deve ser entregue com um Dockerfile configurado para executá-la corretamente, e um docker-compose.yaml para subir o ambiente completo. +1. [X] A aplicação deve ser entregue com um Dockerfile configurado para executá-la corretamente, e um docker-compose.yaml para subir o ambiente completo. - [X] Disponibilizar também o [Swagger](http://localhost:2000/docs) para consumo dessas APIs. diff --git a/docs/steps.md b/docs/steps.md new file mode 100644 index 00000000..63957a87 --- /dev/null +++ b/docs/steps.md @@ -0,0 +1,40 @@ +# Passo a Passo para Testar o Backend + +## :material-foot-print: Passos +Nessa documentação iremos te mostrar os Passos que você deve dar em direção aos testes. Isso irá lhe proporcionar uma +melhor experiência durante os teste. Abaixo, clique em cada uma das caixas de passos para seguir com cada etapa. + +???- note "Passo 01: Login for Access Token" + A primeira coisa que deve ser feita é a criação de um Token usando um dos Usuários Admin. + Você poderá fazer isso através do Swagger em + [Login for Access Token](http://localhost:2000/docs#/default/login_for_access_token_token_post). + ![image]() + Preencha campos **username** com "Admin User" e **password** com "your_password", por fim, preencha o client_id com + o número 1. Clique em Execute. Isso te dará acesso às etapas que exigem camadas de autenticação do token. + +### Cenário 1: Cliente Anônimo + +???- note "Passo 02: Fazendo Pedido Sem Identificação" + Nosso Backend foi feito com a possibilidade de que um cliente possa fazer seu pedido sem a necessidade de criar um + cadastro se identificando. E para isso, basta seguir os itens abaixo. + Você poderá fazer isso através do Swagger em + [Create Anonymous Customer](http://localhost:2000/docs#/customers/create_anonymous_customer_customers_anonymous_post). + ![image]() + Basta clicar em Executar e o Usuário Anônimo será criado. + +### Cenário 2: Cliente Cadastrado + Cliente com Identificação + Cria Conta com Identificação +1. Jornada do Cliente + 1. Cria Order + 2. Adiciona Produtos ao Pedido + 3. Faz Pagamento (Fake Checkout) +2. Jornada da Lanchonete + 1. Lista Pedidos que Tiveram Sucesso no Fake Checkout + 2. Recebe Pedido com Status Aberto + 3. Possibilidade de Filtrar por Categoria + 4. Atualiza Status para Finalizado +3. Fluxo de Cadastro de Produto + 1. Criar + 2. Editar + 3. Excluir \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index c974aa78..3a7e5685 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -98,4 +98,5 @@ nav: - Event Storming: "event-storming.md" - Guia: - Ambiente: "environment.md" - - Teste: "testando.md" \ No newline at end of file + - Entrega: "entrega.md" + - Passo a Passo: "steps.md" \ No newline at end of file