Refactor and rename NennungViewModel to TurnierNennungViewModel, implement online registration workflow with new UI state, ViewModel logic, and API integration, and update dependencies and documentation accordingly.
This commit is contained in:
+12
@@ -62,6 +62,18 @@ data class VerkaufArtikel(
|
||||
val betrag: Double get() = menge * einzelpreis
|
||||
}
|
||||
|
||||
// --- OnlineNennung ---
|
||||
data class OnlineNennung(
|
||||
val id: String,
|
||||
val vorname: String,
|
||||
val nachname: String,
|
||||
val lizenz: String,
|
||||
val pferdName: String,
|
||||
val pferdAlter: String,
|
||||
val email: String,
|
||||
val bewerbe: String
|
||||
)
|
||||
|
||||
// --- Mock-Daten (werden später durch echte API ersetzt) ---
|
||||
object NennungMockData {
|
||||
|
||||
|
||||
+63
-1
@@ -2,10 +2,19 @@ package at.mocode.frontend.features.nennung.presentation
|
||||
|
||||
import at.mocode.frontend.features.nennung.domain.*
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import at.mocode.frontend.features.nennung.presentation.web.NennungDto
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
import org.koin.core.qualifier.named
|
||||
|
||||
// --- UI State ---
|
||||
data class NennungUiState(
|
||||
@@ -22,16 +31,69 @@ data class NennungUiState(
|
||||
val activeNennungTab: NennungTab = NennungTab.REITER,
|
||||
val activeVerkaufTab: VerkaufTab = VerkaufTab.VERKAUF,
|
||||
val statusMeldung: String? = null,
|
||||
val onlineNennungen: List<OnlineNennung> = emptyList(),
|
||||
val isOnlineLoading: Boolean = false
|
||||
)
|
||||
|
||||
enum class NennungTab { REITER, PFERD, BEWERBE }
|
||||
enum class VerkaufTab { VERKAUF, BUCHUNGEN }
|
||||
|
||||
class NennungViewModel : ViewModel() {
|
||||
class NennungViewModel : ViewModel(), KoinComponent {
|
||||
|
||||
private val apiClient: HttpClient by inject(named("apiClient"))
|
||||
|
||||
private val _uiState = MutableStateFlow(NennungUiState())
|
||||
val uiState: StateFlow<NennungUiState> = _uiState.asStateFlow()
|
||||
|
||||
init {
|
||||
loadOnlineNennungen()
|
||||
}
|
||||
|
||||
fun loadOnlineNennungen() {
|
||||
viewModelScope.launch {
|
||||
_uiState.update { it.copy(isOnlineLoading = true) }
|
||||
try {
|
||||
val dtos: List<NennungDto> = apiClient.get("/api/mail/nennungen").body()
|
||||
val mapped = dtos.map { dto ->
|
||||
OnlineNennung(
|
||||
id = dto.id ?: "0",
|
||||
vorname = dto.vorname,
|
||||
nachname = dto.nachname,
|
||||
lizenz = dto.lizenz,
|
||||
pferdName = dto.pferdName,
|
||||
pferdAlter = dto.pferdAlter,
|
||||
email = dto.email,
|
||||
bewerbe = dto.bewerbe
|
||||
)
|
||||
}
|
||||
_uiState.update { it.copy(onlineNennungen = mapped, isOnlineLoading = false) }
|
||||
} catch (e: Exception) {
|
||||
_uiState.update { it.copy(isOnlineLoading = false, statusMeldung = "Fehler beim Laden der Online-Nennungen: ${e.message}") }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun uebernehmeOnlineNennung(onlineNennung: OnlineNennung) {
|
||||
// 1. Reiter suchen oder "neu" anlegen (Mock-Logik)
|
||||
val reiter = NennungMockData.reiter.find { it.vorname == onlineNennung.vorname && it.nachname == onlineNennung.nachname }
|
||||
?: Reiter("NEU", onlineNennung.vorname, onlineNennung.nachname, lizenzNr = onlineNennung.lizenz)
|
||||
|
||||
// 2. Pferd suchen oder "neu" anlegen
|
||||
val pferd = NennungMockData.pferde.find { it.name.equals(onlineNennung.pferdName, ignoreCase = true) }
|
||||
?: Pferd("NEU", onlineNennung.pferdName)
|
||||
|
||||
// 3. UI State setzen (vorausfüllen)
|
||||
_uiState.update {
|
||||
it.copy(
|
||||
selectedReiter = reiter,
|
||||
reiterSuche = "${reiter.kopfNr} – ${reiter.vollname}",
|
||||
selectedPferd = pferd,
|
||||
pferdSuche = "${pferd.kopfNr} – ${pferd.name}",
|
||||
activeNennungTab = NennungTab.BEWERBE // Direkt zu den Bewerben springen
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// --- Pferd-Suche ---
|
||||
fun onPferdSucheChanged(query: String) {
|
||||
val vorschlaege = if (query.length >= 2) {
|
||||
|
||||
Reference in New Issue
Block a user