feat(frontend+domain): add start list repository, enhance Bewerb model, and update view models

- **StartlistenRepository:**
  - Introduced a new repository for generating and retrieving start lists, with `DefaultStartlistenRepository` implementation for remote API integration.

- **Bewerb Enhancements:**
  - Updated `Bewerb` and `BewerbDto` models to include additional details (e.g., `tag`, `platz`, `sparte`, etc.).
  - Adjusted mappers to align with model updates.

- **ViewModel Updates:**
  - Extended `BewerbViewModel` to integrate with `StartlistenRepository` for start list generation and preview.
  - Refactored loading logic in `BewerbViewModel` to display errors and handle repository responses properly.

- **UI Enhancements:**
  - Improved start list preview layout in `TurnierBewerbeTab` with additional styling and dynamic fields.
  - Added buttons to confirm or cancel start list changes in the preview modal.

- **Dependency Injection:**
  - Registered `DefaultStartlistenRepository` in the `TurnierFeatureModule` and updated `BewerbViewModel` factory.
This commit is contained in:
2026-04-10 10:10:42 +02:00
parent fbed4d34cc
commit c06eb79cba
11 changed files with 145 additions and 43 deletions
@@ -2,6 +2,9 @@ package at.mocode.desktop.screens.preview
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import at.mocode.turnier.feature.domain.Bewerb
import at.mocode.turnier.feature.domain.BewerbRepository
import at.mocode.turnier.feature.domain.StartlistenRepository
import at.mocode.turnier.feature.presentation.*
import at.mocode.zns.parser.ZnsBewerb
import at.mocode.veranstalter.feature.presentation.VeranstalterAuswahlScreen
@@ -114,10 +117,18 @@ fun PreviewTurnierOrganisationTab() {
@Composable
fun PreviewTurnierBewerbeTab() {
val mockRepo = object : BewerbRepository {
override suspend fun listByTurnier(turnierId: Long): List<BewerbListItem> = emptyList()
override suspend fun list(turnierId: Long): Result<List<Bewerb>> = Result.success(emptyList())
override suspend fun getById(id: Long): Result<Bewerb> = Result.failure(NotImplementedError())
override suspend fun create(model: Bewerb): Result<Bewerb> = Result.failure(NotImplementedError())
override suspend fun update(id: Long, model: Bewerb): Result<Bewerb> = Result.failure(NotImplementedError())
override suspend fun delete(id: Long): Result<Unit> = Result.success(Unit)
override suspend fun importBewerbe(turnierId: Long, bewerbe: List<ZnsBewerb>): Result<Unit> = Result.success(Unit)
}
val vm = BewerbViewModel(mockRepo, 1L)
val mockStartlistenRepo = object : StartlistenRepository {
override suspend fun generate(bewerbId: Long): Result<List<StartlistenZeile>> = Result.success(emptyList())
override suspend fun getByBewerb(bewerbId: Long): Result<List<StartlistenZeile>> = Result.success(emptyList())
}
val vm = BewerbViewModel(mockRepo, mockStartlistenRepo, 1L)
MaterialTheme {
BewerbeTabContent(viewModel = vm, turnierId = 1L)
}