Integrate Nennungen and Masterdata features: expand ApiRoutes, add repositories and ViewModels for Nennungen and Masterdata. Update navigation and UI components to include Meisterschaften and Cups tabs.

This commit is contained in:
2026-04-11 21:58:46 +02:00
parent edfbbb805f
commit 15b3f17d1d
21 changed files with 806 additions and 84 deletions
@@ -33,6 +33,7 @@ import at.mocode.frontend.features.verein.presentation.VereinScreen
import at.mocode.frontend.features.verein.presentation.VereinViewModel
import at.mocode.ping.feature.presentation.PingScreen
import at.mocode.ping.feature.presentation.PingViewModel
import at.mocode.turnier.feature.presentation.SeriesScreen
import at.mocode.turnier.feature.presentation.TurnierDetailScreen
import at.mocode.veranstaltung.feature.presentation.AdminUebersichtScreen
import at.mocode.veranstaltung.feature.presentation.VeranstaltungDetailScreen
@@ -302,6 +303,24 @@ private fun DesktopTopBar(
fontWeight = FontWeight.SemiBold,
)
}
is AppScreen.Meisterschaften -> {
BreadcrumbSeparator()
Text(
text = "Meisterschaften",
color = TopBarTextColor,
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
)
}
is AppScreen.Cups -> {
BreadcrumbSeparator()
Text(
text = "Cups",
color = TopBarTextColor,
fontSize = 14.sp,
fontWeight = FontWeight.SemiBold,
)
}
else -> {}
}
}
@@ -686,6 +705,14 @@ private fun DesktopContentArea(
)
}
is AppScreen.Meisterschaften -> {
SeriesScreen(title = "Meisterschaften", onBack = onBack)
}
is AppScreen.Cups -> {
SeriesScreen(title = "Cups", onBack = onBack)
}
is AppScreen.Nennung -> {
val nennungViewModel: NennungViewModel = koinViewModel()
NennungsMaske(
@@ -698,6 +725,8 @@ private fun DesktopContentArea(
else -> AdminUebersichtScreen(
onVeranstalterAuswahl = { onNavigate(AppScreen.VeranstalterAuswahl) },
onVeranstaltungOeffnen = { id -> onNavigate(AppScreen.VeranstaltungDetail(id)) },
onMeisterschaftenOeffnen = { onNavigate(AppScreen.Meisterschaften) },
onCupsOeffnen = { onNavigate(AppScreen.Cups) }
)
}
}
@@ -2,10 +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.domain.*
import at.mocode.turnier.feature.presentation.*
import at.mocode.turnier.feature.data.remote.dto.NennungEinreichenRequest
import at.mocode.zns.parser.ZnsBewerb
import at.mocode.frontend.features.veranstalter.presentation.VeranstalterAuswahlScreen
import at.mocode.frontend.features.veranstalter.presentation.VeranstalterDetailScreen
@@ -108,8 +107,23 @@ fun PreviewTurnierStammdatenTab() {
@ComponentPreview
@Composable
fun PreviewTurnierOrganisationTab() {
val mockNennungRepo = object : NennungRepository {
override suspend fun list(turnierId: Long): Result<List<Nennung>> = Result.success(emptyList())
override suspend fun listByBewerb(bewerbId: Long): Result<List<Nennung>> = Result.success(emptyList())
override suspend fun einreichen(request: NennungEinreichenRequest): Result<Nennung> = Result.failure(NotImplementedError())
override suspend fun updateStatus(id: String, status: String): Result<Nennung> = Result.failure(NotImplementedError())
override suspend fun delete(id: String): Result<Unit> = Result.success(Unit)
}
val mockMasterdataRepo = object : MasterdataRepository {
override suspend fun searchReiter(query: String): Result<List<Reiter>> = Result.success(emptyList())
override suspend fun searchPferde(query: String): Result<List<Pferd>> = Result.success(emptyList())
override suspend fun searchFunktionaere(query: String): Result<List<Funktionaer>> = Result.success(emptyList())
override suspend fun listVereine(): Result<List<Verein>> = Result.success(emptyList())
override suspend fun getVereinById(id: String): Result<Verein> = Result.failure(NotImplementedError())
}
val vm = NennungViewModel(mockNennungRepo, mockMasterdataRepo, 1L)
MaterialTheme {
OrganisationTabContent()
OrganisationTabContent(viewModel = vm)
}
}
@@ -161,8 +175,23 @@ fun PreviewTurnierAbrechnungTab() {
@ComponentPreview
@Composable
fun PreviewTurnierNennungenTab() {
val mockNennungRepo = object : NennungRepository {
override suspend fun list(turnierId: Long): Result<List<Nennung>> = Result.success(emptyList())
override suspend fun listByBewerb(bewerbId: Long): Result<List<Nennung>> = Result.success(emptyList())
override suspend fun einreichen(request: NennungEinreichenRequest): Result<Nennung> = Result.failure(NotImplementedError())
override suspend fun updateStatus(id: String, status: String): Result<Nennung> = Result.failure(NotImplementedError())
override suspend fun delete(id: String): Result<Unit> = Result.success(Unit)
}
val mockMasterdataRepo = object : MasterdataRepository {
override suspend fun searchReiter(query: String): Result<List<Reiter>> = Result.success(emptyList())
override suspend fun searchPferde(query: String): Result<List<Pferd>> = Result.success(emptyList())
override suspend fun searchFunktionaere(query: String): Result<List<Funktionaer>> = Result.success(emptyList())
override suspend fun listVereine(): Result<List<Verein>> = Result.success(emptyList())
override suspend fun getVereinById(id: String): Result<Verein> = Result.failure(NotImplementedError())
}
val vm = NennungViewModel(mockNennungRepo, mockMasterdataRepo, 1L)
MaterialTheme {
NennungenTabContent()
NennungenTabContent(viewModel = vm)
}
}