- Sobre
- Integrantes
- Tecnologias utilizadas
- Pré Requisitos
- Configuração
- Executando o projeto
- API Endpoints
Refood é uma plataforma onde estabelecimentos comerciais podem vender produtos próximos da data de validade a preços mais acessíveis, permitindo que consumidores adquiram esses itens e contribuam para a redução do desperdício de alimentos.
- Gestão de Restaurantes: Permite o cadastro e gerenciamento completo de restaurantes, incluindo informações básicas, horários de funcionamento e cardápios.
- Sistema de Pedidos: Oferece um robusto sistema de criação, acompanhamento e gerenciamento de pedidos, facilitando o processo tanto para clientes quanto para restaurantes.
- Autenticação e Segurança: Implementa um sistema seguro de autenticação de usuários com JWT e OAuth2, garantindo a proteção dos dados dos clientes e restaurantes.
- Gestão de Produtos: Possibilita o cadastro detalhado de produtos, com suporte a categorias, variações e upload de imagens.
- Endereços e Entregas: Gerencia endereços de entrega dos clientes, com validação e busca por CEP.
- Avaliações e Feedback: Permite que os clientes avaliem os restaurantes e os pedidos, fornecendo feedback valioso para melhoria contínua.
- Integração com Firebase: Utiliza o Firebase para armazenamento eficiente de imagens e outros arquivos.
- Documentação Interativa: Oferece uma documentação completa da API através do Swagger, facilitando a integração e o desenvolvimento.
Caio Martins |
Felipe Fracasso |
Leonardo Boeira |
Marina Barbosa |
Ricardo Muenchen |
Samilis Brito |
Thasyo Peres |
Yasmin Carlôto |
---|
- Java 17
- Spring Boot 3.3.4
- Spring Security com OAuth2
- Spring Data JPA
- PostgreSQL
- H2 Database (desenvolvimento)
- Swagger/OpenAPI
- JWT Authentication
- Firebase Integration
- Maven
- Lombok
- HATEOAS
- Clone o repositório
git clone git@github.com:IReFoodI/Back-End.git
cd Back-End
-
Escolha seu perfil no application.propertie
- Abra o arquivo
src/main/resources/application.properties
- Comente a linha
spring.profiles.active=dev
e descomente a linhaspring.profiles.active=test
para rodar em desenvolvimento com H2 - Comente a linha
spring.profiles.active=test
e descomente a linhaspring.profiles.active=dev
para rodar em desenvolvimento com PostgreSQL - Comente as linhas
spring.profiles.active=test
espring.profiles.active=dev
e descomente a linhaspring.profiles.active=prod
para rodar em produção
- Abra o arquivo
-
Configure o banco de dados PostgreSQL ou H2
# src/main/resources/application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/db_refood
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
-
Configure o Firebase
- Adicione o arquivo de configuração do Firebase (
firebase-config.json
) ao diretóriosrc/main/resources
- Adicione o arquivo de configuração do Firebase (
-
Configure as variáveis de ambiente
JWT_SECRET=seu_jwt_secret
FIREBASE_CONFIG_PATH=caminho_para_config_firebase
- Build do projeto
mvn clean install
- Execute a aplicação
mvn spring-boot:run
- Acesse a documentação Swagger
http://localhost:8080/swagger-ui/index.html
A documentação completa da API está disponível através do Swagger UI quando o projeto está em execução.
GET /api/user
- Obter todos os usuários
GET /api/user/{id}
- Obter usuário por ID
POST /api/user
- Criar um novo usuário
PUT /api/user/{id}
- Atualizar usuário
DELETE /api/user/{id}
- Excluir usuário
GET /api/user/profile
- Obter perfil do usuário
PUT /api/user/profile
- Atualizar perfil do usuário
GET /api/restaurant
- Obter todos os restaurantes
POST /api/restaurant
- Criar um novo restaurante
GET /api/restaurant/{id}
- Obter restaurante por ID
PUT /api/restaurant/{id}
- Atualizar restaurante
DELETE /api/restaurant/{id}
- Excluir restaurante
GET /api/restaurant/search
- Pesquisar restaurantes
GET /api/restaurant/{id}/menu
- Obter cardápio do restaurante
POST /api/restaurant/{id}/product
- Adicionar produto ao restaurante
GET /api/restaurant/{restaurantId}/product/{productId}
- Obter produto específico do restaurante
PUT /api/restaurant/{restaurantId}/product/{productId}
- Atualizar produto no restaurante
DELETE /api/restaurant/{restaurantId}/product/{productId}
- Remover produto do restaurante
GET /api/restaurant/{restaurantId}/hours
- Obter horários do restaurante
POST /api/restaurant/{restaurantId}/hours
- Definir horários do restaurante
PUT /api/restaurant/{restaurantId}/hours/{hoursId}
- Atualizar horários do restaurante
DELETE /api/restaurant/{restaurantId}/hours/{hoursId}
- Excluir horários do restaurante
GET /api/restaurant/{restaurantId}/hours/{dayOfWeek}
- Obter horários do restaurante para um dia específico
PUT /api/restaurant/{restaurantId}/hours/{dayOfWeek}
- Atualizar horários do restaurante para um dia específico
GET /api/card
- Obter todos os cartões
POST /api/card
- Criar um novo cartão
GET /api/card/{id}
- Obter cartão por ID
PUT /api/card/{id}
- Atualizar cartão
DELETE /api/card/{id}
- Excluir cartão
GET /api/card/user/{userId}
- Obter cartões por ID do usuário
GET /api/address
- Obter todos os endereços
POST /api/address
- Criar um novo endereço
GET /api/address/{id}
- Obter endereço por ID
PUT /api/address/{id}
- Atualizar endereço
DELETE /api/address/{id}
- Excluir endereço
GET /api/address/user/{userId}
- Obter endereços por ID do usuário
POST /api/address/validate
- Validar endereço
GET /api/address/search
- Pesquisar endereços por CEP
POST /api/auth/login
- Login do usuário
POST /api/auth/register
- Registro de usuário
POST /api/auth/logout
- Logout do usuário
POST /api/auth/refresh-token
- Atualizar token de autenticação
GET /api/transaction
- Obter todas as transações
POST /api/transaction
- Criar uma nova transação
GET /api/transaction/{id}
- Obter transação por ID
GET /api/review
- Obter todas as avaliações
POST /api/review
- Criar uma nova avaliação
GET /api/review/{id}
- Obter avaliação por ID
PUT /api/review/{id}
- Atualizar avaliação
DELETE /api/review/{id}
- Excluir avaliação
GET /api/review/restaurant/{restaurantId}
- Obter avaliações para um restaurante específico
GET /api/product
- Obter todos os produtos
POST /api/product
- Criar um novo produto
GET /api/product/{id}
- Obter produto por ID
PUT /api/product/{id}
- Atualizar produto
DELETE /api/product/{id}
- Excluir produto
GET /api/product/search
- Pesquisar produtos
GET /api/product/category/{categoryId}
- Obter produtos por categoria
POST /api/product/{id}/image
- Fazer upload de imagem do produto
DELETE /api/product/{id}/image
- Excluir imagem do produto
GET /api/order
- Obter todos os pedidos
POST /api/order
- Criar um novo pedido
GET /api/order/{id}
- Obter pedido por ID
PUT /api/order/{id}
- Atualizar pedido
DELETE /api/order/{id}
- Excluir pedido
GET /api/order/user/{userId}
- Obter pedidos por ID do usuário
GET /api/order/restaurant/{restaurantId}
- Obter pedidos para um restaurante
PUT /api/order/{id}/status
- Atualizar status do pedido
POST /api/order/{id}/payment
- Processar pagamento do pedido
POST /api/firebase/upload
- Fazer upload de arquivo para o Firebase Storage
GET /api/firebase/image/{imageName}
- Obter imagem do Firebase Storage
GET /api/favorite
- Obter todos os favoritos
POST /api/favorite
- Adicionar um favorito
DELETE /api/favorite/{id}
- Remover um favorito
GET /api/favorite/user/{userId}
- Obter favoritos de um usuário
GET /api/cart
- Obter carrinho
POST /api/cart
- Adicionar item ao carrinho
PUT /api/cart/{itemId}
- Atualizar item do carrinho
DELETE /api/cart/{itemId}
- Remover item do carrinho
DELETE /api/cart
- Limpar carrinho
GET /api/token/info
- Obter informações do token
src/
├── main/
│ ├── java/
│ │ └── com.projeto.ReFood/
│ │ ├── controller/
│ │ ├── dto/
│ │ ├── exception/
│ │ ├── firebase/
│ │ ├── model/
│ │ ├── repository/
│ │ ├── security/
│ │ ├── service/
│ │ ├── swagger/
│ │ └── ReFoodsApplication.java
│ └── resources/
│ └── ...
└──...
src/main/java/com.projeto.ReFood/: Contém o código-fonte Java principal do projeto.
-
controller/: Onde ficam os controllers, responsáveis por lidar com as requisições HTTP e definir os endpoints da API. Os controllers traduzem as requisições dos usuários em chamadas para os serviços da aplicação.
-
dto/: Armazena as classes DTO (Data Transfer Object). Essas classes são usadas para transportar dados entre as camadas da aplicação e podem ser usadas para mapear objetos de entrada e saída da API.
-
exception/: Contém as classes relacionadas ao tratamento de exceções. Aqui você pode criar exceções personalizadas e lidar com erros globais, como respostas personalizadas para códigos de erro HTTP.
-
model/: Armazena as classes que representam os modelos de dados (entidades). Essas classes geralmente são mapeadas para tabelas de banco de dados e são usadas para persistência de dados com o JPA (Java Persistence API).
-
repository/: Contém as interfaces repository, que se comunicam diretamente com o banco de dados. Usando JPA, você pode definir métodos para realizar operações como salvar, atualizar, excluir ou consultar entidades no banco de dados.
-
security/: Contém as configurações e classes relacionadas à segurança da aplicação, como autenticação e autorização, usando OAuth2, JWT e outras estratégias de segurança.
-
service/: Contém as classes de service, responsáveis pela lógica de negócios. Essa camada realiza o processamento de dados e coordena as operações entre os repositórios e os controllers.
-
ReFoodsApplication.java: Classe principal da aplicação Spring Boot, contendo o método main. Esta é a classe que inicializa e configura o contexto da aplicação.
-
src/main/resources/: Armazena recursos não Java, como arquivos de configuração (application.properties ou application.yml), templates de e-mail, arquivos de mapeamento SQL e outros recursos que a aplicação pode precisar.
Este projeto está sob a licença MIT - veja o arquivo LICENSE.md para detalhes.
- Spring Boot
- PostgreSQL
- Firebase
- Todos os contribuidores e apoiadores do projeto ReFoods
Desenvolvido com ☕ e 💚 pela equipe ReFoods