Skip to content

Microservices Overview

NeoCore is composed of 60+ Spring Boot microservices, each owning a specific banking domain. All services connect to a single PostgreSQL instance (neocoredb) using schema-per-service isolation.


Core Services (Active Development)

Service Port Domain Schema
api-gateway 8080 Request routing, JWT auth
deposit-service 8081 Term deposits, recurring, thrift deposit
customer-service 8082 Customer master, KYC customer
product-service 8083 Product config, interest rates product
share-service 8086 Share accounts, MDS chit fund share
generalledger-service 8088 GL heads, balance sheet gl
system-setup-service 8089 Branches, users, screens, holidays syssetup
bankandbranch-service 8090 Bank and branch master data bankbranch
transaction-service TBD Cash & transfer transactions transaction
common-service Flyway DB migrations (shared)

Pending Services

The following services are planned but not yet implemented:

Category Services
Loans termloan-service, goloan-service, staffloan-service, pigmyloan-service
Accounts operativeaccount-service, savingsaccount-service
HR / Payroll employee-service, payroll-service
Compliance atm-service, locker-service, clearing-service, forex-service
Reporting jasperreport-service
Infrastructure inventory-service, messaging-service

Standard Service Structure

Every microservice follows this Maven project layout:

{service-name}/
├── src/main/java/com/arcat/{domain}/
│   ├── {Service}Application.java       # Spring Boot entry point
│   ├── api/                            # REST controllers
│   ├── service/                        # Business logic (thin wrappers)
│   ├── repository/                     # JPA repositories / DB function calls
│   ├── dto/                            # Request/response DTOs
│   ├── model/                          # JPA entities
│   ├── client/                         # Feign clients (inter-service calls)
│   └── config/                         # Spring config, security
├── src/main/resources/
│   └── application.yml                 # Port, DB, Eureka config
└── pom.xml

Inter-Service Communication

Services communicate via HTTP using Spring's RestTemplate or Feign clients. All calls go through the API Gateway, which handles:

  • JWT token validation
  • Route resolution via Eureka
  • Load balancing
sequenceDiagram
    participant FE as Frontend
    participant GW as API Gateway
    participant CS as customer-service
    participant DS as deposit-service

    FE->>GW: POST /api/deposits (Bearer token)
    GW->>GW: Validate JWT
    GW->>DS: Route to deposit-service
    DS->>CS: GET /api/customers/{id} (Feign client)
    CS-->>DS: Customer data
    DS-->>FE: Deposit created response

Security Model

All services use ShowcaseBearerAuthenticationFilter to validate JWT tokens on every request. The token is issued by the API Gateway after login and carries user ID, branch, and role claims.


Running a Service Locally

# 1. Start PostgreSQL via Docker
docker-compose up -d

# 2. Build the service
cd cbms-ai-microservices/microservices/{service-name}
mvn package -DskipTests

# 3. Run the JAR
java -jar target/{service-name}-*.jar

Alternatively, use the provided start-{service}.bat scripts at the root of cbms-ai-microservices/.