Phase 0: Project scaffolding with Gradle 9, Helidon 4 SE, and test infrastructure#44
Conversation
Set up root build, settings, and buildSrc convention plugins (prism.service + prism.library) for prism and prism-api modules. Configure Java 25 toolchain, Spotless formatting, Jib containerization, integrationTest source set, and MapStruct compiler args. Add Gradle 9.4.1 wrapper, libs.versions.toml with latest stable dependency versions, .editorconfig, .gitignore, and Makefile with all build targets. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create 8 Java records in prism-api module: Page<T> (generic paginated wrapper), TransactionResponse, TransferResponse, MemoResponse, AccountResponse, StatsResponse, HealthResponse, and ErrorResponse. All records use @builder(toBuilder = true) with zero framework imports. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create three migrations: V1 defines 5 core tables (transactions, failed_transactions, large_transfers, memos, accounts), V2 adds staging_transactions for COPY protocol bulk inserts, V3 creates 7 performance indexes using CONCURRENTLY with non-transactional execution. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 5 ArchUnit rules enforcing hexagonal architecture: domain must not depend on infrastructure or application, domain must not import framework or JDBC packages, infrastructure must not depend on routing. Add JUnit Platform Launcher dependency required by Gradle 9. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configure PostgreSQL 16, Prometheus, and Grafana services with named volumes. App service uses profile for optional inclusion. Add .env.example with all 8 configuration variables defaulting to websocket mode. Add infra-status and infra-logs Makefile targets. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create PostgresExtension (JUnit 5 BeforeAllCallback starting PostgreSQL 16 container), TestDataSourceFactory (HikariCP over Testcontainers), TestUtils (eqIgnoringTimestamps and eqIgnoring for BDDMockito recursive comparison), and fixtures base package in testFixtures source set. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…Jib update Use static initializer for Testcontainers singleton pattern instead of volatile+isRunning() for thread-safe container lifecycle. Parameterize username/password in TestDataSourceFactory to avoid hardcoded credentials. Update Jib Gradle plugin from 3.4.5 to 3.5.3 (latest stable). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
📝 WalkthroughWalkthroughEstablishes foundational project infrastructure including multi-module Gradle build system with convention plugins, dependency management catalog, API response data classes, database migrations, Docker Compose environment for local development, test utilities, and configuration files for build, code style, and Git management. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
Summary
prism(service) andprism-api(library) modules, convention plugins inbuildSrc/, Java 25 toolchain, Spotless formatting, Jib containerization, andlibs.versions.tomlwith all dependencies pinned to latest stable versionsPage<T>,TransactionResponse,TransferResponse,MemoResponse,AccountResponse,StatsResponse,HealthResponse,ErrorResponse) — all with@Builder(toBuilder = true), zero framework importstransactions,failed_transactions,large_transfers,memos,accounts), staging table for COPY protocol, 7 concurrent indexes.env.examplewith all config variablesPostgresExtension(Testcontainers JUnit 5),TestDataSourceFactory(HikariCP),TestUtils(eqIgnoringTimestamps/eqIgnoringfor BDDMockito recursive comparison)Closes #1
Closes #2
Closes #3
Closes #4
Closes #5
Closes #6
Test plan
./gradlew buildpasses (compile + Spotless + ArchUnit)./gradlew testpasses (5 ArchUnit rules withallowEmptyShould)./gradlew spotlessApplyruns without errorprism,prism-apimake infra-upstarts PostgreSQL, Prometheus, Grafana (requires Docker)make infra-cleanremoves volumes🤖 Generated with Claude Code