Una aplicación REST API robusta creada con Spring Boot para gestionar contenido audiovisual, utilizando Azure SQL Database o PostgreSQL.
- 🚀 Descripción
- 🛠️ Tecnologías Utilizadas
- 📂 Estructura del Proyecto
- 📦 Dependencias Principales
- 🔧 Configuración de Entorno
- 🏗️ Creación de la Infraestructura
- 💥 Destrucción de la Infraestructura
- 🚀 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 sus perfiles
- Explorar un catálogo extenso de películas y series
- Agregar contenido a listas personalizadas
- Marcar contenido como visto o no visto
- Recibir recomendaciones personalizadas basadas en sus preferencias
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.
- 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/
│ │ ├── controller/
| | ├── dto/
| | ├── config/
│ │ ├── exceptions/
│ │ ├── model/
│ │ ├── repository/
│ │ ├── service/
│ │ └── FilmhubApplication.java
│ └── resources/
│ ├── static/
│ ├── templates/
│ ├── application-dev.properties
│ ├── application-pdn.properties
│ └── application.properties
└── test/
(🚧 Por actualizar)
Nota: Poner la carpeta de los dtos y config.
controller/
: Controladores REST que manejan las peticiones HTTP y definen los endpoints de la API.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.exceptions/
: Manejo personalizado de excepciones.resources/
: Archivos de configuración y recursos estáticos.test/
: Pruebas unitarias e integración.
(🚧 Por actualizar)
- Spring Boot Starter Web: Configuración para aplicaciones web y REST.
- Spring Boot Starter Data JPA: Integración con JPA y Hibernate.
- Microsoft SQL Server JDBC Driver: Conector para Azure SQL Database.
- PostgreSQL Driver: Conector para PostgreSQL.
- Lombok(🚧 Por implementar): Reduce el boilerplate en el código Java.
- Spring Boot Starter Test: Soporte para pruebas unitarias e integración.
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"
export AZ_RESOURCE_GROUP=filmhub-backend
export AZ_DATABASE_NAME=filmhub-server
export AZ_LOCATION=australiaeast
export AZ_SQL_SERVER_USERNAME=spring
export AZ_SQL_SERVER_PASSWORD=XXXXXXXXXXXXXXXXXX
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://api.ipify.org)
export SPRING_DATASOURCE_URL="jdbc:sqlserver://$AZ_DATABASE_NAME.database.windows.net:1433;database=demo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
export SPRING_DATASOURCE_USERNAME=spring@$AZ_DATABASE_NAME
export SPRING_DATASOURCE_PASSWORD=$AZ_SQL_SERVER_PASSWORD
- Configura un
AZ_DATABASE_NAME
único y unaAZ_SQL_SERVER_PASSWORD
segura.
- 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
Para Azure SQL Database:
az login
az extension add --name serviceconnector-passwordless --upgrade
source env.sh
./create-spring-data-jpa-sql-server.sh
Crear usuario no administrador:
az connection create sql \
--resource-group $AZ_RESOURCE_GROUP \
--connection sql_conn \
--target-resource-group $AZ_RESOURCE_GROUP \
--server $AZ_DATABASE_NAME \
--database demo \
--user-account \
--query authInfo.userName \
--output tsv
Para eliminar la infraestructura de Azure:
./destroy-spring-data-jpa-sql-server.sh
./mvnw clean install
./mvnw spring-boot:run
O usa el botón para abrir en GitHub Codespaces y ejecutalos para trabajar con PostgreSQL:
Nota: Si desea usar swagger en codespaces cambien lo siguiente en 'application-dev.properties'
swagger.server.url=https://la-url-de-su-codespace-8080.app.github.dev/api
Ademas ponga el puerto 8080 en "Publico" y en "http".
Ejecuta las pruebas con:
./mvnw test
(🚧 En desarrollo)
Todos los endpoints inician con ´/api´:
Método | Endpoint | Descripción |
---|---|---|
GET | /contenidos |
Obtiene todos los contenidos |
GET | /contenidos/{id} |
Obtiene un contenido por ID |
POST | /contenidos |
Crea un nuevo contenido |
DELETE | /contenidos/{id} |
Elimina un contenido por ID |
GET | /contenidos/usuario/{usuarioId} |
Obtiene los contenidos de un usuario |
POST | /contenidousuario |
Añade un contenido a un usuario |
DELETE | /contenidousuario/{id} |
Elimina la relación de un contenido con un usuario |
GET | /usuarios |
Obtiene todos los usuarios |
POST | /usuarios |
Crea un nuevo usuario |
GET | /usuarios/correo/{correo} |
Obtiene un usuario por correo |
GET | /usuarios/{id} |
Obtiene un usuario por ID |
DELETE | /usuarios/{id} |
Elimina un usuario por ID |
GET | /saludar |
Saluda con "Hola Mundo!" |
(🚧 En desarrollo)
- 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.).
Desarrollado con ❤️ por el equipo de Filmhub