Search

PythonReactSEOPDF
GitHub Skill

create-banking-module

Generates a banking module in the correct domain. Usage: /create-banking-module <domain> <name>

firefly-oss☆ 0 Repository stars0 Repository forks

Installation

Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.

View source ↗Guides

Skill instructions

Create Banking Module

Parameters

Parameter Required Values Example
domain Yes banking, lending, common, data lending
name Yes kebab-case module name collateral-management

If the user omits parameters, ask for both before generating.

Resolve Naming

Derive all identifiers from the two parameters:

DOMAIN       = {domain}           # e.g. lending
NAME         = {name}             # e.g. collateral-management
SERVICE_NAME = core-{DOMAIN}-{NAME}   # e.g. core-lending-collateral-management
PACKAGE_PATH = core.{DOMAIN}.{NAME_DOT}  # e.g. core.lending.collateral.management
                                          # (replace hyphens with dots)

Generated File Tree

{SERVICE_NAME}/
  pom.xml                          # root aggregator POM
  {SERVICE_NAME}-interfaces/
    pom.xml
    src/main/java/com/firefly/{PACKAGE_PATH}/interfaces/dtos/
    src/main/java/com/firefly/{PACKAGE_PATH}/interfaces/enums/
  {SERVICE_NAME}-models/
    pom.xml
    src/main/java/com/firefly/{PACKAGE_PATH}/models/entities/
    src/main/java/com/firefly/{PACKAGE_PATH}/models/repositories/
    src/main/resources/db/migration/
  {SERVICE_NAME}-core/
    pom.xml
    src/main/java/com/firefly/{PACKAGE_PATH}/core/services/
    src/main/java/com/firefly/{PACKAGE_PATH}/core/mappers/
  {SERVICE_NAME}-web/
    pom.xml
    src/main/java/com/firefly/{PACKAGE_PATH}/web/
    src/main/java/com/firefly/{PACKAGE_PATH}/web/controllers/
    src/main/java/com/firefly/{PACKAGE_PATH}/web/openapi/
    src/main/resources/application.yaml
  {SERVICE_NAME}-sdk/
    pom.xml

Root POM

Generate {SERVICE_NAME}/pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.firefly</groupId>
        <artifactId>firefly-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath/>
    </parent>

    <artifactId>{SERVICE_NAME}</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>{SERVICE_NAME}-interfaces</module>
        <module>{SERVICE_NAME}-models</module>
        <module>{SERVICE_NAME}-core</module>
        <module>{SERVICE_NAME}-web</module>
        <module>{SERVICE_NAME}-sdk</module>
    </modules>

    <properties>
        <java.version>25</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <maven.compiler.release>${java.version}</maven.compiler.release>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.firefly</groupId>
                <artifactId>firefly-bom</artifactId>
                <version>1.0.0-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.firefly</groupId>
                <artifactId>{SERVICE_NAME}-interfaces</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.firefly</groupId>
                <artifactId>{SERVICE_NAME}-models</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.firefly</groupId>
                <artifactId>{SERVICE_NAME}-core</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.firefly</groupId>
                <artifactId>{SERVICE_NAME}-web</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.firefly</groupId>
                <artifactId>{SERVICE_NAME}-sdk</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

Module POMs

-interfaces

Dependencies: fireflyframework-utils, fireflyframework-validators, swagger-annotations, jackson-databind.

-models

Dependencies: {SERVICE_NAME}-interfaces, fireflyframework-r2dbc, spring-boot-starter-data-r2dbc, r2dbc-postgresql, flyway-core.

-core

Dependencies: {SERVICE_NAME}-interfaces, {SERVICE_NAME}-models, fireflyframework-starter-core, mapstruct, lombok.

-web

Set properties openapi.gen.skip=false and openapi.gen.mainClass=com.firefly.{PACKAGE_PATH}.web.openapi.OpenApiGenApplication. Dependencies: {SERVICE_NAME}-core, {SERVICE_NAME}-interfaces, fireflyframework-web, spring-boot-starter-webflux, spring-boot-starter-actuator, springdoc-openapi-starter-webflux-ui, micrometer-registry-prometheus. Include spring-boot-maven-plugin, maven-compiler-plugin, and maven-resources-plugin in build.

-sdk

Dependencies: {SERVICE_NAME}-web (provided scope). Include openapi-generator-maven-plugin with inputSpec pointing to ../{SERVICE_NAME}-web/target/openapi/openapi.yml, generatorName=java, library=webclient, reactive=true.

Spring Boot Application Class

Generate in -web module at com.firefly.{PACKAGE_PATH}.web:

package com.firefly.{PACKAGE_PATH}.web;

import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.info.*;
import io.swagger.v3.oas.annotations.servers.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.data.r2dbc.config.EnableR2dbcAuditing;
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories;
import org.springframework.web.reactive.config.EnableWebFlux;

@SpringBootApplication(scanBasePackages = {
    "com.firefly.{PACKAGE_PATH}",
    "org.fireflyframework.web"
})
@EnableWebFlux
@EnableR2dbcRepositories(basePackages = "com.firefly.{PACKAGE_PATH}.models.repositories")
@EnableR2dbcAuditing
@ConfigurationPropertiesScan
@OpenAPIDefinition(
    info = @Info(
        title = "${spring.application.name}",
        version = "${spring.application.version}",
        description = "${spring.application.description}",
        contact = @Contact(
            name = "${spring.application.team.name}",
            email = "${spring.application.team.email}"
        )
    ),
    servers = {
        @Server(url = "http://core.getfirefly.io/{SERVICE_NAME}", description = "Development"),
        @Server(url = "/", description = "Local")
    }
)
public class {ApplicationClassName} {
    public static void main(String[] args) {
        SpringApplication.run({ApplicationClassName}.class, args);
    }
}

application.yaml

Generate Spring Cloud Config client + R2DBC + Flyway + actuator config using the template from the create-banking-service skill, section 6 "Application Configuration". Set spring.application.name to {SERVICE_NAME} and springdoc.packages-to-scan to com.firefly.{PACKAGE_PATH}.web.controllers.

SDK Registration in firefly-bom

Print instructions to add two entries to firefly-bom/pom.xml:

<dependency>
    <groupId>com.firefly</groupId>
    <artifactId>{SERVICE_NAME}</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.firefly</groupId>
    <artifactId>{SERVICE_NAME}-sdk</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

Place in the correct BOM section: Core Banking, Core Lending, Core Common, or Core Data.

After Generation

Tell the user:

  1. Register the module in firefly-bom/pom.xml (show the entries above).
  2. Create the database and set DB_* environment variables.
  3. Add a V1__{service_name}_init.sql Flyway migration in -models/src/main/resources/db/migration/.
  4. Run mvn clean verify from the root to confirm compilation.
  5. Reference the create-banking-service skill for full details on tier differences, domain/experience/app-tier variants, and integration checklists.

Examples

Read the usage examples in the source repository.

View source ↗

Source history

Indexed on
2026-03-11
Index updated
2026-03-11
Branch
main

Index and sync dates describe this directory. View the source repository for code history.

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!