Aplicación backend para gestionar una Film App con autenticación, roles, películas, favoritos, panel web y API REST documentada con Swagger.
El proyecto combina una interfaz web con EJS y una API construida con Express, usando PostgreSQL para usuarios/favoritos y MongoDB para almacenar películas.
- 🔐 Registro, login, logout y recuperación/cambio de contraseña.
- 👤 Gestión de perfil de usuario.
- 🛡️ Roles
useryadmin. - 🎥 Búsqueda y detalle de películas desde OMDb y MongoDB.
- ⭐ Gestión de películas favoritas.
- 🧑💼 Panel de administración para usuarios y películas.
- 📚 Documentación de API disponible con Swagger.
- 🧪 Tests con Jest.
- 🐳 Docker Compose para levantar PostgreSQL.
- 🟢 Node.js
- ⚡ Express 5
- 🖼️ EJS
- 🐘 PostgreSQL
- 🍃 MongoDB + Mongoose
- 🧩 Sequelize
- 🔑 JSON Web Token
- 🍪 Cookie Parser
- 📖 Swagger UI
- 🧪 Jest
- 🐳 Docker
.
├── src
│ ├── app.js # Configuración principal de Express
│ ├── server.js # Arranque del servidor
│ ├── config # Configuración de DB, cookies y Swagger
│ ├── controllers # Lógica de controladores web y API
│ ├── middlewares # Auth, roles y manejo de errores
│ ├── models # Modelos SQL y MongoDB
│ ├── public # Archivos estáticos
│ ├── routes # Rutas web y API
│ ├── services # Lógica de negocio e integraciones
│ ├── validators # Validaciones
│ └── views # Vistas EJS
├── test # Tests unitarios
├── create-tables.js # Script auxiliar para crear tablas SQL
├── docker-compose.yml # Servicio de PostgreSQL
├── package.json
└── README.md
Clona el repositorio e instala las dependencias:
npm installCrea un archivo .env en la raíz del proyecto con una configuración similar:
NODE_ENV=development
# PostgreSQL
DB_NAME=movie_app
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432
# MongoDB
MONGO_URI=mongodb://localhost:27017/filmapp
ACCESS_TOKEN_SECRET=tu_clave_secreta
OMDB_API_KEY=tu_api_key_de_omdb📌 Nota:
MONGO_URI,ACCESS_TOKEN_SECRETyOMDB_API_KEYson necesarios para que la app funcione correctamente.
El proyecto incluye un docker-compose.yml para levantar PostgreSQL:
docker compose up -dEsto crea un contenedor con:
- 🐘 Base de datos:
movie_app - 👤 Usuario:
postgres - 🔑 Password:
postgres - 🔌 Puerto:
5432
Para crear las tablas SQL con Sequelize:
node create-tables.jsnpm run devArranca el servidor en modo desarrollo con node --watch.
npm startArranca el servidor en modo normal.
npm testEjecuta los tests con Jest.
- 🏠
GET /- Página de inicio - 🔑
GET /login- Login - 📝
GET /signup- Registro - 📊
GET /dashboard- Dashboard privado - 👤
GET /profile- Perfil del usuario - 🎬
GET /movies- Listado/búsqueda de películas - 🎞️
GET /movies/:id- Detalle de película - ⭐
GET /favorites- Favoritos del usuario - 👥
GET /admin/users- Administración de usuarios - 🎥
GET /admin/movies- Administración de películas
Todas las rutas de API cuelgan de /api.
POST /api/auth/signupPOST /api/auth/loginPOST /api/auth/logoutPUT /api/auth/restorepassword
GET /api/usersPUT /api/usersGET /api/users/allPOST /api/usersPUT /api/users/:idDELETE /api/users/:id
GET /api/movies/randomGET /api/movies/searchGET /api/movies/search/:titleGET /api/moviesPOST /api/moviesPUT /api/movies/:idDELETE /api/movies/:id
GET /api/favoritesPOST /api/favoritesDELETE /api/favorites/:id
Con el servidor arrancado, la documentación de la API está disponible en:
http://localhost:3000/api/docs
Ejecuta la suite de tests con:
npm testActualmente el proyecto incluye tests para servicios y controladores de películas.
- 👤
user: puede acceder a películas, búsquedas y favoritos. - 🛡️
admin: puede gestionar usuarios y películas desde API y panel web.
Proyecto desarrollado como práctica de backend para una Film App.