- Replaced hardcoded schema names with constants (`TEST_SCHEMA`, `CONTROL_SCHEMA`) across multiple tests.
- Resolved IDE warnings by removing unused variables (`result`), suppressing `SqlResolve`, and using ASCII-compliant strings.
- Corrected typos in test data (`testdb` -> `test_db`, `Produktions` -> `Production`).
- Improved readability and maintainability in migration and tenant registry tests by introducing companion object constants.
- Improved schema isolation logic with constants for tenant schemas and search path management in PostgreSQL.
- Added `withTenant` utility in `TenantContextHolder` to simplify tenant context usage.
- Removed unused imports, variables, and helper functions (`random()` and redundant `NennungRepository` references).
- Included missing `multitenancy.*` configuration keys in `additional-spring-configuration-metadata.json` to address IDE warnings.
- Fixed schema isolation handling in Exposed by switching table creation to JDBC and explicitly setting `search_path` in PostgreSQL.
- Removed redundant `runBlocking` calls, unused variables, and IDE warnings in the test.
- Added `JwtDecoder` mock in `@TestConfiguration` to prevent application context loading errors.
- Verified that writes in one tenant schema are no longer visible in another.
chore(config): add `application-test.yaml` for better test environment setup
- Configured H2 as an in-memory database for tests.
- Disabled Flyway and Consul to avoid unnecessary dependencies during testing.
- **Domain Enhancements:**
- Introduced `PausenKonfiguration` and `BesichtigungsBlock` entities to handle automatic breaks and inspection scheduling.
- Added `BesichtigungsTypE` enum for inspection types (`ZU_FUSS`, `ZU_PFERD`).
- Updated `Bewerb` and `Abteilung` models to include pause and inspection type fields.
- **Service Updates:**
- Enhanced `StartlistenService` to calculate start times, accounting for breaks and inspection buffers.
- Extended `BewerbService` to support patchable time scheduling via new `updateZeitplan` API.
- **Persistence Changes:**
- Updated tables (`BewerbTable`, `AbteilungTable`) to persist break configurations and inspection types.
- Implemented repository mappings to include these new fields.
- **Testing:**
- Introduced `BewerbeZeitplanIntegrationTest` to validate new scheduling behaviors, including automatic pauses and inspection handling.
- **Documentation:**
- Added rulebook and conceptual documents for inspection and scheduling logic in `docs/01_Architecture/`.
- **Navigation Updates:**
- Added `AppScreen.Billing` route for participant billing linked to an event and tournament.
- **UI Additions:**
- Introduced `BillingScreen` and `BillingViewModel` for participant account management and manual transactions.
- Updated `TurnierAbrechnungTab` to include `BillingScreen` and enable account interaction.
- **Turnier Enhancements:**
- Enhanced `NennungenTabContent` to support navigation to billing via a new interaction.
- Added billing feature as a dependency to `turnier-feature`.
- **Billing Domain:**
- Extended `Money` to include subtraction operation and improved formatting for negative amounts.
- Added DTOs (`TeilnehmerKontoDto`, `BuchungDto`, `BuchungRequest`) for seamless data exchange with backend.
- **Test Improvements:**
- Updated `PreviewTurnierAbrechnungTab` to include interactive billing placeholder.
- **Misc Updates:**
- Enhanced breadcrumb navigation for billing in `DesktopMainLayout` for better user experience.
- **Entries-Service Updates:**
- Implemented automatic booking of fees (entry fees and late fees) during entry submission using `TeilnehmerKontoService`.
- Enhanced `Bewerb` entity with financial fields (`nenngeldCent`, `nachnenngebuehrCent`).
- Added Flyway migration to update `bewerbe` table with new financial fields.
- Updated `EntriesServiceApplication` to include billing package scanning for integration.
- **Billing-Service Enhancements:**
- Adjusted `TeilnehmerKontoService` to support fetching accounts by event and person.
- Improved database configuration to handle missing JDBC URLs during tests.
- **Tests:**
- Added integration tests to validate fee booking logic for entries, including late fee scenarios.
- Introduced H2 database setup for test isolation.
- **Misc:**
- Updated tenant-aware transactions to support H2 and PostgreSQL dialects.
- Adjusted log and error handling for robust integration between services.
- **Domain Updates:**
- Introduced `AbteilungsWarnung` entity for structured warning handling compliant with ÖTO § 39.
- Added validation rules for mandatory and optional division thresholds and structural completeness.
- Implemented `CompetitionWarningService` and `AbteilungsRegelService` for domain-centric validations.
- Updated domain models (`Bewerb`, `Abteilung`) to reflect structured warning logic.
- **Services:**
- Expanded `BewerbService` to include warning validation through `CompetitionWarningService`.
- **Frontend Enhancements:**
- Updated `TurnierBewerbeTab` to display warnings using tooltips with clear descriptions and structured formatting.
- Modified `BewerbUiModel` to handle warnings and integrate them into the UI.
- **Persistence:**
- Implemented `CompetitionRepositoryImpl` to map database rows to the new domain models and validation logic.
- **Testing:**
- Added comprehensive unit tests for `validateStrukturellesTeilung` and division-specific warnings.
- Enhanced existing tests to validate the new warning structure and code-based assertions.
- **Docs:**
- Updated roadmap to reflect the completion of structural warnings implementation.
- **Core Updates:**
- Implemented `P2pSyncService` interface with platform-specific WebSocket implementations (`JvmP2pSyncService` and no-op for JS).
- Developed `SyncEvent` sealed class hierarchy to handle peer synchronization events (e.g., `PingEvent`, `PongEvent`, `DataChangedEvent`, etc.).
- **Frontend Integration:**
- Introduced `SyncManager` to manage peer discovery and synchronization, coupled with `NetworkDiscoveryService`.
- Updated dependency injection to include `syncModule` for platform-specific sync service initialization.
- Enhanced `BewerbViewModel` to support new sync capabilities, including observing sync events and UI updates for connected peers.
- **Backend Enhancements:**
- Added ZNS-specific fields (`zns_nummer`, `zns_abteilung`) to Bewerb table for idempotent imports.
- Introduced import ZNS logic to handle duplicates and align with SyncManager updates.
- **UI Improvements:**
- Enhanced `TurnierBewerbeTab` with updated dialogs (ZNS imports, sync status) and dynamic previews.
- Improved network syncing feedback and error handling in frontend components.
- **DB Changes:**
- Added migration for new column fields in the Bewerb table with relevant indexing for ZNS import optimizations.
- **Parser Implementation:**
- Introduced `ZnsBewerbParser` to parse n2-XXXXX.dat files and map B-Satz lines to the `ZnsBewerb` domain model.
- Added test coverage for parsing B-Satz lines and edge cases in `ZnsParserTest`.
- **Frontend Integration:**
- Integrated ZNS import functionality into the `BewerbeTabContent` for uploading and previewing Bewerb data before import.
- Enhanced `BewerbViewModel` with state and intents for managing ZNS import, preview dialogs, and import confirmation.
- Supported start list generation and added modal for previewing generated start lists.
- **Domain Services:**
- Implemented `StartlistenService` to generate and calculate start times for start lists with respect to participant preferences.
- Added extensive test coverage in `StartlistenServiceTest` to validate sorting, preferences, and time calculations.
- **UI Enhancements:**
- Updated `Bewerbe` tab layout with search, filtering, and action buttons for ZNS import and start list generation.
- Introduced dialogs for ZNS import previews and start list previews.
- **Database Changes:** Introduced `turnier_nummer` (mandatory, 5 digits) and `einschraenkungen` (mandatory, ÖTO-specific constraints) columns in `turniere` table. Seeded `turnier_nummer` with `oeps_turniernummer` where applicable.
- **Domain Models:** Extended `Turnier` and `DomTurnier` with `turnierNummer` and `einschraenkungen` fields. Added `TeilnehmerKreisE` enum for mapping restriction types.
- **Services and Controllers:** Updated repository and service operations to handle the new fields. Controllers reflect the new request models for creation and updates.
- **Validation:** Enforced input validation for `turnierNummer` format and `einschraenkungen` values.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
- **Onboarding (B-2):** Extracted `OnboardingValidator` and added `OnboardingValidatorTest` for edge-case validations (17 new unit tests: field guards, double-click prevention, cancel/reset behavior, `rememberSaveable` regression fix).
- **Departmental Logic (B-3):** Extended `AbteilungsRegelServiceTest` with 14 new tests covering CSN-C-NEU splitting logic (≤95 cm: license-free/licensed, ≥100 cm: R1/R2+), Caprilli regressions, and organizational/separate award scenarios.
- Updated `AbteilungsRegelService.kt` to implement CSN-C-NEU logic and added `ORGANISATORISCH` + `SEPARATE_SIEGEREHRUNG` enums for new rules.
- Updated Changelog and QA roadmap with completed tasks.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
- Added `TestExposedConfiguration` to connect Exposed with Spring `DataSource` in the `test` profile.
- Downgraded `springdoc` version from `3.0.0` to `2.8.9` for Spring Boot 3.x compatibility.
- Applied `@ActiveProfiles("test")` to `EntriesIsolationIntegrationTest`.
- Updated roadmap documentation to reflect bugfix and test success.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
- Added full CRUD support for Pferde (list, search, get by ID, create, update, delete) with filters for Jahrgang and BesitzerId.
- Introduced FunktionaerController, offering CRUD operations for Funktionäre (list, search, get by ID, create, update, delete) with filtering by Rolle.
- Enhanced HorseController and ReiterController with updated data models, additional request validation, and detailed filtering options.
- Extended backend configurations to register new controllers and route handlers.
- Updated roadmaps and progress documents to reflect completed Sprint B-1 tasks.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
- Add multi-layered entity support for `Turniere`, `Bewerbe`, and `Abteilungen` with tenant isolation.
- Implement Flyway schema migrations with constraints, indices, and default values for `Turniere`.
- Add Kotlin repositories and services for CRUD operations and validation across entities.
- Ensure tenant-safe transactions and implement new exception handling for `LockedException` and `ValidationException`.
- Provide REST APIs with controllers for managing lifecycle, hierarchy, and relationships between entities (`Turniere`, `Bewerbe`, and `Abteilungen`).
- Update Spring configuration with dependency wiring for new services and repositories.
- Added `CompetitionRepository` with domain operations for Bewerb and Abteilung.
- Implemented `AbteilungsRegelService` for ÖTO § 39 rules and structural validations.
- Introduced `CompetitionWarningService` to handle threshold warnings for starters and structural requirements.
- Created test suites (`AbteilungsRegelServiceTest`, `DomBewerbTest`) to verify compliance and validations.
- Updated dependencies and build configuration for repository integration.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
- Deleted obsolete modules related to horses, clubs, officials, and persons services, including their configurations, build files, and database provisioning scripts.
- Cleaned up associated references in the project structure (e.g., `settings.gradle.kts`).
- Removed unused database tables and Spring beans related to these domains.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
- Removed unnecessary UUID casting in repositories (`ExposedFunktionaerRepository`, `ExposedReiterRepository`, `ExposedVereinRepository`).
- Replaced `SchemaUtils.createMissingTablesAndColumns` with `SchemaUtils.create` in database configuration for consistency.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
- Added `meldestelle-desktop` module using JVM/Compose Desktop, registered in `settings.gradle.kts`.
- Integrated new screens and desktop navigation into core: `Veranstaltungen`, `TurnierDetail`, etc.
- Expanded backend with `ExposedFunktionaerRepository` in `officials-infrastructure`.
- Completed ADRs for bounded context mapping (`ADR-0014`) and context map (`ADR-0015`).
- Updated and extended project documentation with session logs and architecture decisions.
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
Removed `# syntax=docker/dockerfile:1.8` from various Dockerfiles as it is no longer needed. Updated `.gitea/workflows/docker-publish.yaml` to enhance ARM64 build reliability with host driver enforcement and commented out unused caching configurations for clarity.
Configured `sqlite.worker.js` for OPFS-backed SQLite WASM operations in the frontend build pipeline. Added new Spring Boot dependency bundles including secure service configurations. Integrated updated database utilities with enhanced error handling. Removed outdated circuit breaker tests and replaced them with modern unit and integration test setups.
Deleted the unused `compose.hardcoded.yaml` file. Updated Gradle build scripts to resolve issues with Jackson and Resilience4j library bundles by explicitly specifying direct dependencies. Removed the `sqldelight` plugin and related dependencies from `local-db` module. Consolidated `docker-compose.yaml` to standardize restart policies. Adjusted `.env` to include cautions for sensitive data and rechecked Java version comments.
Removed redundant `jvmToolchain(25)` declarations across module build scripts, as the JVM toolchain is now managed centrally. Added comments for clarity.