Una aplicación REST API robusta creada con Spring Boot para gestionar contenido audiovisual, utilizando Azure SQL Database o PostgreSQL.
- 🚀 Descripción
- 🌐 Proyecto Frontend
- 🛠️ Tecnologías Utilizadas
- 📂 Estructura del Proyecto
- 📦 Dependencias Principales
- 🔧 Configuración de Entorno
- 🚀 Compilación y Ejecución del Proyecto
- 🧪 Pruebas
- 📡 Endpoints
- 🤝 Contribuir
- 🔒 Seguridad
- 📄 Licencia
Filmhub es una aplicación backend diseñada para ofrecer una experiencia completa en la gestión de contenido audiovisual. Permite a los usuarios:
- Registrarse y gestionar su perfil.
- Explorar un catálogo extenso de películas y series.
- Agregar contenido a su biblioteca.
- Marcar contenido como visto o no visto.
- Recibir recomendaciones personalizadas basadas en sus preferencias o contenido agregado a su biblioteca.
Esta API RESTful proporciona la base para construir aplicaciones frontend robustas y escalables en el dominio del streaming y la gestión de contenido multimedia.
Este proyecto cuenta con una parte frontend desarrollada en React que consume esta API. Puedes encontrar el repositorio del frontend en el siguiente enlace:
El frontend proporciona una interfaz de usuario intuitiva y amigable para interactuar con la API de Filmhub, permitiendo a los usuarios explorar y gestionar contenido audiovisual de manera eficiente.
- 🔑 Registro y login de usuario a través de Google
- 🔒 Manejo de login en toda la página
- 🎬 Exploración de un catálogo extenso de películas y series de API externa y este backend
- 📋 Creación de listas personalizadas
- ⭐ Recomendaciones personalizadas basadas en las preferencias del usuario o contenido agregado a la lista propia del usuario
Para más detalles sobre cómo configurar y ejecutar el proyecto frontend, consulta el README del repositorio.
- Spring Boot: Framework Java para desarrollo rápido de aplicaciones con configuración mínima.
- Spring Data JPA: Simplifica el acceso a datos utilizando el estándar JPA con Hibernate.
- Azure SQL Database: Base de datos relacional en la nube, totalmente administrada y con alta disponibilidad.
- PostgreSQL: Sistema de gestión de bases de datos relacional de código abierto.
- Maven: Herramienta de gestión y construcción de proyectos Java.
- Postman: Plataforma de colaboración para el desarrollo de API.
- GitHub Codespaces: Entorno de desarrollo en la nube integrado con GitHub.
- Azure CLI: Interfaz de línea de comandos para gestionar recursos de Azure.
La estructura del proyecto sigue las mejores prácticas de Spring Boot, dividiendo la lógica en capas como controladores, modelos, repositorios, y más.
src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── udea/
│ │ └── filmhub/
│ │ ├── config/
│ │ ├── controller/
| | ├── dto/
│ │ ├── exceptions/
│ │ ├── model/
│ │ ├── repository/
│ │ ├── service/
│ │ └── FilmhubApplication.java
│ └── resources/
│ ├── static/
│ ├── templates/
│ ├── application-dev.properties
│ ├── application-pdn.properties
│ └── application.properties
└── test/
config/
: Configuraciones de la aplicación, como seguridad, CORS, y otros ajustes específicos.controller/
: Controladores REST que manejan las peticiones HTTP y definen los endpoints de la API.dto/
: Objetos de transferencia de datos utilizados para mover datos entre las capas de la aplicación.exceptions/
: Manejo personalizado de excepciones.model/
: Entidades JPA que representan las tablas en la base de datos.repository/
: Interfaces que extiendenJpaRepository
para operaciones CRUD.service/
: Implementación de la lógica de negocio.resources/
: Archivos de configuración y recursos estáticos.test/
: Pruebas unitarias e integración.
- Spring Boot Starter Web: Proporciona las bibliotecas necesarias para construir aplicaciones web y RESTful.
- Spring Boot Starter Data JPA: Integración con JPA e Hibernate.
- Microsoft SQL Server JDBC Driver: Conector para Azure SQL Database.
- PostgreSQL Driver: Conector para PostgreSQL.
- Spring Boot Starter Data JDBC: Proporciona soporte para JDBC, simplificando el acceso a bases de datos relacionales.
- Spring Cloud Azure Starter: Proporciona integración con los servicios de Azure
- Spring Boot Starter Test: Soporte para pruebas unitarias e integración.
- Springdoc OpenAPI Starter WebMVC UI:Proporciona integración con OpenAPI para la documentación de la API.
- Jackson Datatype JSR310: Añade soporte para tipos de datos de Java 8 y manejo de json.
Clona el repositorio:
git clone https://github.com/RickContreras/FilmHub-backend.git
cd FilmHub-backend
- Crea un archivo
env.sh
:
#!/bin/sh
echo "Estableciendo variables de entorno"
# Nombre del grupo de recursos en Azure
export AZ_RESOURCE_GROUP=filmhub
# Nombre del servidor de la base de datos en Azure
export AZ_DATABASE_SERVER_NAME=servidorfilmhub
# Nombre de la base de datos en Azure
export AZ_DATABASE_NAME=demo
# Ubicación de la base de datos en Azure
export AZ_LOCATION=australiaeast
# Nombre de usuario para la base de datos SQL en Azure
export AZ_SQL_SERVER_USERNAME=spring
# Contraseña para la base de datos SQL en Azure
export AZ_SQL_SERVER_PASSWORD=XXXXXXXXXXX
# Obtener la dirección IP local
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://api.ipify.org)
# Nombre de usuario para la fuente de datos de Spring
export SPRING_DATASOURCE_USERNAME=$AZ_SQL_SERVER_USERNAME@$AZ_DATABASE_SERVER_NAME
# Contraseña para la fuente de datos de Spring
export SPRING_DATASOURCE_PASSWORD=$AZ_SQL_SERVER_PASSWORD
# URL de la fuente de datos de Spring
export SPRING_DATASOURCE_URL="jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;database=$AZ_DATABASE_NAME;user=$SPRING_DATASOURCE_USERNAME;password=$SPRING_DATASOURCE_PASSWORD;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
- Configura un
AZ_DATABASE_NAME
único y unaAZ_SQL_SERVER_PASSWORD
segura.
Para Azure SQL Database:
az login
source env.sh
./deploy-database.sh
Para eliminar la infraestructura de Azure:
./destroy-all.sh
- Instala y configura PostgreSQL.
- Crea la base de datos:
CREATE DATABASE filmhub;
- Configura
src/main/resources/application-dev.properties
:
spring.datasource.url=jdbc:postgresql://localhost:5432/filmhub
spring.datasource.username=tu_usuario
spring.datasource.password=tu_contraseña
./mvnw clean install
./mvnw spring-boot:run
O usa el botón para abrir en GitHub Codespaces y ejecutalos para trabajar con PostgreSQL:
- Para usar Swagger en Codespaces, realice los siguientes cambios en
application-dev.properties
:
swagger.server.url=https://la-url-de-su-codespace-8080.app.github.dev/api
Además, asegúrese de configurar el puerto 8080 como "Público" y en "http".
- Si está trabajando con variables de entorno, se tiene que ejecutar las variables de entorno cada vez que se vuelva activar el codespace.
source env.sh
Ejecuta las pruebas con:
./mvnw test
🚧 En desarrollo
Todos los endpoints inician con ´/api´:
Para ver el Swagger anterior con más detalle, use:
https://la-url/api/swagger-ui/index.html # o
https://la-url/api/swagger-ui.html
- Fork el repositorio
- Crea una nueva rama (
git checkout -b feature/nueva-funcionalidad
) - Realiza tus cambios y haz commit (
git commit -am 'Añadir nueva funcionalidad'
) - Push a la rama (
git push origin feature/nueva-funcionalidad
) - Abre un Pull Request
Por favor, asegúrate de actualizar las pruebas según sea necesario y sigue nuestro código de conducta.
Actualmente, este proyecto no implementa medidas de seguridad. Para un entorno de producción, se recomienda integrar:
- Spring Security para autenticación y autorización.
- JWT para manejo de tokens de sesión.
- HTTPS para encriptación de datos en tránsito.
- Implementar buenas prácticas como validación de entrada, manejo seguro de errores, y protección contra ataques comunes (CSRF, XSS, etc.).
(🚧 En desarrollo)
Desarrollado con ❤️ por el equipo de Filmhub