Vorbereitung für die Spiegelung nach git.mana.how/offen (Prüfliste QUELLOEFFNUNG.md §5): Sweep sauber, keine Privat-Marker, Apache-2.0 mit NOTICE seit Welle 1, Schriften mit OFL-Texten. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
86 lines
3.5 KiB
Markdown
86 lines
3.5 KiB
Markdown
# mana-kotlin-core
|
|
|
|
Wiederverwendbarer Kotlin-Kern für die nativen Android-Apps von mana
|
|
Das Kotlin-Pendant zu `ManaCore` aus [`mana-swift-core`](../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; `InMemoryTokenStore`
|
|
für Tests.
|
|
- **`auth.Jwt`** — liest `exp`/`sub`/`tier` aus 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`](../mana/docs/playbooks/WORDECK_ANDROID_GREENFIELD.md).
|
|
|
|
## Bauen & Testen
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
./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).
|
|
|
|
## Bauen
|
|
|
|
Kotlin/Gradle. Die mana-Bibliotheken finden sich gegenseitig über
|
|
`mavenLocal()` — in dieser Reihenfolge veröffentlichen:
|
|
|
|
```bash
|
|
for r in mana-kotlin-core mana-kotlin-tokens mana-kotlin-event-sync \
|
|
mana-kotlin-widget mana-kotlin-event-sync-room mana-kotlin-ui; do
|
|
git clone https://git.mana.how/offen/$r.git && (cd $r && ./gradlew publishToMavenLocal)
|
|
done
|
|
```
|
|
|
|
Danach baut auch [Pageta für Android](https://git.mana.how/offen/pageta-android).
|
|
|
|
## Für Mitlesende
|
|
|
|
Dieses Repo gehört zum Ökosystem von [mana](https://mana.how) und liegt
|
|
offen, damit andere es lesen, einordnen und als Grundlage nutzen können —
|
|
das spart Arbeit, egal ob ein Mensch oder ein Modell davorsitzt.
|
|
|
|
**Was du erwarten darfst:** den Code so, wie er tatsächlich in Gebrauch ist,
|
|
unter Apache-2.0 (siehe `LICENSE` und `NOTICE`). Keine Attrappe, kein
|
|
zurechtgeschnittener Auszug — samt seiner Geschichte.
|
|
|
|
**Was du nicht erwarten darfst:** Support, Antwortzeiten, Zusagen zur
|
|
Abwärtskompatibilität oder die Übernahme von Änderungswünschen. Dieses Repo
|
|
folgt dem, was die eigenen Anwendungen brauchen. Fehlermeldungen sind
|
|
willkommen, eine Antwort ist nicht zugesagt.
|
|
|
|
**Fork ist ausdrücklich erlaubt** und oft der schnellere Weg als zu warten.
|