{"id":19653194,"url":"https://github.com/didifive/quickcup-api","last_synced_at":"2026-05-07T00:38:36.523Z","repository":{"id":261051628,"uuid":"882326616","full_name":"didifive/quickcup-api","owner":"didifive","description":"Quickcup Backend API made with Java, Spring Boot, Thymeleaf and Postgres","archived":false,"fork":false,"pushed_at":"2024-11-25T02:55:14.000Z","size":7773,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-10T00:17:14.962Z","etag":null,"topics":["api","api-rest","apikey-authentication","basic-authentication","flyway","java","postgresql","spring-boot","spring-data-jpa","spring-security","thymeleaf","thymeleaf-layout"],"latest_commit_sha":null,"homepage":"https://quickcup-api.zancanela.dev.br/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/didifive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2024-11-02T14:26:32.000Z","updated_at":"2024-12-05T01:14:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"7f663991-621c-4bf2-a49d-221eb37f1961","html_url":"https://github.com/didifive/quickcup-api","commit_stats":null,"previous_names":["didifive/quickcup-api"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fquickcup-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fquickcup-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fquickcup-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didifive%2Fquickcup-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/didifive","download_url":"https://codeload.github.com/didifive/quickcup-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240961574,"owners_count":19885351,"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":["api","api-rest","apikey-authentication","basic-authentication","flyway","java","postgresql","spring-boot","spring-data-jpa","spring-security","thymeleaf","thymeleaf-layout"],"created_at":"2024-11-11T15:13:32.214Z","updated_at":"2026-05-07T00:38:36.496Z","avatar_url":"https://github.com/didifive.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Repository language count](https://img.shields.io/github/languages/count/didifive/quickcup-api)\n![Repository code size](https://img.shields.io/github/languages/code-size/didifive/quickcup-api)\n[![GitHub last commit](https://img.shields.io/github/last-commit/didifive/quickcup-api?color=blue)](https://github.com/didifive/quickcup-api/commits/main)\n\n[![Made by Didi](https://img.shields.io/badge/made%20by-Didi-green)](https://luiszancanela.dev.br/)\n\n![Repository license](https://img.shields.io/github/license/didifive/quickcup-api)\n\n[![IntelliJ IDEA](https://img.shields.io/badge/IntelliJIDEA-000000.svg?logo=intellij-idea\u0026logoColor=white)](https://www.jetbrains.com/idea/)\n\n![technology Java](https://img.shields.io/static/v1?color=red\u0026label=Technology\u0026message=Java\u0026style=for-the-badge\u0026logo=data:image/png;base64,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)\n![technology Spring](https://img.shields.io/static/v1?color=6DB33F\u0026label=Technology\u0026message=Spring\u0026style=for-the-badge\u0026logo=spring)\n\n# QuickCup API ☕\n\nAPI Back-end com Java e Spring Boot e Front-end Administrativo com Thymeleaf para delivery de uma cafeteria.\n\n## 🎯 Objetivo\n\nEste aplicativo foi criado através da oportunidade do desafio do trabalho semestral da\nfaculdade UNIFRAN / Cruzeiro do Sul, Projeto Integrador Transdisciplinar, do segundo\nsemestre de 2024. Todo o conteúdo é fictício. \n\nO defasio consistia em desenvolver um sistema para gerenciamento de delivery para uma cafeteria.\n\nPara a solução, foi criado o sistema QuickCup com dois módulos:\n\n- QuickCup API e ADMIN: O QuickCup API e Admin é essa aplicação e interface desenvolvida para o acesso da loja poder cadastrar os produtos e visualizar os pedidos realizados pelo consumidor. Nessa aplicação foram criados endpoints API REST para que o QuickCup App possa interagir com o QuickCup API.\n  O QuickCup Admin foi produzido para ser responsivo, mas para uma melhor experiência é ideal acessar com notebook ou computador. (Esse repositório contém o QuickCup API e Admin)\n- QuickCup APP: O QuickCup App foi desenvolvido com React e Bootstrap CSS para trazer experiência de responsividade para acesso por via de diversos dispositivos mobiles ou notebooks e computadores. Link para o repositório do APP: [didifive/quickcup-app](https://github.com/didifive/quickcup-app)\n\n## 🔧 Principais Tecnologias\n\n- Java 17\n- Maven\n- Spring Boot 3.3.5\n- Spring Web\n- Spring Data JPA\n- PostgreSQL\n- Flyway\n- Thymeleaf\n- Docker e Docker Compose 3 para desenvolvimento local com postgres\n- IntelliJ IDEA\n\n## 🔣 Diagramas\n\nOs diagramas foram criados na sintaxe [Mermaid](https://mermaid.live/).\n\n### Diagrama de Classes\n\n```mermaid\nclassDiagram\n    class BasicEntity {\n        \u003c\u003cAbstract\u003e\u003e\n        - Long id\n        + getId()\n        + setId()\n    }\n    \n    class Empresa {\n        - Short id\n        - String nome\n        - String email\n        - String telefone\n        - BigDecimal valorEntrega\n        - Time tempoEntrega\n        - String cep\n        - String logradouro\n        - Integer numero\n        - String complemento\n        - String bairro\n        - String cidade\n        - String estado\n        - BigDecimal longitude\n        - BigDecimal latitude\n        + Getters() and Setters()\n    }\n\n    class Cliente {\n        - String nome\n        - String telefone\n        - List~Endereco~ enderecos\n        + Getters() and Setters()\n    }\n\n    class Endereco {\n        - Long clienteId\n        - String nome\n        - String cep\n        - String logradouro\n        - Integer numero\n        - String complemento\n        - String bairro\n        - String cidade\n        - String estado\n        - BigDecimal longitude\n        - BigDecimal latitude\n        + Getters() and Setters()\n    }\n\n    class Grupo {\n        - String nome\n        - String descricao\n        - List~Produto~ produtos\n        + Getters() and Setters()\n    }\n\n    class Produto {\n        - String codigo\n        - String nome\n        - String descricao\n        - String imagem\n        - BigDecimal valorOriginal\n        - BigDecimal valorDesconto\n        - boolean enabled\n        - Grupo grupo\n        + Getters() and Setters()\n    }\n\n    class PedidoStatus {\n        \u003c\u003cEnumeration\u003e\u003e\n        NOVO\n        CONFIRMADO\n        CANCELADO\n        EM_PREPARO\n        EM_ENTREGA\n        FINALIZADO\n    }\n\n    class FormaPagamento {\n        \u003c\u003cEnumeration\u003e\u003e\n        DINHEIRO\n        CARTAO_CREDITO\n        CARTAO_DEBITO\n        PIX\n    }\n\n    class Pedido {\n        - Cliente cliente\n        - PedidoStatus status\n        - BigDecimal valorEntrega\n        - boolean retira\n        - String endereco\n        - FormaPagamento formaPagamento\n        - String observacoes\n        - Instant dataHoraPedido\n        - List~ItemPedido~ itens\n        + Getters() and Setters()\n    }\n\n    class ItemPedidoId {\n        \u003c\u003cEmbeddable\u003e\u003e\n        - Pedido pedido\n        - Produto produto\n        + ItemPedidoId()\n        + ItemPedidoId(Pedido, Produto)\n        + Getters() and Setters()\n        + hashCode()\n        + equals()\n    }\n\n    class ItemPedido {\n        - ItemPedidoId id\n        - Integer quantidade\n        - BigDecimal valorUnitarioOriginal\n        - BigDecimal valorUnitarioDesconto\n        + Getters() and Setters()\n    }\n\n    class DiaSemana {\n        \u003c\u003cEnumeration\u003e\u003e\n        DOMINGO\n        SEGUNDA\n        TERCA\n        QUARTA\n        QUINTA\n        SEXTA\n        SABADO\n        + from(DayOfWeek)\n    }\n\n    class Funcionamento {\n        - DiaSemana diaSemana\n        - Time horaInicio\n        - Time horaFim\n        + Getters() and Setters()\n    }\n\n    class FuncionamentoEspecialTipo {\n        \u003c\u003cEnumeration\u003e\u003e\n        ABERTO\n        FECHADO\n    }\n\n    class FuncionamentoEspecial {\n        - String nome\n        - Instant dataInicio\n        - Instant dataFim\n        - FuncionamentoEspecialTipo tipo\n        + Getters() and Setters()\n    }\n\n    Cliente -- BasicEntity : herda\n    Endereco -- BasicEntity : herda\n    Grupo -- BasicEntity : herda\n    Produto -- BasicEntity : herda\n    Pedido -- BasicEntity : herda\n    FuncionamentoEspecial -- BasicEntity : herda\n    Pedido  -- PedidoStatus : contém\n    Pedido -- FormaPagamento : contém\n    Cliente \"1\" -- \"0..*\" Endereco : possui\n    Grupo \"1\" -- \"0..*\" Produto : contém\n    Pedido \"1\" -- \"0..*\" Cliente : pertence\n    ItemPedidoId \"1\" -- \"1\" ItemPedido : inclui\n    ItemPedido \"1\" -- \"0..*\" Pedido : inclui\n    Funcionamento -- DiaSemana : possui\n    FuncionamentoEspecial --  FuncionamentoEspecialTipo : possui\n    \n```\n\n### Diagrama de Sequencia\n\n```mermaid\nsequenceDiagram\n    actor Cliente\n    participant Aplicativo\n    participant API\n    actor Atendente\n    Cliente-\u003e\u003e+Aplicativo: Cliente acessa aplicativo\n    Aplicativo-\u003e\u003e+Cliente: Loja em funcionamento disponibiliza menu\n    Cliente-\u003e\u003e+Aplicativo: Escolhe item do menu\n    Cliente-\u003e\u003e+Aplicativo: Adiciona produto com quantidade ao carrinho\n    Aplicativo-\u003e\u003e+Cliente: Retorna tela do carrinho\n    Cliente-\u003e\u003e+Aplicativo: Informa nome e telefone\n    Cliente-\u003e\u003e+Aplicativo: Informa opção de entrega e endereço\n    Cliente-\u003e\u003e+Aplicativo: Informa modo de pagamento\n    Cliente-\u003e\u003e+Aplicativo: Faz o pedido\n    Aplicativo-\u003e\u003e+API: Encaminha o pedido\n    API-\u003e\u003e+Aplicativo: Retorna pedido efetuado\n    API-\u003e\u003e+Atendente: Informa pedido novo\n    Atendente-\u003e\u003e+API: Atualiza status pedido\n    Cliente-\u003e\u003e+Aplicativo: Consulta pedido\n    Aplicativo-\u003e\u003e+API: Consulta Status Pedido\n    API-\u003e\u003e+Aplicativo: Retorna Status Pedido\n    Aplicativo-\u003e\u003e+Cliente: Informa status pedido\n    \n```\n\n### Diagrama de Entidade e Relacionamento\n\n```mermaid\nerDiagram\n    EMPRESA {\n        SMALLINT id PK\n        VARCHAR nome\n        VARCHAR email\n        VARCHAR telefone\n        DECIMAL valor_entrega\n        TIME tempo_entrega\n        VARCHAR cep\n        VARCHAR logradouro\n        INTEGER numero\n        VARCHAR complemento\n        VARCHAR bairro\n        VARCHAR cidade\n        VARCHAR estado\n        DECIMAL longitude\n        DECIMAL latitude\n    }\n    \n    CLIENTE {\n        BIGINT id PK\n        VARCHAR nome\n        VARCHAR telefone\n    }\n    \n    ENDERECO {\n        BIGINT id PK\n        BIGINT cliente_id FK\n        VARCHAR nome\n        VARCHAR cep\n        VARCHAR logradouro\n        INTEGER numero\n        VARCHAR complemento\n        VARCHAR bairro\n        VARCHAR cidade\n        VARCHAR estado\n        DECIMAL longitude\n        DECIMAL latitude\n    }\n    \n    GRUPO {\n        BIGINT id PK\n        VARCHAR nome\n        VARCHAR descricao\n    }\n    \n    PRODUTO {\n        BIGINT id PK\n        VARCHAR codigo\n        VARCHAR nome\n        VARCHAR descricao\n        VARCHAR imagem\n        DECIMAL valor_original\n        DECIMAL valor_desconto\n        BOOLEAN enabled\n        BIGINT grupo_id FK\n    }\n    \n    PEDIDO {\n        BIGINT id PK\n        BIGINT cliente_id FK\n        VARCHAR status\n        DECIMAL valor_entrega\n        BOOLEAN retira\n        VARCHAR endereco\n        VARCHAR forma_pagamento\n        VARCHAR observacoes\n        TIMESTAMP data_hora_pedido\n    }\n    \n    ITEM_PEDIDO {\n        BIGINT pedido_id PK \n        BIGINT produto_id PK\n        INTEGER quantidade\n        DECIMAL valor_unitario_original\n        DECIMAL valor_unitario_desconto\n    }\n    \n    FUNCIONAMENTO {\n        VARCHAR dia_semana PK\n        TIME hora_inicio\n        TIME hora_fim\n    }\n    \n    FUNCIONAMENTO_ESPECIAL {\n        BIGINT id PK\n        VARCHAR nome\n        TIMESTAMP data_inicio\n        TIMESTAMP data_fim\n        VARCHAR tipo\n    }\n\n    CLIENTE ||--|{ ENDERECO : possui\n    GRUPO ||--o{ PRODUTO : \"contém\"\n    PEDIDO ||--o| CLIENTE : pertence\n    ITEM_PEDIDO ||--o| PEDIDO : inclui\n    ITEM_PEDIDO ||--|{ PRODUTO : \"contém\"\n\n    %% Triggers\n    ITEM_PEDIDO ||--|{ prevent_delete_or_update_item_pedido_trigger : \"prevenção de delete/update\"\n    PEDIDO ||--|{ prevent_delete_pedido_trigger : \"prevenção de delete\"\n    PEDIDO ||--|{ allow_update_status_only_trigger : \"permitir update apenas no status\"\n\n```\n\n-----\n\n## 📷 Prints do Projeto\n\n### 🎥 Demonstração de Telas e Funcionamento\n![Demonstração de Telas e Funcionamento](docs/QuickCup-Demo.gif)\n\n### Spring banner personalizado\n![Spring banner personalizado](docs/Spring-Banner-Personalizado.png)\n\n### Tela Inicial do QuickCup Admin\n![Tela Inicial do QuickCup Admin](docs/QuickCup-Admin.png)\n\n### Tela Atendimento Pedidos\n![Tela Atendimento Pedidos](docs/Atendimento-Pedidos.png)\n\n### Menu e Instruções conforme nível de acesso\n\n#### Menu sem logar\n![Menu sem Logar](docs/Menu-sem-Logar.png)\n\n#### Tela de Login\n![Tela de Login](docs/Tela-Login.png)\n\n#### Perfil Admin\n![Perfil Admin - Menu](docs/Perfil-Admin-Menu.png)\n![Perfil Admin - Instruções](docs/Perfil-Admin-Instrucoes.png)\n\n#### Perfil Atendente\n![Perfil Atendente - Menu](docs/Perfil-Atendente-Menu.png)\n![Perfil Atendente - Instruções](docs/Perfil-Atendente-Instrucoes.png)\n\n#### Perfil Dev\n![Perfil Dev - Menu](docs/Perfil-Dev-Menu.png)\n![Perfil Dev - Instruções](docs/Perfil-Dev-Instrucoes.png)\n\n### Swagger QuickCup API\n![Swagger QuickCup API](docs/Swagger-QuickCup-API.png)  \n![Swagger QuickCup API Authorization With ApiKey](docs/Swagger-QuickCup-API-Authorization-ApiKey.png)\n\n### JaCoCo Coverage\n![JaCoCo Coverage](docs/JaCoCo-Coverage.png)\n\n### Variáveis de Ambiente configuradas no Railway:\n![Railway Environments Variables](docs/Railway-Environments-Variables.png)\n\n-----\n\n## ✔️ Testes\nOs testes foram feitos utilizando JUnit 5, Mockito e MockMVC com Hamcrest.\n\nPara executar os testes pode executar sua IDE ou\n\nUtilizando o terminal (PowerShell, Bash ou similiar), basta executar na pasta do projeto o comando abaixo:\n\n```\n./mvnw clean verify -Dspring.profiles.active=test\n```\n\n-----\n\n## ⚙ Executando o projeto localmente\nAntes de mais nada, é preciso possuir no mínimo JDK 21 LTS instalado na máquina em que\nirá executar. A execução do projeto pode ser feita utilizando recurso de sua IDE ou \ncom comando (demonstrado no próximo item).\n\n### 🌍 Variáveis de Ambiente\n\nAntes de executar é preciso ter atenção e configurar as variáveis de ambiente:\n\n- `SPRING_PROFILES_ACTIVE`: Ambiente de desenvolvimento ou produção\n- `PGHOST`: Host Postgres\n- `PGPORT`: Porta Postgres\n- `PGDATABASE`: Nome do database Postgres\n- `POSTGRES_USER`: Usuário Postgres\n- `POSTGRES_PASSWORD`: Senha Postgres\n- `QUICKCUP_API_KEY`: Chave de acesso da API\n- `QUICKCUP_USERS_DEFAULT_PASSWORD`: Senha padrão para os usuários do painel administrativo\n- `CROSS_ORIGIN_URLS`: URLs para configurar o CORS para acesso de aplicativos externos aos endpoints REST API\n- `LINK_FORMULARIO_TESTES`: URL para acessar o formulário de testes (para carregar no index do painel administrativo, não afeta o funcionamento da aplicação)\n- `LINK_APLICACAO_CLIENTE`: URL para acessar a aplicação do cliente (para carregar no index do painel administrativo, não afeta o funcionamento da aplicação)\n\nPara facilitar eu deixei o arquivo `.env.sample` com as variáveis de ambiente. Basta renomear para `.env` para que a aplicação\ncarregue as informações das variáveis de ambiente.\n\n#### 🌍 Variáveis de Ambiente no Railway\n\nPara a aplicação hospedada no Railway, além de definir as variáveis de ambiente mínimas para a aplicação\né necessário definir a variável de ambiente abaixo:\n\n- `NIXPACKS_JDK_VERSION`: Variável de ambiente para definir a versão do JDK, no caso desse projeto é `21`.\n\n### 🐘 Postgres Docker Compose\n\nEssa aplicação depende do Postgres para funcionar, acima existem variáveis de ambiente para configurar o acesso ao banco de dados.  \nCaso já possua um banco de dados Postgres, basta ajustar as variáveis de ambiente para acessá-lo.  \nNesse projeto utilizamos o Postgres Docker Compose para facilitar a execução do projeto localmente sem necessitar de ter o Postgres instalado\nou configurado. Para executar o Postgres Docker Compose, basta executar na pasta do projeto o comando abaixo:\n\n```\ndocker compose up\n```\n\nO docker compose também está preparado para ler as informações do arquivo `.env` mencionado no item anterior, isso facilita a integração da\naplicação com o banco de dados já que ambas utilizando variáveis de ambiente em comum.  \nNo docker compose `docker-compose.yml` também foi configurado para subir uma instancia do pgadmin para que se possa\nter acesso visual ao banco Postgres.\n\n### ⚡ Executando \n\nDepois de configurar as variáveis de ambiente e executar o Postgres Docker Compose (ou ter considerado as configurações de seu Postgres), digite no terminal:\n\n- PowerShell: `./mvnw spring-boot:run`\n- Bash: `./mvnw spring-boot:run`\n- CMD: `mvnw spring-boot:run`\n\n## 📚 OpenApi / Swagger\nQuando a aplicação estiver no ar, é possível acessar a documentação da API com endpoints REST utilizando o Swagger OpenAPI v3.1 através do link: http://localhost:8080/swagger-ui/index.html\n\n## 👪 Populate\nPara popular dados básicos no banco de dados ao iniciar o projeto, foi criada a migration do FlyWay V999__Initial_Inserts.sql.\n\n## ☁️ Deploy na Nuvem\nEsse projeto foi implantado no Railway que faz integração com o repositório do GitHub.\nURL da aplicação: https://quickcup-api.zancanela.dev.br\n\n-----\n\nFeito com ❤️ e dedicação por [Luis Zancanela](https://github.com/didifive)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidifive%2Fquickcup-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdidifive%2Fquickcup-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidifive%2Fquickcup-api/lists"}