Skip to content

FilmHub es una aplicación backend desarrollada en Java con Spring Boot que proporciona una API RESTful para gestionar una base de datos de contenido audiovisual.

License

Notifications You must be signed in to change notification settings

RickContreras/FilmHub-backend

Repository files navigation

📽️ Filmhub - Backend

Licencia: GPL v3 Java Spring Boot Spring Data JPA PostgreSQL Maven Codespaces Azure Azure SQL Database

Una aplicación REST API robusta creada con Spring Boot para gestionar contenido audiovisual, utilizando Azure SQL Database o PostgreSQL.

📑 Tabla de Contenidos

🚀 Descripción

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.

🛠️ Tecnologías Utilizadas

  • 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.

📂 Estructura del Proyecto

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.

📂 Descripción de carpetas

  1. controller/: Controladores REST que manejan las peticiones HTTP y definen los endpoints de la API.
  2. model/: Entidades JPA que representan las tablas en la base de datos.
  3. repository/: Interfaces que extienden JpaRepository para operaciones CRUD.
  4. service/: Implementación de la lógica de negocio.
  5. exceptions/: Manejo personalizado de excepciones.
  6. resources/: Archivos de configuración y recursos estáticos.
  7. test/: Pruebas unitarias e integración.

(🚧 Por actualizar)

📦 Dependencias Principales

  • 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.

🔧 Configuración de Entorno

Clona el repositorio:

    git clone https://github.com/RickContreras/FilmHub-backend.git
    cd FilmHub-backend

Azure SQL Database

  1. 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
  1. Configura un AZ_DATABASE_NAME único y una AZ_SQL_SERVER_PASSWORD segura.

PostgreSQL

  1. Instala y configura PostgreSQL.
  2. Crea la base de datos:
CREATE DATABASE filmhub;
  1. 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

🏗️ Creación de la Infraestructura

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

💥 Destrucción de la Infraestructura

Para eliminar la infraestructura de Azure:

./destroy-spring-data-jpa-sql-server.sh

🚀 Compilación y Ejecución del Proyecto

./mvnw clean install
./mvnw spring-boot:run

O usa el botón para abrir en GitHub Codespaces y ejecutalos para trabajar con PostgreSQL:

Abrir en Codespaces

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".

🧪 Pruebas

Ejecuta las pruebas con:

./mvnw test

(🚧 En desarrollo)

📡 Endpoints

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)

🤝 Contribuir

  1. Fork el repositorio
  2. Crea una nueva rama (git checkout -b feature/nueva-funcionalidad)
  3. Realiza tus cambios y haz commit (git commit -am 'Añadir nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abre un Pull Request

Por favor, asegúrate de actualizar las pruebas según sea necesario y sigue nuestro código de conducta.

🔒 Seguridad

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

About

FilmHub es una aplicación backend desarrollada en Java con Spring Boot que proporciona una API RESTful para gestionar una base de datos de contenido audiovisual.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks