Auth sluoksnis — PicaApi, TokenStorage, AuthRepository
Keturi failai kodo stulpelyje kaip skirtukai, tokia tvarka, kokia priklauso vienas nuo kito: PicaApi.kt → TokenStorage.kt → SecureTokenStorage.kt → AuthRepository.kt.
1. PicaApi.kt (modify) — 5 pamokos interfeisas paauga: gauna register ir login endpoint'us plius AuthRequest/AuthResponse kūnus. Diff parodo tik naujas eilutes; menu endpoint'as lieka lygiai toks pat.
@POST("login")
suspend fun login(@Body request: AuthRequest): AuthResponse
@Serializable data class AuthResponse(val token: String) // ← kontraktas: serveris grąžina žetoną
2. TokenStorage.kt (create) — saugyklos kontraktas (kaip saugom žetoną, atsiejam nuo kur). AuthRepository priklauso nuo šios sąsajos, ne nuo šifruotos klasės.
3. SecureTokenStorage.kt (create) — šifruota realizacija (DataStore + Google Tink AEAD). Esmė — ne pati Tink, o kad žetonas diske yra šifruotas, ir kad hasValidToken() tikrina galiojimą pagal JWT exp lauką. Pilnas failas — skirtuke; kriptografija yra šablonas, kurį gali perpanaudoti.
4. AuthRepository.kt (create) — trumpa, nes visą darbą atlieka kontraktas: login()/register() iškviečia serverį ir išsaugo grąžintą žetoną. isLoggedIn() tik pažiūri, ar saugykloje yra galiojantis žetonas.
Patarimas.
AuthResponse(val token: String)— tai visas „prisijungimo" rezultatas. Jokių slaptažodžių, jokio vartotojo objekto: vienas žetonas. Kuo mažiau laikai telefone, tuo mažiau turi ką prarasti.