Skip to content

mchapper/quarkus-kotlin-graalvm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API REST de Películas con Quarkus, Kotlin y GraalVM

Este proyecto es una API REST de demostración que utiliza Quarkus, Kotlin y GraalVM para crear un microservicio de gestión de películas.

🚀 Tecnologías Utilizadas

  • Quarkus: Framework Java nativo para la nube
  • Kotlin: Lenguaje de programación moderno y conciso
  • GraalVM: Máquina virtual de alto rendimiento
  • PostgreSQL: Base de datos relacional
  • Docker: Contenedorización de la aplicación
  • Hibernate ORM: Mapeo objeto-relacional
  • Panache: Simplificación del acceso a datos
  • Jackson: Serialización/deserialización JSON

📋 Prerrequisitos

  • Java 21 con GraalVM (recomendado GraalVM 21.0.7 o superior)
  • Docker y Docker Compose
  • Maven

🛠️ Configuración del Proyecto

  1. Clonar el repositorio:

    git clone [email protected]:mchapper/quarkus-kotlin-graalvm.git
    cd quarkus-kotlin-graalvm
  2. Compilar el proyecto:

    mvn clean package -Pnative -Dquarkus.native.container-build=true
  3. Iniciar los servicios con Docker Compose:

    docker-compose up --build

🌐 Estructura de la API

Endpoints Disponibles

Método Ruta Descripción
GET /api/movies Obtener todas las películas
GET /api/movies/{id} Obtener una película por ID
POST /api/movies Crear una nueva película
PUT /api/movies/{id} Actualizar una película existente
DELETE /api/movies/{id} Eliminar una película

Ejemplos de Uso

  1. Crear una película:

    curl -X POST http://localhost:8080/api/movies \
      -H "Content-Type: application/json" \
      -d '{
        "title": "Inception",
        "director": "Christopher Nolan",
        "year": 2010,
        "genre": "Sci-Fi"
      }'
  2. Listar todas las películas:

    curl http://localhost:8080/api/movies
  3. Obtener una película por ID:

    curl http://localhost:8080/api/movies/{id}
  4. Actualizar una película:

    curl -X PUT http://localhost:8080/api/movies/{id} \
      -H "Content-Type: application/json" \
      -d '{
        "title": "Inception",
        "director": "Christopher Nolan",
        "year": 2010,
        "genre": "Ciencia Ficción"
      }'
  5. Eliminar una película:

    curl -X DELETE http://localhost:8080/api/movies/{id}

📦 Estructura del Proyecto

src/
├── main/
│   ├── kotlin/
│   │   └── com/
│   │       └── movies/
│   │           └── api/
│   │               ├── MovieEntity.kt    # Entidad JPA
│   │               ├── MovieDTO.kt       # Objeto de transferencia de datos
│   │               ├── MovieRepository.kt # Repositorio Panache
│   │               ├── MovieService.kt   # Lógica de negocio
│   │               └── MovieResource.kt  # Endpoints REST
│   └── resources/
│       └── application.properties        # Configuración
└── test/
    └── kotlin/
        └── com/
            └── movies/
                └── api/
                    ├── MovieResourceTest.kt  # Tests de endpoints REST
                    └── MovieServiceTest.kt   # Tests de lógica de negocio

🔧 Configuración

Base de Datos

La aplicación utiliza PostgreSQL con las siguientes configuraciones por defecto:

  • Host: localhost
  • Puerto: 5432
  • Base de datos: movies
  • Usuario: postgres
  • Contraseña: postgres

Docker

El proyecto incluye un docker-compose.yml que configura:

  • Servicio PostgreSQL
  • Servicio de la aplicación Quarkus
  • Volumen persistente para la base de datos

🚀 Despliegue

  1. Compilar la aplicación nativa:

    mvn clean package -Pnative -Dquarkus.native.container-build=true
  2. Iniciar los servicios:

    docker-compose up --build

La aplicación estará disponible en http://localhost:8080

🧪 Tests Unitarios

El proyecto incluye tests unitarios para validar la funcionalidad de la API. Los tests están escritos usando JUnit 5 y MockK para el mocking.

Ejecutar los Tests

Para ejecutar los tests unitarios:

mvn clean test

Reporte de Cobertura

El proyecto utiliza JaCoCo para generar reportes de cobertura de código. Después de ejecutar los tests, puedes encontrar el reporte en:

target/site/jacoco/index.html

Estructura de Tests

Los tests están organizados en:

  • MovieResourceTest: Tests para los endpoints REST
  • MovieServiceTest: Tests para la lógica de negocio

Ejecutar Tests con Cobertura

Para ejecutar los tests y generar el reporte de cobertura:

mvn clean test jacoco:report

🛑 Detener y Limpiar

Para detener y eliminar todos los contenedores, volúmenes y redes creados por docker-compose:

docker-compose down -v

Este comando:

  • Detiene todos los contenedores
  • Elimina los contenedores
  • Elimina los volúmenes (incluyendo la base de datos)
  • Elimina las redes creadas

Si solo quieres detener los contenedores sin eliminar los volúmenes (para mantener los datos de la base de datos):

docker-compose down

📝 Notas Adicionales

  • La aplicación utiliza carga perezosa (lazy loading) para las entidades
  • Los DTOs están configurados para serialización/deserialización JSON
  • La base de datos se inicializa automáticamente al primer inicio
  • Los logs están configurados para mostrar información detallada

🤝 Contribución

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE.md para más detalles.

About

Este proyecto es una API REST de demostración que utiliza Quarkus, Kotlin y GraalVM para crear un microservicio de gestión de películas.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages