Skip to content

3gstroke/account-service

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏦 account-service

Microservicio responsable de la gestión de cuentas bancarias y saldos dentro del Sistema de Transferencias Bancarias. Este servicio es la fuente de verdad del balance de las cuentas y participa de manera asíncrona en el flujo de transferencias mediante eventos Kafka.


🛠️ Stack Tecnológico

  • Java: 21
  • Framework: Quarkus 3.27.1
  • Persistencia: Hibernate ORM + Panache
  • Migraciones: Flyway
  • Base de datos: PostgreSQL
  • Mensajería: Apache Kafka (Reactive Messaging)
  • API REST: RESTEasy Reactive + Jackson
  • Observabilidad: SmallRye Health, Micrometer + Prometheus
  • Logging: JSON Logging
  • Build: Maven
    • Docker Compose: PostgreSQL + RedPanda (Kafka)en Raspberrypi 5

⚙️ Configuración Principal

Docker Compose

* docker-compose.yaml *
services:
    postgres_db:
      image: postgres:16
      container_name: postgres_db
      restart: always
      environment:
        POSTGRES_USER: gstroke
        POSTGRES_PASSWORD: gstroke24
        POSTGRES_DB: dev_gstroke_db
      volumes:
        - postgres_data:/var/lib/postgresql/data
      ports:
        - "5432:5432"
      healthcheck:
        test: ["CMD-SHELL", "pg_isready -U gstroke"]
        interval: 10s
        timeout: 5s
        retries: 5
        
   redpanda:
     image: redpandadata/redpanda:v24.1.3
     container_name: redpanda
     command:
       - redpanda
       - start
       - --smp
       - "1"
       - --memory
       - "1G"
       - --overprovisioned
       - --node-id
       - "0"
       - --check=false
       - --kafka-addr
       - PLAINTEXT://0.0.0.0:9092
       - --advertise-kafka-addr
       - PLAINTEXT://192.168.18.31:9092
     ports:
       - "9092:9092"
       - "9644:9644"
  • Ejecutar sudo nano docker compose up -d
  • Verificar con docker ps

Servidor

  • Puerto: 8081
quarkus.http.port=8081

Base de Datos

  • Motor: PostgreSQL
  • Host: 192.168.18.31
  • Base de datos: dev_gstroke_db
  • Schema: customer_db
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=gstroke
quarkus.datasource.password=gstroke24
quarkus.datasource.jdbc.url=jdbc:postgresql://192.168.18.31:5432/dev_gstroke_db

⚠️ Nota: Las credenciales están configuradas para entorno de desarrollo. En producción deben externalizarse mediante variables de entorno o un gestor de secretos.


🗄️ Hibernate ORM

  • Schema por defecto: customer_db
  • Estrategia de gestión: validate
  • SQL logging: habilitado
quarkus.hibernate-orm.database.default-schema=customer_db
quarkus.hibernate-orm.schema-management.strategy=validate
quarkus.hibernate-orm.log.sql=true

📌 Esto garantiza que:

  • El esquema no se modifica automáticamente
  • La estructura se valida contra las entidades
  • Las migraciones están controladas por Flyway

🛫 Flyway (Migraciones)

Las migraciones se ejecutan automáticamente al iniciar la aplicación.

quarkus.flyway.migrate-at-start=true
quarkus.flyway.schemas=customer_db
quarkus.flyway.default-schema=customer_db
quarkus.flyway.baseline-on-migrate=true

Ubicación de scripts

src/main/resources/db/migration

Ejemplo:

V1__init.sql

📌 Responsabilidades del Servicio

  • Administrar cuentas bancarias
  • Consultar información de cuentas y saldos
  • Validar disponibilidad de fondos
  • Consumir eventos de transacciones desde Kafka
  • Actualizar saldos de forma asíncrona
  • Registrar información de auditoría

🔗 Endpoints REST

Obtener cuenta por número

GET /accounts/{accountNumber}

Respuestas:

  • 200 OK → cuenta encontrada
  • 404 Not Found → cuenta no existe

Listar cuentas de un cliente

GET /accounts/customer/{customerId}

Validar disponibilidad de fondos

GET /accounts/{accountNumber}/has-funds?amount=100

Respuestas:

  • 200 OK → fondos suficientes
  • 400 Bad Request → fondos insuficientes
  • 404 Not Found → cuenta no existe

📡 Kafka

Este servicio consume eventos publicados por transaction-service.

Topics consumidos

  • transactions.completed
  • transactions.failed

Responsabilidad ante eventos

  • transactions.completed → débito/crédito de cuentas
  • transactions.failed → registro de auditoría

🩺 Health Check

GET /q/health

📊 Métricas (Prometheus)

GET /q/metrics

Incluye métricas de:

  • Procesamiento de eventos Kafka
  • Operaciones sobre cuentas
  • Estado del datasource

🧾 Logging

El servicio utiliza logging estructurado en formato JSON, ideal para integración con sistemas de observabilidad.

quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%X{correlationId}] %c - %m%n

Incluye soporte para Correlation ID.


▶️ Ejecución en Desarrollo

Requisitos

  • Java 21
  • Maven 3.9+
  • PostgreSQL
  • Apache Kafka

Comando

./mvnw quarkus:dev

🧪 Testing

  • JUnit 5
  • RestAssured
./mvnw test

🧠 Decisiones de Diseño

  • Arquitectura orientada a eventos para actualización de saldos
  • Consistencia eventual mediante Kafka
  • Aislamiento por schema
  • Flyway + validate para control estricto del modelo
  • Sin operaciones de débito/crédito por REST

📎 Notas Importantes

  • Este servicio no inicia transferencias
  • El saldo solo se modifica a partir de eventos confiables
  • Diseñado para escalar de forma independiente

About

Microservicio encargado de la gestión y validación de clientes

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages