Uma aplicação web completa para catalogar filmes, séries e livros que você já consumiu ou pretende consumir.
- Adicionar Mídia: Cadastre novos itens especificando título, tipo, status e nota
- Visualizar Acervo: Liste todos os itens cadastrados com suas informações
- Atualizar Mídia: Edite informações de qualquer item (status, nota, etc.)
- Deletar Mídia: Remova itens do seu acervo
- Filtros: Filtre por tipo (Livro, Filme, Série) e status (Quero Ver/Ler, Já Vi/Li)
- Framework: FastAPI (Python)
- Banco de Dados: SQLite
- ORM: SQLAlchemy
- Validação: Pydantic
- Porta: 8000
- Framework: React.js
- Build Tool: Vite
- HTTP Client: Axios
- Porta: 5173
- API REST com troca de dados em formato JSON
- CORS configurado para permitir comunicação entre frontend e backend
meu-acervo/
├── backend/
│ ├── main.py # Aplicação FastAPI principal
│ ├── database.py # Configuração do banco de dados
│ ├── models.py # Modelos SQLAlchemy
│ ├── schemas.py # Schemas Pydantic
│ ├── crud.py # Operações CRUD
│ ├── requirements.txt # Dependências Python
│ └── meu_acervo.db # Banco de dados SQLite
│
└── frontend/
├── src/
│ ├── components/ # Componentes React
│ │ ├── FormularioMidia.jsx
│ │ ├── ListaMidias.jsx
│ │ ├── MidiaCard.jsx
│ │ └── Filtros.jsx
│ ├── App.jsx # Componente principal
│ ├── api.js # Cliente API
│ ├── main.jsx # Entry point
│ └── index.css # Estilos globais
├── index.html
├── package.json
└── vite.config.js
- Navegue até a pasta do backend:
cd backend- Instale as dependências:
pip3 install -r requirements.txt- Inicie o servidor:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload- Acesse a documentação interativa da API:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- Navegue até a pasta do frontend:
cd frontend- Instale as dependências:
pnpm install- Inicie o servidor de desenvolvimento:
pnpm dev- Acesse a aplicação em: http://localhost:5173
GET /midias- Listar todas as mídiasGET /midias/{id}- Buscar mídia por IDPOST /midias- Criar nova mídiaPUT /midias/{id}- Atualizar mídiaDELETE /midias/{id}- Deletar mídia
GET /midias/tipo/{tipo}- Buscar por tipo (Livro, Filme, Série)GET /midias/status/{status}- Buscar por status
GET /health- Verificar status da API
{
"id": int, # ID único (gerado automaticamente)
"titulo": str, # Título da mídia
"tipo": "Livro" | "Filme" | "Série", # Tipo da mídia
"status": "Quero Ver/Ler" | "Já Vi/Li", # Status de consumo
"nota": int | null # Nota de 1 a 5 estrelas (opcional)
}- Design Responsivo: Funciona em desktop e mobile
- Interface Intuitiva: Cores e ícones diferenciados por tipo de mídia
- Feedback Visual: Animações e transições suaves
- Validação de Formulários: Validação em tempo real
- Sistema de Filtros: Filtre por tipo e status simultaneamente
- Python 3.11
- FastAPI 0.104.1
- SQLAlchemy 2.0.23
- Pydantic 2.5.0
- Uvicorn 0.24.0
- React 18.2.0
- Vite 5.0.0
- Axios 1.6.0
- CSS3 (com gradientes e animações)
curl -X POST "http://localhost:8000/midias" \
-H "Content-Type: application/json" \
-d '{
"titulo": "O Senhor dos Anéis",
"tipo": "Livro",
"status": "Já Vi/Li",
"nota": 5
}'curl http://localhost:8000/midiascurl -X PUT "http://localhost:8000/midias/1" \
-H "Content-Type: application/json" \
-d '{
"status": "Já Vi/Li",
"nota": 4
}'curl -X DELETE "http://localhost:8000/midias/1"- Adicionar campo de comentários/resenhas
- Implementar busca por título
- Adicionar data de conclusão
- Implementar autenticação de usuários
- Adicionar paginação na listagem
- Integração com APIs externas (TMDB, Google Books)
- Exportar acervo para CSV/PDF
- Dark mode
Este projeto foi criado para fins educacionais.
Paloma Cordeiro
Projeto desenvolvido como exemplo de aplicação full-stack com Python, FastAPI e React.