Welle 1 aus platform/mana/docs/QUELLOEFFNUNG.md. Ein Repo ohne LICENSE ist beim Veroeffentlichen kein Open Source, sondern "alle Rechte vorbehalten" — damit faellt genau der Zweck aus, dass andere den Baustein als Grundlage nutzen duerfen. Apache-2.0 wegen der Patentklausel und weil sie bei oeffentlichen Auftraggebern Standard ist. LICENSE traegt den kanonischen Volltext (ein Link auf apache.org genuegt Paragraf 4(a) nicht); der Copyright-Vermerk steht nach Apache-Konvention in NOTICE, damit der Lizenztext pruefbar identisch bleibt. Halter ist die natuerliche Person, nicht "mana" — der Verein ist nicht gegruendet und kann keine Rechte halten. Der Uebergang steht in NOTICE. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| devlog | ||
| gradle | ||
| src | ||
| .editorconfig | ||
| .gitignore | ||
| build.gradle.kts | ||
| CHANGELOG.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| NOTICE | ||
| README.md | ||
| settings.gradle.kts | ||
mana-kotlin-core
Wiederverwendbarer Kotlin-Kern für die nativen Android-Apps von mana
Das Kotlin-Pendant zu ManaCore aus mana-swift-core.
Reine Kotlin/JVM-Library (kein Android-SDK), damit sie unabhängig gebaut/getestet und später optional KMP-fähig gemacht werden kann. Die Android-App konsumiert sie als normale Maven-Dependency.
Was drin ist (v0.1)
auth.AuthClient— Login/Refresh/Logout gegen mana-auth (/api/v1/auth/*). Portiert das Resilienz-Verhalten aus dem Swift-Core: Single-Flight-Refresh, proaktiver Refresh vor Ablauf, Soft-Fail (Tokens nur bei tatsächlich invalidierter Sitzung wischen, nicht bei 5xx/429).auth.TokenStore— plattform-neutrale Token-Persistenz (Interface). Android-App implementiert das über DataStore+Keystore;InMemoryTokenStorefür Tests.auth.Jwt— liestexp/sub/tieraus dem Token (ohne Signatur- Prüfung — die ist Server-Sache via JWKS).net.AuthenticatedApi— Bearer-Transport mit einmaligem 401-Refresh-Retry, für die verbleibenden REST-Endpunkte (Marketplace,/me, dsgvo …).net.manaHttpClient/net.ManaJson— Ktor-Client-Factory + geteilte Json-Konfiguration.model—Deck,Card(5 text-only Typen),Tier.
Was NICHT drin ist (bewusst)
User-eigene Decks/Cards/Reviews laufen seit dem Event-Sync-Cutover
(2026-05-20) komplett über Event-Sync (sync2.mana.how), nicht über
REST. Die Server-CRUD-Endpunkte sind 410 Gone. Dieser Kern deckt nur
Auth + den authentifizierten REST-Transport ab; der Daten-Layer kommt in
mana-kotlin-event-sync (Phase 2 des Android-Plans).
SOT-Plan: mana/docs/playbooks/WORDECK_ANDROID_GREENFIELD.md.
Bauen & Testen
# JDK kommt aus Android Studio (JBR); kein System-JDK nötig:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew test
Veröffentlichen (Forgejo Packages)
./gradlew publish \
-PforgejoToken=<token> \
-PforgejoPackagesUrl=https://git.mana.how/api/packages/mana/maven
Stack: Kotlin 2.1 · Ktor 3 · kotlinx.serialization · coroutines · kotlinx.datetime. Ziel-Bytecode: JVM 17 (AGP/compileSdk-36-kompatibel).