{"id":21178011,"url":"https://github.com/thallyta-castro-cv/algafood-api","last_synced_at":"2025-07-08T09:32:59.614Z","repository":{"id":134406820,"uuid":"572071526","full_name":"thallyta-castro-cv/algafood-api","owner":"thallyta-castro-cv","description":"Este projeto consiste em uma aplicação Backend com Spring Boot para criar um sistema de delivery de comida completo com todos os recursos que o Spring disponibiliza. O intuito deste projeto é servir de repositório base para consultas futuras de implementação de recursos do framework.","archived":false,"fork":false,"pushed_at":"2025-03-23T13:23:28.000Z","size":1232,"stargazers_count":18,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T08:02:08.126Z","etag":null,"topics":["java","junit5","mockito-junit-test","mysql","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thallyta-castro-cv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-29T13:50:10.000Z","updated_at":"2025-02-13T11:38:43.000Z","dependencies_parsed_at":"2024-11-20T17:20:19.360Z","dependency_job_id":"38366d4f-8c43-44e4-b3bc-369a2187b2fb","html_url":"https://github.com/thallyta-castro-cv/algafood-api","commit_stats":null,"previous_names":["thallyta-castro-cv/algafood-api","thallyta-castro-cv/algafood"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thallyta-castro-cv/algafood-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thallyta-castro-cv%2Falgafood-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thallyta-castro-cv%2Falgafood-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thallyta-castro-cv%2Falgafood-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thallyta-castro-cv%2Falgafood-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thallyta-castro-cv","download_url":"https://codeload.github.com/thallyta-castro-cv/algafood-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thallyta-castro-cv%2Falgafood-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264240408,"owners_count":23578134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","junit5","mockito-junit-test","mysql","spring-boot"],"created_at":"2024-11-20T17:19:28.888Z","updated_at":"2025-07-08T09:32:59.603Z","avatar_url":"https://github.com/thallyta-castro-cv.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sistema de delivery de comida com Java e Spring Boot\n\u003cb\u003eEste projeto foi criado com Java 17 e Spring Framework 3.0.0\u003c/b\u003e\n\n# Sobre o projeto\n\nEste projeto consiste em uma aplicação Backend com Spring Boot para criar um sistema de delivery de comida completo com todos os recursos que o Spring disponibiliza.\nO intuito deste projeto é servir de repositório base para consultas futuras de implementação de recursos do framework.\n\n## Estrutura do projeto\n\n| Pasta  | Descrição                                                 |\n|--------|-----------------------------------------------------------|\n| `app`  | Contém o projeto **Spring Boot**, incluindo a API e lógica de negócio. |\n| `infra` | Contém os arquivos **Terraform** para provisionar a infraestrutura na AWS. |\n\n\n# Diagrama entidade relacionamento (banco de dados)\n\n```mermaid\nerDiagram\n\n    tb_product_photo {\n        int product_id\n        string file_name\n        string description\n        string content_type\n        int size\n    }\n\n    tb_products {\n        int id\n        boolean active\n        string description\n        string name\n        float price\n        int restaurant_id\n    }\n\n    tb_request_item {\n        int id\n        int amount\n        string note\n        float total_price\n        int request_id\n        int product_id\n    }\n\n    tb_request {\n        int id\n        string code\n        string address_cep\n        string address_complement\n        string address_neighborhood\n        string address_number\n        string address_street\n        datetime created_date\n        datetime confirmation_date\n        datetime delivery_date\n        datetime finished_date\n        float subtotal\n        float total_value\n        int address_city_id\n        int form_payment_id\n        int restaurant_id\n    }\n\n    tb_form_payments {\n        int id\n        string description\n        datetime updated_date\n    }\n\n    tb_restaurants {\n        int id\n        string address_cep\n        string address_complement\n        string address_neighborhood\n        string address_number\n        string address_street\n        datetime created_date\n        string name\n        float shipping_fee\n        int address_city_id\n        int kitchen_id\n        boolean open\n        boolean active\n    }\n\n    tb_cities {\n        int id\n        string name\n        int state_id\n    }\n\n    tb_states {\n        int id\n        string name\n    }\n\n    tb_kitchens {\n        int id\n        string name\n    }\n\n    tb_users {\n        int id\n        datetime created_date\n        string email\n        string name\n        string password\n    }\n\n    tb_user_groups {\n        int user_id\n        int group_id\n    }\n\n    tb_groups {\n        int id\n        string name\n    }\n\n    tb_groups_permissions {\n        int group_id\n        int permission_id\n    }\n\n    tb_permissions {\n        int id\n        string name\n        string description\n    }\n\n    tb_restaurant_responsible {\n        int restaurant_id\n        int user_id\n    }\n\n    tb_restaurant_form_payment {\n        int restaurant_id\n        int form_payment_id\n    }\n\n    tb_request ||--o{ tb_request_item : contains\n    tb_products ||--o{ tb_request_item : contains\n    tb_products ||--|{ tb_product_photo : has\n    tb_request ||--|{ tb_form_payments : uses\n    tb_request ||--|{ tb_restaurants : belongs_to\n    tb_restaurants ||--|{ tb_cities : located_in\n    tb_cities ||--|{ tb_states : belongs_to\n    tb_restaurants ||--|{ tb_kitchens : has\n    tb_users ||--o{ tb_user_groups : belongs_to\n    tb_groups ||--o{ tb_user_groups : groups\n    tb_groups ||--o{ tb_groups_permissions : has\n    tb_permissions ||--|{ tb_groups_permissions : belongs_to\n    tb_restaurants ||--o{ tb_restaurant_responsible : managed_by\n    tb_users ||--|{ tb_restaurant_responsible : responsible_for\n    tb_restaurants ||--o{ tb_restaurant_form_payment : accepts\n    tb_form_payments ||--|{ tb_restaurant_form_payment : allowed\n\n```\n\n\n## Branches de referência - Desenvolvimento\n\nPara garantir um versionamento estruturado e documentar o uso de cada recurso, dividi o projeto em branches específicas, servindo como referência para a aplicação de funcionalidades.\n\n| Branch                        | Descrição                                                                                               |\n|-------------------------------|---------------------------------------------------------------------------------------------------------|\n| `master`                      | Projeto completo                                                                                        |\n| `feat/crud-basic`             | Implementação de um CRUD da forma mais básica.                                                          |\n| `feat/crud-service`           | Implementação do CRUD com a camada de serviço.                                                          |\n| `feat/crud-repository-jpa`    | Implementação de recursos do JPA e padrão repository.                                                   |\n| `feat/migrations-flyway`      | Implementação do Flyway para criar as migrações.                                                        |\n| `feat/custom-exception-handle`| Implementação de tratamento e modelagem de erros da API.                                                |\n| `feat/include-patterns`       | Inclusão de DTO's e Mappers nos CRUD's para aplicação de boas práticas.                                 |\n| `feat/advanced-api`           | Modelagem avançada de API's usando sub-recursos para relacionamento, granularidade de recursos e conceitos abstratos e não-CRUD. |\n| `feat/search-reports-projections` | Implementação de pesquisas, relatórios e projeções no sistema.                                          |\n| `feat/upload-download-files`  | Implementação de download e upload de arquivos com AWS S3 e armazenamento local.                        |\n| `feat/send-transactional-email`| Implementação de envio de emails transacionais com AWS SES.                                             |\n| `feat/api-client-js-java`     | Implementação de cache e otimizações gerais para consumo do cliente.                                    |\n| `feat/implements-api-docs`    | Documentação da API com Swagger OpenAPI 3 (legado).                                                            |\n| `feat/discoverability-hateoas`| Implementação de descoberta e HATEOAS no modelo HAL com Spring Hateoas                                  |\n| `feat/version-api`| Implementação de versionamento de API por URI, mantendo v1 para as APIs existentes e criando v2 para o novo recurso de cozinhas, visando melhor organização e evolução das funcionalidades sem quebrar compatibilidade com a versão anterior.                                  |\n| `feat/logging`| Implementação de logs com logback e SLF4J e configuração de dependência e propriedades para salvar logs na nuvem com Loggly     |\n\n# O que você precisa saber antes de rodar o projeto\n\n## Configuração de credenciais AWS\nEste projeto utiliza recursos da AWS, como S3 (para armazenamento de arquivos) e SES (para envio de e-mails). Por questões de segurança, as chaves de acesso não podem ser incluídas diretamente no código. Portanto, é necessário que o usuário crie suas próprias chaves de acesso antes de rodar o projeto em sua máquina.\n### Gerando credenciais AWS\n\n1. Acesse o [Console da AWS](https://aws.amazon.com/console/).\n2. Navegue até o serviço **IAM** (Gerenciamento de Identidade e Acesso).\n3. Crie um novo **Usuário** com permissões para o S3 e SES.\n4. Gere um par de **Access Key** e **Secret Key**.\n5. Configure essas chaves no arquivo `application.properties` do seu projeto, substituindo as chaves de exemplo pelos valores gerados.\n\n```properties\nalgafood.storage.type=s3\n\n# Configurações de Armazenamento\nalgafood.storage.local.directory-photos=src/main/java/br/com/thallyta/algafood/files\nalgafood.storage.s3.access-key=sua-chave-de-acesso-aqui\nalgafood.storage.s3.secret-key=sua-chave-secreta-aqui\nalgafood.storage.s3.bucket=algafood-api-test-00254\nalgafood.storage.s3.region=us-east-2\nalgafood.storage.s3.folder=catalogo\n\n# Configurações de E-mail (AWS SES)\nspring.mail.host=email-smtp.us-east-2.amazonaws.com\nspring.mail.port=587\nspring.mail.username=sua-chave-de-acesso-aqui\nspring.mail.password=sua-chave-secreta-aqui\nalgafood.mail.sender=seu-email-aqui@gmail.com\n\n```\n\n## Configurando Loggly para o Projeto\n\nPara habilitar o envio de logs para o Loggly, siga os passos abaixo:\n\n### 1. Criar uma Conta no Loggly\n1. Acesse [Loggly](https://www.loggly.com/).\n2. Faça o cadastro para criar sua conta ou faça login, caso já possua uma.\n\n### 2. Gerar o Token de Autenticação\n1. Após o login, vá até o painel do Loggly.\n2. Navegue até **Source Setup** e selecione a opção **Customer Tokens**.\n3. Clique em **Generate Token** para criar um novo token de autenticação.\n4. Copie o token gerado, pois ele será necessário nas etapas seguintes.\n\n### 3. Configurar o Token no Projeto\n\n1. No arquivo `application.properties` do seu projeto, adicione a seguinte propriedade, substituindo `seu-token-logging-aqui` pelo token gerado no Loggly:\n\n     ```properties\n    logging.loggly.token=seu-token-logging-aqui\n    ```\n    \n3. Salve o arquivo.\n\n### 4. Verificar a Configuração\n1. Execute o projeto e monitore os logs.\n2. Acesse o painel do Loggly para confirmar se os logs estão sendo enviados corretamente.\n\n# Iniciando o projeto\n\nPara iniciar a aplicação execute a seguinte ação na pasta algafood\n\n```shell script\nmvn spring-boot:run\n```\n\nInstale as dependências do maven com o comando:\n\n```shell script\nmvn clean install\n```\n\nConsultar documentação da Api:\n\n```shell script\nhttp://localhost:8080/swagger-ui/index.html#/\nhttp://localhost:8080/v3/api-docs\n```\n\n## Configuração da Infraestrutura com Terraform\n\n### Push de Imagem para o ECR\n\n#### Passo 1: Rodar o Terraform\nExecute os comandos abaixo para aplicar a infraestrutura na AWS usando Terraform:\n\n```sh\nterraform init\nterraform apply -auto-approve\n```\n\n#### Passo 2: Acessar o ECR no Console da AWS\nApós rodar o Terraform, entre no console da AWS:\n1. Navegue até **Elastic Container Registry (ECR)**.\n2. Encontre o repositório criado pelo Terraform.\n3. Copie os comandos exibidos na seção **View push commands**, que serão utilizados para autenticar no ECR, criar a imagem e fazer o push.\n\n#### Passo 3: Autenticar no ECR e Fazer o Push da Imagem\nExecute os comandos indicados no AWS ECR para:\n1. Autenticar no ECR.\n2. Criar a imagem do container.\n3. Fazer o push da imagem para o repositório ECR.\n\nExemplo de comandos (substitua `\u003caws-account-id\u003e`, `\u003cregion\u003e` e `\u003crepository-name\u003e` pelos valores apropriados):\n\n```sh\naws ecr get-login-password --region \u003cregion\u003e | docker login --username AWS --password-stdin \u003caws-account-id\u003e.dkr.ecr.\u003cregion\u003e.amazonaws.com\n\ndocker build -t \u003crepository-name\u003e .\n\ndocker tag \u003crepository-name\u003e:latest \u003caws-account-id\u003e.dkr.ecr.\u003cregion\u003e.amazonaws.com/\u003crepository-name\u003e:latest\n\ndocker push \u003caws-account-id\u003e.dkr.ecr.\u003cregion\u003e.amazonaws.com/\u003crepository-name\u003e:latest\n```\n\nApós o push, a imagem estará disponível no ECR para ser utilizada na execução do container na AWS.\n\n\n# Autor\n\u003cb\u003eThallyta Macedo Carvalho de Castro\u003c/b\u003e\n\nLinkedin: https://www.linkedin.com/in/thallyta-castro/\n\nMedium: https://medium.com/@thallyta-castro-cv\n\nemail: thallytacastro.dev@gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthallyta-castro-cv%2Falgafood-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthallyta-castro-cv%2Falgafood-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthallyta-castro-cv%2Falgafood-api/lists"}