Skip to content

webtech-network/lab-software-engineering-spring-boot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 

Repository files navigation

RateHub

Descubra, avalie e organize seus lugares favoritos em um só lugar.

Uma aplicação full-stack moderna para cadastrar, avaliar e gerenciar cafeterias, restaurantes, bares e outros estabelecimentos. Perfeita para aprender integração frontend-backend com as melhores práticas do mercado.


🛠️ Tecnologias

Frontend

React TypeScript Vite Tailwind CSS TanStack Query

Principais bibliotecas:

  • Radix UI: Componentes acessíveis e sem estilo
  • React Router: Roteamento lado do cliente
  • Axios: Cliente HTTP
  • Zod: Validação de schemas
  • Sonner: Notificações estilosas
  • Lucide React: Ícones SVG
  • React Hook Form: Gerenciamento de formulários

Backend

Java Spring Boot Maven H2 Database

Principais dependências:

  • Spring Web: REST APIs
  • Spring Data JPA: Acesso ao banco de dados
  • Lombok: Reduz boilerplate
  • Validation: Validação de dados
  • Cloudinary: Armazenamento de imagens

📋 Pré-requisitos

  • Node.js 18+ e npm
  • Java 21+
  • Conta Cloudinary (gratuita) para upload de imagens

🚀 Como rodar

Backend

1. Configurar variáveis de ambiente

Crie o arquivo server/src/main/resources/application-local.properties:

# Cloudinary
cloudinary.cloud-name=seu_cloud_name
cloudinary.api-key=sua_api_key
cloudinary.api-secret=seu_api_secret

# H2 Database (configuração padrão para desenvolvimento)
spring.datasource.url=jdbc:h2:mem:ratehub
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Como obter as credenciais Cloudinary:

  1. Acesse cloudinary.com
  2. Crie uma conta gratuita
  3. Acesse o dashboard e copie: Cloud Name, API Key e API Secret

2. Iniciar o servidor

cd server

# Compilar e rodar com Maven
./mvnw spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=local"

# Ou compilar apenas
./mvnw clean package

# E rodar o JAR
java -jar target/rate-hub-0.0.1-SNAPSHOT.jar --spring.profiles.active=local

O backend estará disponível em: http://localhost:8080


Frontend

1. Criar arquivo .env

Na pasta client, crie o arquivo .env baseado no .env.example:

cd client
cp .env.example .env

Se o arquivo .env.example não existir, crie manualmente client/.env com o seguinte conteúdo:

VITE_API_URL=http://localhost:8080

2. Instalar dependências

npm install

3. Rodar em desenvolvimento

npm run dev

O frontend estará disponível em: http://localhost:5173

4. Compilar para produção

npm run build
npm run preview

📚 Estrutura do projeto

lab-software-engineering-spring-boot/
├── client/                          # Frontend React + TypeScript
│   ├── src/
│   │   ├── components/              # Componentes React reutilizáveis
│   │   ├── pages/                   # Páginas da aplicação
│   │   ├── lib/
│   │   │   ├── api.ts               # Funções de chamadas HTTP
│   │   │   ├── types.ts             # Tipos TypeScript
│   │   │   ├── schemas.ts           # Validação com Zod
│   │   │   └── axios.ts             # Configuração do axios
│   │   └── hooks/                   # Hooks customizados
│   ├── .env.example                 # Template de variáveis de ambiente
│   └── package.json
│
├── server/                          # Backend Spring Boot
│   ├── src/main/java/network/webtech/rate_hub/
│   │   ├── controller/              # Controladores REST
│   │   ├── service/                 # Lógica de negócio
│   │   ├── repository/              # Acesso ao banco de dados
│   │   ├── entity/                  # Modelos JPA
│   │   ├── dto/                     # Data Transfer Objects
│   │   └── config/                  # Configurações
│   ├── src/main/resources/
│   │   └── application-local.properties  # Variáveis locais
│   └── pom.xml                      # Dependências Maven
│
└── README.md                        # Este arquivo

🎯 Fluxo da aplicação

  1. Frontend: Usuário interage com a interface em React
  2. Axios: Frontend faz requisições HTTP para o backend
  3. Spring Boot: Backend processa requisições e acessa o banco
  4. Banco de dados: Persiste os dados dos lugares
  5. Cloudinary: Armazena imagens enviadas pelo usuário

📖 Workshop

Se está participando do workshop, consulte o arquivo client/docs/INTEGRACAO.md para um guia passo a passo sobre como implementar a integração frontend-backend.


🔗 APIs disponíveis

O backend expõe os seguintes endpoints:

Método Endpoint Descrição
GET /places Listar todos os lugares
GET /places/{id} Buscar um lugar pelo ID
GET /places/favorites Listar apenas favoritos
POST /places Cadastrar novo lugar
PUT /places/{id} Atualizar lugar
PATCH /places/{id}/favorite Alternar favorito
DELETE /places/{id} Excluir lugar

📝 Licença

Este projeto é fornecido como material educacional.


🤝 Contribuindo

Feedbacks e sugestões são bem-vindos! Sinta-se livre para abrir issues ou pull requests.


Desenvolvido com ❤️ para ensinar integração frontend-backend moderna

About

Hands-on laboratory for the 10th anniversary of Software Engineering, focused on API development with Spring Boot, React integration, and cloud image storage.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors