API RESTful para sistema de reserva de ingressos do cinema Cinepolis Natal.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CineReserve API β
ββββββββββββββββ¬βββββββββββββββ¬ββββββββββββββββββββββββββββ€
β users β movies β reservations β
β Registro β Filmes β Reservar Assento β
β Login JWT β Sessoes β Checkout β
β Perfil β Mapa Asst. β Meus Ingressos β
ββββββββ¬ββββββββ΄βββββββ¬ββββββββ΄βββββββββββ¬βββββββββββββββββ
β β β
ββββββββΌβββββββ βββββββΌβββββββ ββββββββββΌβββββββββββββββββ
β PostgreSQL β β Redis β β Celery β
β (banco) β β (locks + β β - Auto-release locks β
β β β cache) β β - Email confirmacao β
βββββββββββββββ ββββββββββββββ βββββββββββββββββββββββββββ
| Camada | Tecnologia |
|---|---|
| Linguagem | Python 3.12+ |
| Framework | Django 6 + Django REST Framework |
| Autenticacao | JWT (djangorestframework-simplejwt) |
| Banco de Dados | PostgreSQL 16 |
| Cache / Lock Distribuido | Redis 7 |
| Tarefas Assincronas | Celery |
| Mailtrap (SMTP Sandbox) | |
| Documentacao | Swagger (drf-spectacular) |
| Testes | pytest + pytest-django |
| Containers | Docker + Docker Compose |
| CI/CD | GitHub Actions |
- API RESTful com Django REST Framework e Poetry
- Autenticacao JWT
- Banco de dados PostgreSQL
- Redis como distributed lock para reservas temporarias
- Cache Redis nos endpoints de alta leitura (filmes e sessoes)
- Paginacao em todos os endpoints de listagem
- Testes unitarios e de integracao (9/9 passando)
- Documentacao Swagger em
/api/docs/ - Docker + Docker Compose
- Repositorio publico no GitHub
- Cadastro e login com JWT
- Listagem de filmes disponiveis
- Listagem de sessoes por filme
- Mapa de assentos em tempo real (disponivel, reservado, comprado)
- Lock distribuido de 10 minutos por assento via Redis
- Checkout e geracao de ingresso digital unico
- Portal "Meus Ingressos" com historico completo
- Rate limiting nos endpoints de autenticacao
- Celery para liberacao automatica de locks expirados
- Celery para envio de email de confirmacao apos checkout
- Pipeline CI/CD com GitHub Actions
- Health check endpoint
- Seed de dados de exemplo
- Tratamento global de erros padronizado
- Docker Desktop instalado e rodando
- Python 3.12+
- Poetry
git clone https://github.com/Oskar-Fernandes/cinereserve.git
cd cinereservecp .env.example .envEdite o .env com suas credenciais se necessario.
poetry installdocker compose up -d db redispoetry run python manage.py migratepoetry run python manage.py seedpoetry run python manage.py createsuperuserpoetry run python manage.py runserverAcesse: http://localhost:8000/api/docs/
| URL | Descricao |
|---|---|
| http://localhost:8000/api/docs/ | Swagger UI |
| http://localhost:8000/api/health/ | Health Check |
| http://localhost:8000/admin/ | Painel Admin |
| Metodo | Endpoint | Descricao | Auth |
|---|---|---|---|
| POST | /api/users/register/ |
Cadastrar usuario | Nao |
| POST | /api/users/login/ |
Login (retorna JWT) | Nao |
| POST | /api/users/token/refresh/ |
Renovar token | Nao |
| GET | /api/users/profile/ |
Ver perfil | Sim |
| Metodo | Endpoint | Descricao | Auth |
|---|---|---|---|
| GET | /api/movies/ |
Listar filmes | Nao |
| GET | /api/movies/{id}/ |
Detalhe do filme | Nao |
| GET | /api/movies/{id}/sessions/ |
Sessoes do filme | Nao |
| GET | /api/movies/sessions/{id}/seats/ |
Mapa de assentos | Sim |
| Metodo | Endpoint | Descricao | Auth |
|---|---|---|---|
| POST | /api/reservations/sessions/{s}/seats/{s}/reserve/ |
Reservar assento (lock 10min) | Sim |
| POST | /api/reservations/sessions/{s}/seats/{s}/checkout/ |
Finalizar e gerar ingresso | Sim |
| GET | /api/reservations/my-tickets/ |
Meus ingressos | Sim |
| Metodo | Endpoint | Descricao | Auth |
|---|---|---|---|
| GET | /api/health/ |
Status da API | Nao |
| GET | /api/docs/ |
Documentacao Swagger | Nao |
1. POST /api/users/login/ β Obter token JWT
2. GET /api/movies/ β Listar filmes
3. GET /api/movies/{id}/sessions/ β Ver sessoes disponiveis
4. GET /api/movies/sessions/{id}/seats/ β Ver mapa de assentos
5. POST /api/reservations/.../reserve/ β Reservar assento (lock 10min)
6. POST /api/reservations/.../checkout/ β Finalizar compra + email
7. GET /api/reservations/my-tickets/ β Ver ingressos
Abra no navegador: http://localhost:8000/api/docs/
Clique em POST /api/users/register/ > Try it out > cole o body abaixo > Execute:
{
"username": "teste",
"email": "teste@email.com",
"password": "senha123"
}Clique em POST /api/users/login/ > Try it out > cole o body abaixo > Execute:
{
"email": "teste@email.com",
"password": "senha123"
}Na resposta, copie o valor do campo "access" (o token JWT).
Clique no botao "Authorize" no canto superior direito da pagina. Cole APENAS o token no campo Value (sem a palavra Bearer). Clique em Authorize e depois em Close.
- GET /api/movies/ - Liste os filmes
- GET /api/movies/1/sessions/ - Veja as sessoes do filme 1
- GET /api/movies/sessions/1/seats/ - Veja o mapa de assentos
- POST /api/reservations/sessions/1/seats/2/reserve/ - Reserve o assento 2
- POST /api/reservations/sessions/1/seats/2/checkout/ - Finalize a compra
- GET /api/reservations/my-tickets/ - Veja seus ingressos
poetry run pytest# Iniciar todos os servicos
docker compose up -d
# Parar todos os servicos
docker compose down
# Ver logs
docker compose logs -fcinereserve/
βββ core/ # Configuracoes Django, URLs, Celery
β βββ settings.py
β βββ urls.py
β βββ celery.py
β βββ exceptions.py
β βββ views.py
βββ users/ # Cadastro e autenticacao
βββ movies/ # Filmes, sessoes e assentos
β βββ management/commands/ # Comando seed
βββ reservations/ # Reservas e ingressos
βββ .github/workflows/ci.yml # CI/CD GitHub Actions
βββ docker-compose.yml
βββ Dockerfile
βββ pyproject.toml
βββ .env.example
- JWT com expiracao de 1 hora (refresh de 7 dias)
- Rate limiting: 5 req/min no registro, 10 req/min no login
- Variaveis sensiveis isoladas no
.env .envnunca commitado no repositorio '@ | Set-Content README.md -Encoding UTF8