API REST completa para gerenciamento de filmes com documentação Swagger, banco de dados PostgreSQL e TypeScript
MovieFlix API é uma aplicação backend robusta que permite criar, listar, atualizar e deletar filmes, além de filtrar por gênero. Ideal para integração com aplicações frontend de catálogos de filmes, sistemas de recomendação ou plataformas de streaming.
- Node.js - Runtime JavaScript
- TypeScript 5.8.3 - Tipagem estática e melhor desenvolvimento
- Express 4.21.2 - Framework web minimalista
- PostgreSQL 15 - Banco de dados relacional
- Prisma 6.8.2 - ORM moderno para TypeScript/Node.js
- PgAdmin 4 - Interface gráfica para gerenciamento do banco
- Swagger UI Express 5.0.1 - Interface interativa para documentação da API
- OpenAPI 3.0 - Especificação padrão para APIs RESTful
- Docker Compose - Orquestração de containers
- TSX 4.19.4 - Execução e watch de arquivos TypeScript
- Prettier 3.5.3 - Formatação de código
Cliente → Express API → Prisma ORM → PostgreSQL
↓
Swagger Docs (/docs)
- ✅ CRUD Completo de Filmes: Criar, listar, atualizar e deletar filmes
- ✅ Filtro por Gênero: Busca de filmes por nome do gênero
- ✅ Validação de Duplicatas: Impede cadastro de filmes com títulos duplicados (case-insensitive)
- ✅ Relações de Dados: Suporte a gêneros e idiomas
- ✅ Documentação Interativa: Interface Swagger para testar endpoints
- ✅ Banco de Dados Dockerizado: PostgreSQL e PgAdmin em containers
- ✅ TypeScript Strict: Código fortemente tipado
- ✅ API RESTful: Seguindo boas práticas HTTP
movieflix-api/
├── src/
│ └── server.ts # Arquivo principal da aplicação
├── dist/ # Código compilado (gerado)
├── data/ # Volumes Docker (gitignored)
│ ├── postgres/ # Dados do PostgreSQL
│ └── pgadmin/ # Configurações do PgAdmin
├── prisma/
│ └── schema.prisma # Schema do banco de dados
├── swagger.json # Documentação OpenAPI
├── docker-compose.yml # Configuração dos containers
├── tsconfig.json # Configuração TypeScript
├── .prettierrc.json # Configuração Prettier
├── package.json # Dependências e scripts
└── LICENSE # Licença MIT
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/movies |
Lista todos os filmes |
POST |
/movies |
Cadastra um novo filme |
PUT |
/movies/:id |
Atualiza um filme existente |
DELETE |
/movies/:id |
Remove um filme |
GET |
/movies/:genreName |
Filtra filmes por gênero |
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/docs |
Interface Swagger interativa |
git clone https://github.com/alanborgesdev/movieflix-api.git
cd movieflix-apinpm installdocker-compose up -dIsso iniciará:
- PostgreSQL na porta
5432 - PgAdmin na porta
5050
- URL:
http://localhost:5050 - Email:
[email protected] - Senha:
password
Crie o arquivo .env na raiz do projeto:
DATABASE_URL="postgresql://user:password@localhost:5432/movieflix-db"Execute as migrations:
npx prisma migrate dev
npx prisma generatenpm run devnpm run build
npm start- API:
http://localhost:3000 - Documentação Swagger:
http://localhost:3000/docs
curl -X POST http://localhost:3000/movies \
-H "Content-Type: application/json" \
-d '{
"title": "Inception",
"genre_id": 1,
"language_id": 1,
"oscar_count": 4,
"release_date": "2010-07-16"
}'curl http://localhost:3000/moviescurl http://localhost:3000/movies/action| Campo | Tipo | Descrição |
|---|---|---|
| id | INTEGER | ID único (auto-incremento) |
| title | VARCHAR | Título do filme |
| genre_id | INTEGER | FK para tabela de gêneros |
| language_id | INTEGER | FK para tabela de idiomas |
| oscar_count | INTEGER | Quantidade de Oscars |
| release_date | DATE | Data de lançamento |
movies← N:1 →genresmovies← N:1 →languages
# Desenvolvimento com hot reload
npm run dev
# Build para produção
npm run build
# Executar versão compilada
npm start
# Formatar código
npx prettier --write .
# Prisma Studio (interface visual do banco)
npx prisma studioO projeto inclui configuração completa do Docker Compose:
services:
movieflix-postgres:
- PostgreSQL 15
- Porta: 5432
- Banco: movieflix-db
movieflix-pgadmin:
- PgAdmin 4
- Porta: 5050
- Interface web para gerenciar o banco# Iniciar containers
docker-compose up -d
# Ver logs
docker-compose logs -f
# Parar containers
docker-compose down
# Parar e remover volumes (apaga dados)
docker-compose down -v- Validação de entrada de dados
- Prevenção de SQL Injection (via Prisma ORM)
- Tratamento de erros consistente
- Variáveis de ambiente para credenciais sensíveis
Contribuições são bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/NovaFuncionalidade) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/NovaFuncionalidade) - Abra um Pull Request
{
"id": 1,
"title": "Inception",
"genres": {
"name": "Action"
},
"languages": {
"name": "English"
},
"oscar_count": 4,
"release_date": "2010-07-16T00:00:00.000Z"
}Alan Borges
- GitHub: @alanborgesdev
- LinkedIn: linkedin.com/in/alanborgesdev
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com ❤️ por Alan Borges
⭐ Se este projeto foi útil, considere dar uma estrela!
