Update .gitignore to exclude Android/Gradle files and enhance TimeEntryController and TimefixService for better error handling and performance. Refactor frontend components to use AppBrand for consistent branding across views.

This commit is contained in:
Torsten Schulz (local)
2026-05-14 22:17:29 +02:00
parent 7d5c8cffc7
commit 5b6adab4cd
72 changed files with 5704 additions and 111 deletions

67
mobile-app/README.md Normal file
View File

@@ -0,0 +1,67 @@
# 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
```