This document provides context and instructions for working with the DataSource-Extensions project.
DataSource-Extensions is a collection of libraries and extensions for the Caplin DataSource platform. It focuses on modernizing integrations using Reactive programming models and Spring Boot.
Key Technologies:
- Languages: Kotlin (primary), Java
- Build System: Gradle (Kotlin DSL)
- Frameworks: Spring Boot 3.x, Caplin DataSource, Project Reactor, Kotlin Coroutines (Flow)
- Testing: Kotest, Turbine, MockK, JUnit 5
The project is a multi-module Gradle project:
datasourcex-reactive-core&api: Core abstractions for reactive data sources.datasourcex-kotlin: Support for Kotlin Flow and Coroutines.datasourcex-java-flow: Support for Java Flow (Flow API).datasourcex-reactivestreams: Support for Reactive Streams (Reactor Flux/Mono, RxJava).spring-boot-starter-datasource: A Spring Boot starter for easy integration, utilizing@MessageMappingfor real-time endpoints.datasourcex-util: Utility classes.examples: Example applications (Spring Java/Kotlin, Chat app).
- JDK 17+
CAPLIN_USERNAMEandCAPLIN_PASSWORDenvironment variables are required to resolve dependencies from the Caplin repository.
- Build:
./gradlew build
- Test:
./gradlew test - Format Code (Apply):
./gradlew spotlessApply
- Check Code Formatting:
./gradlew spotlessCheck
- Run Example (Spring Boot):
./gradlew :examples:spring-kotlin:bootRun
- Code Style: The project uses
spotlesswithktfmtfor code formatting. Always run./gradlew spotlessApplybefore committing. - Testing:
- Use Kotest for assertions (
shouldBe, etc.). - Use Turbine for testing Kotlin Flows.
- Use MockK for mocking dependencies.
- Tests are typically JUnit 5 based.
- Use Kotest for assertions (
- Documentation: KDoc is used for API documentation. The
docsmodule andspring/docs/GUIDE.mdcontain usage guides.
- Create a
@Controller. - Annotate a function with
@MessageMapping("/subject"). - Return a
Flow<T>(Kotlin) orFlux<T>(Java).
Use turbine to verify the emission of items:
myFlow.test {
awaitItem() shouldBe expectedItem
awaitComplete()
}spring/docs/GUIDE.md: Comprehensive guide on using the Spring Boot starter.buildSrc/src/main/kotlin/common-library.gradle.kts: Shared build logic for libraries.gradle/libs.versions.toml: Version catalog for dependency management.