bollwerk/.github/kotlin-conventions.instructions.md
Jens Reinemann a5f89e6a69 rename: Krisenvorrat -> Bollwerk
- Package: de.krisenvorrat.* -> de.bollwerk.*
- Klassen: KrisenvorratApp/Database/Theme -> Bollwerk*
- ApplicationId: de.bollwerk.app
- Server: BOLLWERK_* Env-Vars, bollwerk HOCON-Config
- Docker: bollwerk-server/db/backup Container-Namen
- Room DB: bollwerk.db, SharedPrefs: bollwerk_secure_prefs
- Export-Dateien: bollwerk_export/inventar
- UI-Strings, HTML, Admin-UI: alle auf Bollwerk
- Docs, Skills, README angepasst
- Alle Tests gruen, Build erfolgreich
2026-05-17 17:44:02 +02:00

72 lines
2 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.

---
applyTo: "**/*.kt"
---
# Kotlin Coding Conventions Bollwerk App
Diese Konventionen gelten für alle Kotlin-Dateien im Workspace.
## Sprache & Plattform
- **Kotlin** (aktuell), Zielplattform **Android** (aktuelles API-Level)
- **Jetpack Compose** für UI
- **Gradle (Kotlin DSL)** als Build-System
## State Management
- `StateFlow` / `MutableStateFlow` in ViewModels
- `collectAsStateWithLifecycle()` in Composables
- `remember` / `rememberSaveable` für UI-lokalen State
## Navigation
- Jetpack Navigation Compose
- Type-safe Navigation mit `@Serializable` Routen
## Concurrency
- Kotlin Coroutines (`suspend`, `Flow`, `StateFlow`)
- `viewModelScope` für ViewModel-gebundene Coroutines
- `withContext(Dispatchers.IO)` für I/O-Operationen
- Strukturierte Fehlerbehandlung mit `try/catch` um jeden `suspend`-Aufruf
## Naming
- Klassen/Interfaces: `UpperCamelCase`
- Funktionen/Variablen: `lowerCamelCase`
- Konstanten: `UPPER_SNAKE_CASE`
- Composable-Funktionen: `UpperCamelCase` (wie Klassen)
- Boolean-Eigenschaften: Präfix `is`, `has`, `can`, `should`
## Zugriffsmodifikatoren
- So restriktiv wie möglich: `private` > `internal` > `public`
- Kein `public` ohne klaren Grund (Kotlin-Default ist `public`)
## Verbotene Patterns
- Keine Force-Casts (`as`) ohne vorherige Typprüfung `as?` bevorzugen
- Keine `println()`-Statements stattdessen `Timber` oder Projekt-Logger verwenden
- Keine ungenutzten Imports
- Keine auskommentierten Code-Blöcke
- Kein `!!` (not-null assertion) in Produktionscode
## Testing
- **JUnit 5** für Unit Tests
- **Espresso** / **Compose Testing** für UI Tests
- Testmethoden: `test_<Was>_<Vorbedingung>_<Ergebnis>()`
- Gliederung: `// Given`, `// When`, `// Then`
- MockK für Mocking
## Persistenz
- **Room** (SQLite) für lokale Daten
- **kotlinx.serialization** für JSON Import/Export
- **DataStore** für Einstellungen/Konfigurationen
- **Keychain** für Session-Tokens
## Dokumentation
- Alle öffentlichen/internen Typen und Methoden mit `///` dokumentieren
- Kommentare beschreiben „was" und „warum", nicht „wie"