Skip to content

Dev#4

Merged
Raydberg merged 8 commits intomainfrom
dev
Oct 7, 2025
Merged

Dev#4
Raydberg merged 8 commits intomainfrom
dev

Conversation

@Raydberg
Copy link
Copy Markdown
Contributor

@Raydberg Raydberg commented Oct 7, 2025

Summary by CodeRabbit

  • New Features
    • Integración con Kafka para consumo/producción de eventos y manejo de reintentos con envío a Dead Letter.
    • Creación automática de miembros a partir de eventos de usuario creado.
    • Endpoints de miembros con paginación, ordenación y filtro por DNI; respuestas tipadas (DTOs).
    • Controles de autorización en lectura/actualización y respuesta 403 dedicada.
  • Changes
    • Se eliminan los endpoints públicos de creación y borrado de miembros.
    • Estructura de datos de miembro actualizada (incluye DNI, teléfono, imagen de perfil).
  • Documentation
    • Se retiran rutas configuradas de Swagger/OpenAPI; la URL de documentación puede cambiar.
  • Chores
    • Nuevas dependencias para Kafka y banner de inicio.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Oct 7, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

Se agregan dependencias de Spring Kafka. Se reorganiza el paquete de auditoría. Se introducen configuración Kafka (consumidor/productor, DLT), eventos, excepciones de reintento, y un handler para registrar usuarios desde Kafka. Se añaden DTOs, especificación JPA, métodos en repositorio/servicio/controlador con paginación, filtros y seguridad. Se actualiza la entidad y se elimina un enum. Cambios en recursos.

Changes

