Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 10 / 14 Autentifikuotos užklausos ~45 min

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 /orders grąžina 401 ir getOrders() mes klaidą → Error būsena. Gražiam UX pridėk 401 apdorojimą, kuris išvalo žetoną (logout()) ir grąžina į prisijungimą — vartotojas tiesiog prisijungia iš naujo.