Files
stechuhr3/mobile-app/README.md

68 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TimeClock Android Frontend
Phase 1 enthält die native Android-Grundapp und die gemeinsamen Compose-Design-Widgets.
**Phase 2 (API- und Auth-Fundament)** ist umgesetzt:
- Konfigurierbare API-Basis-URL (`BuildConfig.API_BASE_URL`), Standard: `https://stechuhr3.tsschulz.de/api`.
- HTTP mit OkHttp, JSON mit kotlinx.serialization, normalisierte Fehler (`ApiException`).
- JWT in **EncryptedSharedPreferences** (AndroidX Security Crypto), nicht im Klartext.
- **Login** (`POST /auth/login`), **Logout** (`POST /auth/logout`), **Session-Wiederherstellung** (`GET /auth/me` beim App-Start).
- Login-Oberfläche mit den bestehenden `Tc*`-Widgets; nach Anmeldung die Phase1-Demo-Shell mit echtem Benutzernamen und rollenbasierter Navigation (Admin-Zusatzmenü nur bei `role == 1`).
- Debug-Build: Cleartext-HTTP erlaubt (`composeApp/src/debug/AndroidManifest.xml`) für lokales Testen.
**Phase 3 (Kern-Zeiterfassung)** ist umgesetzt:
- Echter aktueller Status über `GET /time-entries/current-state`.
- Stempelaktionen über `POST /time-entries/clock`.
- Laufender Eintrag über `GET /time-entries/running`.
- StatusBox mit echten Zeiten und Aktionsbuttons.
- Tages-/Wochenwerte über `GET /time-entries/stats/summary`.
- Wochenübersicht über `GET /week-overview?weekOffset=...`.
- Automatische Status-Aktualisierung alle 30 Sekunden nach Anmeldung.
**Phase 4 (Buchungs-Workflows)** ist umgesetzt:
- Zeitkorrekturen: Worklog-Einträge nach Datum, heutige Korrekturen, Erstellen und Löschen.
- Urlaub: Liste, Erstellen und Löschen.
- Krankheit: Krankheitstypen, Liste, Erstellen und Löschen.
- Arbeitstage: Jahresstatistik.
- Kalender: Monatsansicht mit Feiertag, Krankheit, Urlaub und Arbeitsstunden.
## API-URL setzen
In `mobile-app/local.properties` (wird typischerweise nicht eingecheckt):
```properties
# Beispiel: lokales Backend im Emulator (Host-Rechner)
timeclock.api.baseUrl=http://10.0.2.2:3010/api
```
oder beim Gradle-Aufruf:
```bash
# Beispiel: lokales Backend statt Standard-Server
./gradlew :composeApp:assembleDebug -Ptimeclock.api.baseUrl=http://10.0.2.2:3010/api
```
## Scope (Phase 1)
- Native Android-App unter `composeApp`.
- Web-inspiriertes Designsystem an `frontend/src/assets/main.css`, `App.vue`, `SideMenu.vue` und `StatusBox.vue`.
- Adaptive Shell: schmale Breiten mit Top-Bar und Bottom-Navigation, Tablet mit persistenter Seitennavigation.
- Nicht umgesetzte Einstellungs-/Admin-Screens bleiben vorerst Demo/Mock; StatusBox, Wochenübersicht und Buchungs-Workflows verwenden echte Backend-Daten.
## Build
Aus diesem Verzeichnis:
```bash
./gradlew :composeApp:assembleDebug
```
Beispiel mit eigenem Gradle-Cache:
```bash
GRADLE_USER_HOME=/tmp/gradle-home ./gradlew :composeApp:assembleDebug --no-daemon
```