Sukurk OrderRepository.kt — pateik užsakymą
Interceptorius prisega žetoną — dabar tuo pasinaudokim. Kodo stulpelyje — OrderRepository.kt: paima krepšelio prekes (3 pamoka), paverčia jas CreateOrderRequest ir siunčia POST /orders. Jokio žetono kodo čia nėra — interceptorius jį prideda pats. tableNumber kol kas null (QR skenavimas duos jį 10 pamokoje).
Krepšelis dabar gauna OrderRepository ir moka pateikti užsakymą:
// cartModule — krepšelis paauga (3 pamokos in-memory + užsakymai)
single { OrderRepository(get()) }
viewModel { CartViewModel(get()) } // get() = OrderRepository
// CartViewModel — naujas veiksmas:
fun placeOrder() = viewModelScope.launch {
orderRepository.placeOrder(_uiState.value.items, tableNumber = null) // table = L10
onEvent(CartEvent.ClearCart)
}
O užsakymų istorija — nauja funkcija (feature/orders), ta pati MVI forma kaip meniu:
// data
data class Order(val id: Int, val total: Double, val status: String, val createdAt: String)
class OrderHistoryRepository(private val api: PicaApi) {
suspend fun getOrders(): List<Order> = api.getOrders().map { dto ->
Order(dto.id, dto.totalCents / 100.0, dto.status, dto.createdAt) // centai → eurai
}
}
// presentation — Loading / Success(orders) / Error, init { loadOrders() }
sealed interface OrderHistoryUiState { /* Loading; Success(List<Order>); Error(msg) */ }
// di
val orderHistoryModule = module {
single { OrderHistoryRepository(get()) }
viewModel { OrderHistoryViewModel(get()) }
}
OrderHistoryScreen rodo korteles (Order #id, €%.2f, statusas), o tuščią istoriją — „No orders yet". Nepamiršk įregistruoti orderHistoryModule PicaApplication sąraše ir pridėti Screen.OrderHistory į navigaciją.
Patikrink. Prisijungęs:
1. Įdėk picų į krepšelį → „Place order" → POST /orders (su Authorization antrašte).
2. Atidaryk užsakymų istoriją → GET /orders → matai TIK savo užsakymus.
3. Prisijunk kitu vartotoju → istorija kitokia (serveris atriboja pagal žetoną).
Patarimas (401 → login). Kai žetonas pasibaigia,
GET /ordersgrąžina 401 irgetOrders()mes klaidą →Errorbūsena. Gražiam UX pridėk 401 apdorojimą, kuris išvalo žetoną (logout()) ir grąžina į prisijungimą — vartotojas tiesiog prisijungia iš naujo.