Skip to content

MenWic/AyD2.p2.iam_service_api

Repository files navigation

IAM Service API

Microservicio de autenticación, gestión de usuarios, roles básicos y validaciones de identidad para el ecosistema de microservicios del proyecto.

Este servicio expone endpoints de login, refresh token, logout, registro de participantes, consulta/gestión de usuarios y validación de elegibilidad para committee.

Requisitos

  • Java 21
  • PostgreSQL local o remoto
  • Gradle Wrapper incluido en el repo
  • Docker opcional, solo para ejecutar tests de persistencia con Testcontainers

Configuración local

Por defecto el servicio usa:

spring.application.name=iam-service
server.port=8081
spring.datasource.url=jdbc:postgresql://localhost:5432/iam_db
spring.datasource.username=iam_service_user
spring.datasource.password=iam_password

Variables recomendadas para ambientes reales:

SECURITY_JWT_SECRET=<secret-de-32+-caracteres>
SECURITY_JWT_EXPIRATION_MINUTES=15
SECURITY_JWT_REFRESH_EXPIRATION_DAYS=7

Para ejecución con Eureka:

EUREKA_SERVER_URL=http://localhost:8761/eureka/

Base de datos local

Crear la base de datos y usuario esperados por `application.properties

Luego, dentro de la base iam_db, asegurar permisos sobre el schema público.

Las migraciones se ejecutan con Flyway al arrancar el servicio.

Compilar

Windows:

.\gradlew clean compileJava

Linux/macOS:

./gradlew clean compileJava

Levantar el servicio individualmente

Usar este modo cuando se quiere ejecutar IAM solo (por desarrollo, debug, etc.), sin Eureka Server ni Gateway.

Windows:

.\gradlew bootRun

Linux/macOS:

./gradlew bootRun

URL base directa:

http://localhost:8081

En este modo Eureka queda deshabilitado por defecto:

eureka.client.enabled=false

Levantar el servicio como cliente Eureka

Usar este modo cuando ya esté levantado el Eureka Server y el servicio deba registrarse para ser consumido por el Gateway.

Orden recomendado:

1. Eureka Server
2. IAM Service con perfil discovery
3. API Gateway
4. Frontend / App

Windows:

.\gradlew bootRun --args="--spring.profiles.active=discovery"

Linux/macOS:

./gradlew bootRun --args="--spring.profiles.active=discovery"

Con variable explícita de Eureka:

Windows PowerShell:

$env:EUREKA_SERVER_URL="http://localhost:8761/eureka/"
.\gradlew bootRun --args="--spring.profiles.active=discovery"

Linux/macOS:

EUREKA_SERVER_URL=http://localhost:8761/eureka/ ./gradlew bootRun --args="--spring.profiles.active=discovery"

El perfil discovery usa:

eureka.client.enabled=true
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=${EUREKA_SERVER_URL:http://localhost:8761/eureka/}

IAM por ahora solo se registra en Eureka. No descubre ni llama otros microservicios desde este repo.

Tests

Ejecutar toda la suite:

Windows:

.\gradlew test

Linux/macOS:

./gradlew test

Si no hay Docker/Testcontainers disponible en local, ejecutar tests omitiendo Tests de persistencia:

Windows:

.\gradlew test -PskipPersistenceTests=true

Linux/macOS:

./gradlew test -PskipPersistenceTests=true

Los tests de persistencia usan PostgreSQL Testcontainers y requieren Docker activo.

Coverage con JaCoCo

Generar reporte local sin tests de persistencia:

Windows:

.\gradlew test jacocoTestReport jacocoTestCoverageVerification -PskipPersistenceTests=true

Linux/macOS:

./gradlew test jacocoTestReport jacocoTestCoverageVerification -PskipPersistenceTests=true

Quality gate completo, con Testcontainers activo:

Windows:

.\gradlew.bat test jacocoTestReport jacocoTestCoverageVerification

Linux/macOS:

./gradlew test jacocoTestReport jacocoTestCoverageVerification

Reportes generados:

build/reports/jacoco/test/html/index.html
build/reports/jacoco/test/jacocoTestReport.xml

OpenAPI / Swagger

Con el servicio levantado:

Swagger UI:

http://localhost:8081/swagger-ui.html

OpenAPI JSON:

http://localhost:8081/v3/api-docs

Los endpoints protegidos usan Bearer JWT. En Swagger UI se debe usar el botón Authorize y pegar el access token con formato Bearer.

Actuator

Endpoints habilitados:

http://localhost:8081/actuator/health
http://localhost:8081/actuator/info

Endpoints principales

Auth:

POST /auth/login
POST /auth/refresh
POST /auth/logout

Users:

POST  /users/register
GET   /users/me
GET   /users/{id}
PUT   /users/{id}
GET   /users/{id}/can-be-committee
GET   /users
PATCH /users/{id}/activate
PATCH /users/{id}/deactivate
POST  /users/system-admins
POST  /users/congress-admins
POST  /users/guest-speakers

Para request/response, errores, roles y ejemplos, usar Swagger UI.

Ejecución rápida recomendada

Modo individual:

./gradlew bootRun

Modo con Eureka:

./gradlew bootRun --args="--spring.profiles.active=discovery"

Tests locales sin Docker:

./gradlew test -PskipPersistenceTests=true

Tests completos con Docker:

./gradlew test

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors