8a8f1cfffb
- NotesApiClient: публичный /api/v1 (list exclude=content + If-None-Match, get, create, saveContent с If-Match→412 NoteConflictException, setFavorite/Category/rename, delete) - NotesRepository: сессия→клиент→кэш, offline-first список (304/сеть → кэш) - NotesCache: дисковый ETag-кэш списка (образец CalendarEventsCache) - Note модель + разбор JSON; NoteConflictException (явный выбор, не молчаливая перезапись) - NotesApiClientTest: 7 юнит-тестов через MockWebServer (пишущее — юнитами, не forbion; mail/073) Верифицировано изолированно (worktree на чистом HEAD): compileDebugKotlin + 7/7 tests + detekt OK. Закрывает часть P1 notes.diff.md (слой данных). mail/096/093, план mail/071. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
43 lines
1.1 KiB
Groovy
43 lines
1.1 KiB
Groovy
plugins {
|
|
id 'com.android.library'
|
|
id 'org.jetbrains.kotlin.android'
|
|
id 'org.jetbrains.kotlin.plugin.compose'
|
|
}
|
|
|
|
android {
|
|
namespace 'ru.forbion.f7cloud.feature.notes'
|
|
compileSdk 36
|
|
|
|
defaultConfig {
|
|
minSdk 26
|
|
}
|
|
buildFeatures {
|
|
compose true
|
|
}
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_17
|
|
targetCompatibility JavaVersion.VERSION_17
|
|
}
|
|
kotlinOptions {
|
|
jvmTarget = '17'
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation project(':core:auth')
|
|
implementation project(':core:network')
|
|
implementation project(':core:designsystem')
|
|
implementation libs.coroutines.android
|
|
def composeBom = platform(libs.compose.bom)
|
|
implementation composeBom
|
|
implementation libs.compose.ui
|
|
implementation libs.compose.material3
|
|
implementation libs.compose.foundation
|
|
implementation libs.lifecycle.viewmodel.compose
|
|
implementation libs.coil.compose
|
|
implementation libs.coil.svg
|
|
testImplementation libs.junit
|
|
testImplementation libs.okhttp
|
|
testImplementation libs.okhttp.mockwebserver
|
|
}
|