Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 5 / 14 Backend ir Retrofit ~50 min

Tinklo stekas — build.gradle.kts, DTO, PicaApi

Trys failai kodo stulpelyje kaip skirtukai, tokia tvarka, kokia juos kuri: build.gradle.ktsMenuItemDto.ktPicaApi.kt. Bibliotekos pirma — be jų niekas nekompiliuojasi.

1. build.gradle.kts (modify) — įtrauk tinklo steką: kotlin.serialization įskiepį ir Retrofit + kotlinx-serialization priklausomybes. „Stack when needed" — įtraukiam tada, kai prireikia, ne anksčiau. Viskas iš 1 pamokos lieka; diff parodo tik naujas eilutes.

2. MenuItemDto.kt (data) — laidinis modelis. Jis atspindi serverio JSON tiksliai, plius vertėją į domeną:

@SerialName("price_cents") val priceCents: Int   // JSON snake_case; Kotlin ne
// …
fun MenuItemDto.toDomain(): MenuItem = MenuItem(price = priceCents / 100.0, /* … */)
  • @SerialName("price_cents") sujungia JSON lauką price_cents su Kotlino priceCents.
  • toDomain() paverčia centus eurais. UI mato švarų MenuItem (kaip 2 pamokoje), nežino apie centus ar JSON.

3. PicaApi.kt (network) — serviso sąsaja. Retrofit paverčia @GET("menu") suspend fun getMenu(): List<MenuItemDto> veikiančiu HTTP klientu. Kol kas tik meniu; kiti galiniai taškai prisidės savo pamokose.

Patikrink. Projektas kompiliuojasi. PicaApi ir MenuItemDto kol kas niekur nekviečiami — pajungsim kitame žingsnyje.

Patarimas. Kodėl atskiras DTO, o ne tiesiog anotuotas MenuItem? Nes JSON forma priklauso nuo serverio (centai, snake_case), o UI modelis — nuo tavęs. Atskyrus juos, serverio pakeitimas nesulaužo viso UI — pataisai tik toDomain().