Cohorte / Archivo(s) Resumen
Construcción y dependencias
pom.xml
Añade dependencias spring-kafka y spring-kafka-test (scope test).
Refactor de paquetes de auditoría
src/main/java/com/members/config/audit/Audit.java, src/main/java/com/members/config/audit/AuditListener.java
Cambia el paquete a com.members.config.audit; limpieza de imports.
Kafka: configuración y manejo de errores
src/main/java/com/members/config/kafka/KafkaConsumerConfig.java, src/main/java/com/members/exceptions/RetryableException.java, src/main/java/com/members/exceptions/NotRetryableException.java
Configura Consumer/Producer factories, listener container con DLT y backoff; define excepciones para clasificar reintentos.
Eventos de dominio
src/main/java/com/members/events/CreatedUserEvent.java, src/main/java/com/members/events/NotificationEvent.java
Introduce records para eventos de creación de usuario y notificación.
Listener de registro de usuario
src/main/java/com/members/listeners/RegisterUserEventHandler.java
Nuevo componente que consume CreatedUserEvent, verifica existencia y persiste MemberEntity.
DTOs de miembros
src/main/java/com/members/dto/*
Añade MemberPageResponseDto, MemberRequestDto, MembersResponseDto.
Controlador/Servicio/Repositorio/Especificación/Mapper
src/main/java/com/members/controllers/MemberController.java, src/main/java/com/members/services/MemberService.java, src/main/java/com/members/services/Impl/MemberServiceImpl.java, src/main/java/com/members/repository/MemberRepository.java, src/main/java/com/members/specifications/MemberSpecification.java, src/main/java/com/members/mapper/MemberMapper.java
Controlador ahora lista con paginación/filtro/sort, obtiene por ID y actualiza; servicio y repo soportan Specification y nuevos métodos; mapper mapea entidad→DTO; agrega filtro por DNI.
Seguridad/autorización
src/main/java/com/members/services/AuthorizationService.java, src/main/java/com/members/services/Impl/AuthorizationServiceImpl.java, src/main/java/com/members/exceptions/GlobalExceptionController.java
Servicio de autorización y su implementación (roles, ownerId por JWT); habilita handler de AccessDeniedException (403).
Entidad y eliminaciones
src/main/java/com/members/entity/MemberEntity.java, src/main/java/com/members/enums/MemberStatus.java (eliminado)
Modifica campos (elimina email/status/membershipId; agrega dni/phone/profileImageUrl); quita @GeneratedValue en userId; elimina enum MemberStatus.
Recursos
src/main/resources/application.yml, src/main/resources/banner.txt
Remueve entradas de springdoc y nombre de app; añade banner ASCII.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Kafka as Kafka Broker
  participant Cfg as KafkaConsumerConfig
  participant L as @KafkaListener
  participant H as RegisterUserEventHandler
  participant R as MemberRepository
  participant DB as Database
  participant DLT as Dead Letter Topic

  rect rgba(230,245,255,0.6)
    note over Cfg: Configuración de consumidor/prod.<br/>JsonDeserializer + ErrorHandlingDeserializer<br/>BackOff 500ms x3
  end

  Kafka->>L: CreatedUserEvent
  L->>H: handle(event)
  H->>R: findById(userId)
  alt Ya existe
    H-->>L: no-op
  else Nuevo
    H->>R: save(MemberEntity)
    R->>DB: insert
    DB-->>R: ok
    R-->>H: entidad guardada
    H-->>L: ok
  end

  rect rgba(255,235,230,0.6)
    note over L: Falla en procesamiento
    L->>L: Reintentos (3)
    alt Sigue fallando
      L->>DLT: Publica mensaje a DLT
    else Excepción no reintetable
      L-->>Kafka: NACK sin reintento
    end
  end
Loading
sequenceDiagram
  actor U as Usuario
  participant Ctrl as MemberController
  participant Auth as AuthorizationService
  participant S as MemberService
  participant R as MemberRepository
  participant Map as MemberMapper

  U->>Ctrl: GET /members?dni=&page=&size=&sort=
  Ctrl->>S: findAllMembers(...)
  S->>R: findAll(spec, pageable)
  R-->>S: Page<MemberEntity>
  S->>Map: toDto(entity)
  Map-->>S: MembersResponseDto
  S-->>Ctrl: MemberPageResponseDto
  Ctrl-->>U: 200 JSON

  U->>Ctrl: GET /members/{id}
  Ctrl->>Auth: canAccessWithRoleOrOwner(id, auth, "ROLE_ADMIN")
  Auth-->>Ctrl: boolean
  alt permitido
    Ctrl->>S: findMemberById(id)
    S-->>Ctrl: MembersResponseDto
    Ctrl-->>U: 200 JSON
  else denegado
    Ctrl-->>U: 403 Forbidden
  end
Loading

Estimated code review effort

🎯 4 (Complejo) | ⏱️ ~60–90 minutes

Poem

Salté entre colas de Kafka al compás,
oí un CreatedUser y ¡zas!, guardarás.
Con DTOs brillantes y filtros al DNI,
la liebre aprobó el PR de aquí a allí.
Si falla, a la DLT voy feliz 🥕,
y con 403, me escondo tras el maíz.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ef4fb9e and 4ca9a2b.

📒 Files selected for processing (25)
  • pom.xml (1 hunks)
  • src/main/java/com/members/config/audit/Audit.java (1 hunks)
  • src/main/java/com/members/config/audit/AuditListener.java (1 hunks)
  • src/main/java/com/members/config/kafka/KafkaConsumerConfig.java (1 hunks)
  • src/main/java/com/members/controllers/MemberController.java (2 hunks)
  • src/main/java/com/members/dto/MemberPageResponseDto.java (1 hunks)
  • src/main/java/com/members/dto/MemberRequestDto.java (1 hunks)
  • src/main/java/com/members/dto/MembersResponseDto.java (1 hunks)
  • src/main/java/com/members/entity/MemberEntity.java (1 hunks)
  • src/main/java/com/members/enums/MemberStatus.java (0 hunks)
  • src/main/java/com/members/events/CreatedUserEvent.java (1 hunks)
  • src/main/java/com/members/events/NotificationEvent.java (1 hunks)
  • src/main/java/com/members/exceptions/GlobalExceptionController.java (2 hunks)
  • src/main/java/com/members/exceptions/NotRetryableException.java (1 hunks)
  • src/main/java/com/members/exceptions/RetryableException.java (1 hunks)
  • src/main/java/com/members/listeners/RegisterUserEventHandler.java (1 hunks)
  • src/main/java/com/members/mapper/MemberMapper.java (1 hunks)
  • src/main/java/com/members/repository/MemberRepository.java (1 hunks)
  • src/main/java/com/members/services/AuthorizationService.java (1 hunks)
  • src/main/java/com/members/services/Impl/AuthorizationServiceImpl.java (1 hunks)
  • src/main/java/com/members/services/Impl/MemberServiceImpl.java (1 hunks)
  • src/main/java/com/members/services/MemberService.java (1 hunks)
  • src/main/java/com/members/specifications/MemberSpecification.java (1 hunks)
  • src/main/resources/application.yml (0 hunks)
  • src/main/resources/banner.txt (1 hunks)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@Raydberg Raydberg merged commit 162e83e into main Oct 7, 2025
1 of 2 checks passed
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Oct 7, 2025

Quality Gate Failed Quality Gate failed

Failed conditions
8 Security Hotspots
0.0% Coverage on New Code (required ≥ 80%)
E Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant