chore: fix broken links in documentation, improve code snippets, and remove unnecessary imports in guides
This commit is contained in:
parent
daeae0f868
commit
5f6114450d
|
|
@ -138,10 +138,6 @@ FROM User;
|
||||||
In `shared/src/commonMain/kotlin/database/DatabaseDriverFactory.kt`:
|
In `shared/src/commonMain/kotlin/database/DatabaseDriverFactory.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.database
|
|
||||||
|
|
||||||
import app.cash.sqldelight.db.SqlDriver
|
|
||||||
|
|
||||||
expect class DatabaseDriverFactory {
|
expect class DatabaseDriverFactory {
|
||||||
fun createDriver(): SqlDriver
|
fun createDriver(): SqlDriver
|
||||||
}
|
}
|
||||||
|
|
@ -154,12 +150,6 @@ expect class DatabaseDriverFactory {
|
||||||
`shared/src/androidMain/kotlin/database/DatabaseDriverFactory.android.kt`:
|
`shared/src/androidMain/kotlin/database/DatabaseDriverFactory.android.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.database
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import app.cash.sqldelight.db.SqlDriver
|
|
||||||
import app.cash.sqldelight.driver.android.AndroidSqliteDriver
|
|
||||||
|
|
||||||
actual class DatabaseDriverFactory(private val context: Context) {
|
actual class DatabaseDriverFactory(private val context: Context) {
|
||||||
actual fun createDriver(): SqlDriver {
|
actual fun createDriver(): SqlDriver {
|
||||||
return AndroidSqliteDriver(
|
return AndroidSqliteDriver(
|
||||||
|
|
@ -176,11 +166,6 @@ actual class DatabaseDriverFactory(private val context: Context) {
|
||||||
`shared/src/iosMain/kotlin/database/DatabaseDriverFactory.ios.kt`:
|
`shared/src/iosMain/kotlin/database/DatabaseDriverFactory.ios.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.database
|
|
||||||
|
|
||||||
import app.cash.sqldelight.db.SqlDriver
|
|
||||||
import app.cash.sqldelight.driver.native.NativeSqliteDriver
|
|
||||||
|
|
||||||
actual class DatabaseDriverFactory {
|
actual class DatabaseDriverFactory {
|
||||||
actual fun createDriver(): SqlDriver {
|
actual fun createDriver(): SqlDriver {
|
||||||
return NativeSqliteDriver(
|
return NativeSqliteDriver(
|
||||||
|
|
@ -197,11 +182,6 @@ actual class DatabaseDriverFactory {
|
||||||
`shared/src/desktopMain/kotlin/database/DatabaseDriverFactory.desktop.kt`:
|
`shared/src/desktopMain/kotlin/database/DatabaseDriverFactory.desktop.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.database
|
|
||||||
|
|
||||||
import app.cash.sqldelight.db.SqlDriver
|
|
||||||
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
|
|
||||||
|
|
||||||
actual class DatabaseDriverFactory {
|
actual class DatabaseDriverFactory {
|
||||||
actual fun createDriver(): SqlDriver {
|
actual fun createDriver(): SqlDriver {
|
||||||
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
|
val driver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
|
||||||
|
|
@ -217,14 +197,6 @@ actual class DatabaseDriverFactory {
|
||||||
In `shared/src/commonMain/kotlin/repository/UserRepository.kt`:
|
In `shared/src/commonMain/kotlin/repository/UserRepository.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.repository
|
|
||||||
|
|
||||||
import com.example.database.AppDatabase
|
|
||||||
import com.example.database.User
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.IO
|
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
|
|
||||||
class UserRepository(private val database: AppDatabase) {
|
class UserRepository(private val database: AppDatabase) {
|
||||||
|
|
||||||
private val queries = database.userQueries
|
private val queries = database.userQueries
|
||||||
|
|
@ -261,13 +233,6 @@ class UserRepository(private val database: AppDatabase) {
|
||||||
In `shared/src/commonMain/kotlin/di/DatabaseModule.kt`:
|
In `shared/src/commonMain/kotlin/di/DatabaseModule.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.di
|
|
||||||
|
|
||||||
import com.example.database.AppDatabase
|
|
||||||
import com.example.database.DatabaseDriverFactory
|
|
||||||
import com.example.repository.UserRepository
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
val databaseModule = module {
|
val databaseModule = module {
|
||||||
single { DatabaseDriverFactory() }
|
single { DatabaseDriverFactory() }
|
||||||
single { AppDatabase(get<DatabaseDriverFactory>().createDriver()) }
|
single { AppDatabase(get<DatabaseDriverFactory>().createDriver()) }
|
||||||
|
|
@ -283,12 +248,6 @@ val databaseModule = module {
|
||||||
`shared/src/androidMain/kotlin/di/PlatformModule.android.kt`:
|
`shared/src/androidMain/kotlin/di/PlatformModule.android.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.di
|
|
||||||
|
|
||||||
import com.example.database.DatabaseDriverFactory
|
|
||||||
import org.koin.android.ext.koin.androidContext
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
actual val platformModule = module {
|
actual val platformModule = module {
|
||||||
single { DatabaseDriverFactory(androidContext()) }
|
single { DatabaseDriverFactory(androidContext()) }
|
||||||
}
|
}
|
||||||
|
|
@ -300,11 +259,6 @@ actual val platformModule = module {
|
||||||
`shared/src/iosMain/kotlin/di/PlatformModule.ios.kt`:
|
`shared/src/iosMain/kotlin/di/PlatformModule.ios.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.di
|
|
||||||
|
|
||||||
import com.example.database.DatabaseDriverFactory
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
actual val platformModule = module {
|
actual val platformModule = module {
|
||||||
single { DatabaseDriverFactory() }
|
single { DatabaseDriverFactory() }
|
||||||
}
|
}
|
||||||
|
|
@ -316,11 +270,6 @@ actual val platformModule = module {
|
||||||
`shared/src/desktopMain/kotlin/di/PlatformModule.desktop.kt`:
|
`shared/src/desktopMain/kotlin/di/PlatformModule.desktop.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.di
|
|
||||||
|
|
||||||
import com.example.database.DatabaseDriverFactory
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
actual val platformModule = module {
|
actual val platformModule = module {
|
||||||
single { DatabaseDriverFactory() }
|
single { DatabaseDriverFactory() }
|
||||||
}
|
}
|
||||||
|
|
@ -332,10 +281,6 @@ actual val platformModule = module {
|
||||||
`shared/src/commonMain/kotlin/di/PlatformModule.kt`:
|
`shared/src/commonMain/kotlin/di/PlatformModule.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.di
|
|
||||||
|
|
||||||
import org.koin.core.module.Module
|
|
||||||
|
|
||||||
expect val platformModule: Module
|
expect val platformModule: Module
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
@ -345,11 +290,6 @@ expect val platformModule: Module
|
||||||
In `shared/src/commonMain/kotlin/di/KoinInit.kt`:
|
In `shared/src/commonMain/kotlin/di/KoinInit.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.di
|
|
||||||
|
|
||||||
import org.koin.core.context.startKoin
|
|
||||||
import org.koin.dsl.KoinAppDeclaration
|
|
||||||
|
|
||||||
fun initKoin(appDeclaration: KoinAppDeclaration = {}) = startKoin {
|
fun initKoin(appDeclaration: KoinAppDeclaration = {}) = startKoin {
|
||||||
appDeclaration()
|
appDeclaration()
|
||||||
modules(
|
modules(
|
||||||
|
|
@ -388,9 +328,6 @@ class MainActivity : ComponentActivity() {
|
||||||
In `iosApp/iosApp/iOSApp.swift`:
|
In `iosApp/iosApp/iOSApp.swift`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
import SwiftUI
|
|
||||||
import shared
|
|
||||||
|
|
||||||
@main
|
@main
|
||||||
struct iOSApp : App {
|
struct iOSApp : App {
|
||||||
|
|
||||||
|
|
@ -431,17 +368,6 @@ fun main() {
|
||||||
In `shared/src/commonMain/kotlin/viewmodel/UserViewModel.kt`:
|
In `shared/src/commonMain/kotlin/viewmodel/UserViewModel.kt`:
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
package com.example.viewmodel
|
|
||||||
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.lifecycle.ViewModel
|
|
||||||
import androidx.lifecycle.viewModelScope
|
|
||||||
import com.example.database.User
|
|
||||||
import com.example.repository.UserRepository
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
class UserViewModel(private val userRepository: UserRepository) : ViewModel() {
|
class UserViewModel(private val userRepository: UserRepository) : ViewModel() {
|
||||||
|
|
||||||
var users by mutableStateOf<List<User>>(emptyList())
|
var users by mutableStateOf<List<User>>(emptyList())
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,6 @@ Anstatt die Datenbank direkt beim App-Start zu initialisieren (was im Web blocki
|
||||||
**Datei:** `shared/src/commonMain/kotlin/.../DatabaseDriverFactory.kt`
|
**Datei:** `shared/src/commonMain/kotlin/.../DatabaseDriverFactory.kt`
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
import app.cash.sqldelight.db.SqlDriver
|
|
||||||
|
|
||||||
interface DatabaseDriverFactory {
|
interface DatabaseDriverFactory {
|
||||||
suspend fun createDriver(): SqlDriver
|
suspend fun createDriver(): SqlDriver
|
||||||
}
|
}
|
||||||
|
|
@ -54,9 +52,6 @@ Diese Komponente löst das Problem des Nutzers, indem sie die Initialisierung bi
|
||||||
**Datei:** `shared/src/commonMain/kotlin/.../DatabaseWrapper.kt`
|
**Datei:** `shared/src/commonMain/kotlin/.../DatabaseWrapper.kt`
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
import kotlinx.coroutines.sync.Mutex
|
|
||||||
import kotlinx.coroutines.sync.withLock
|
|
||||||
|
|
||||||
class DatabaseWrapper(private val driverFactory: DatabaseDriverFactory) {
|
class DatabaseWrapper(private val driverFactory: DatabaseDriverFactory) {
|
||||||
private var _database: AppDatabase? = null
|
private var _database: AppDatabase? = null
|
||||||
private val mutex = Mutex()
|
private val mutex = Mutex()
|
||||||
|
|
@ -87,9 +82,6 @@ Hier liegt der Kern der Lösung: Wir warten explizit auf die Schema-Erstellung (
|
||||||
**Datei:** `shared/src/jsMain/kotlin/.../WebDatabaseDriverFactory.kt`
|
**Datei:** `shared/src/jsMain/kotlin/.../WebDatabaseDriverFactory.kt`
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
import app.cash.sqldelight.driver.worker.WebWorkerDriver
|
|
||||||
import org.w3c.dom.Worker
|
|
||||||
|
|
||||||
class WebDatabaseDriverFactory : DatabaseDriverFactory {
|
class WebDatabaseDriverFactory : DatabaseDriverFactory {
|
||||||
override suspend fun createDriver(): SqlDriver {
|
override suspend fun createDriver(): SqlDriver {
|
||||||
val worker = Worker(
|
val worker = Worker(
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ Nutze immer `transactionResult` (oder die Aliase `readTransaction` / `writeTrans
|
||||||
fun findUser(id: UUID): Result<User> = readTransaction {
|
fun findUser(id: UUID): Result<User> = readTransaction {
|
||||||
// 'this' ist hier eine JdbcTransaction
|
// 'this' ist hier eine JdbcTransaction
|
||||||
UserTable.select { UserTable.id eq id }
|
UserTable.select { UserTable.id eq id }
|
||||||
.map { ... }
|
.map { /* row -> User(...) */ }
|
||||||
.singleOrNull()
|
.singleOrNull()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
@ -40,7 +40,7 @@ Vermeide rohes SQL, wo immer möglich. Wenn es sein muss (z.B. für Performance-
|
||||||
|
|
||||||
* **`exec`:** Nutze immer `explicitStatementType`.
|
* **`exec`:** Nutze immer `explicitStatementType`.
|
||||||
```kotlin
|
```kotlin
|
||||||
this.exec("SELECT 1", explicitStatementType = StatementType.SELECT) { rs -> ... }
|
this.exec("SELECT 1", explicitStatementType = StatementType.SELECT) { rs -> /* handle ResultSet */ }
|
||||||
```
|
```
|
||||||
* **`executeUpdate`:** Nutze die Helper-Methode `DatabaseUtils.executeUpdate`, da sie sich um das korrekte Schließen von Statements kümmert (Exposed `PreparedStatementApi` ist nicht `AutoCloseable`).
|
* **`executeUpdate`:** Nutze die Helper-Methode `DatabaseUtils.executeUpdate`, da sie sich um das korrekte Schließen von Statements kümmert (Exposed `PreparedStatementApi` ist nicht `AutoCloseable`).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,5 +15,5 @@ Dieses Verzeichnis enthält die spezifische Dokumentation für alle Backend-Komp
|
||||||
|
|
||||||
## Wichtige Einstiegspunkte
|
## Wichtige Einstiegspunkte
|
||||||
|
|
||||||
* **[Ping-Service](./Services/ping-service.md):** Dient als technischer Blueprint und einfachstes Beispiel für einen Service.
|
* **[Ping-Service](./Services/PingService_Reference.md):** Dient als technischer Blueprint und einfachstes Beispiel für einen Service.
|
||||||
* **[API-Gateway](../07_Infrastructure/api-gateway.md):** Beschreibung des zentralen Einstiegspunkts für alle externen Anfragen.
|
* **[API-Gateway](../07_Infrastructure/api-gateway.md):** Beschreibung des zentralen Einstiegspunkts für alle externen Anfragen.
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ context: Operation Tracer Bullet (Phase 1)
|
||||||
|
|
||||||
# Arbeitsanweisung: Infrastructure Hardening & Security Implementation
|
# Arbeitsanweisung: Infrastructure Hardening & Security Implementation
|
||||||
|
|
||||||
**Ziel:** Finalisierung der Backend-Infrastruktur-Module und Härtung des `ping-service` gemäß [ADR 001](../01_Architecture/adr/001-backend-infrastructure-decisions.md).
|
**Ziel:** Finalisierung der Backend-Infrastruktur-Module und Härtung des `ping-service` gemäß [ADR 001](../../01_Architecture/adr/001-backend-infrastructure-decisions.md).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -76,5 +76,5 @@ Mache den Service "Production Ready."
|
||||||
---
|
---
|
||||||
|
|
||||||
**Referenzen:**
|
**Referenzen:**
|
||||||
* [ADR 001: Backend Infrastructure Decisions](../01_Architecture/adr/001-backend-infrastructure-decisions.md)
|
* [ADR 001: Backend Infrastructure Decisions](../../01_Architecture/adr/001-backend-infrastructure-decisions.md)
|
||||||
* [Master Roadmap Q1 2026](../01_Architecture/MASTER_ROADMAP_2026_Q1.md)
|
* [Master Roadmap Q1 2026](../../01_Architecture/_archive/2026-03-15_MASTER_ROADMAP_2026_Q1.md)
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,20 @@ Folgende aktive Dokumente hatten kein `last_update`-Feld im Frontmatter:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 🛠️ Nachbesserungen (Session 2, 20:02 Uhr)
|
||||||
|
|
||||||
|
Auf Basis von IDE-Warnings/Errors wurden folgende Korrekturen durchgeführt:
|
||||||
|
|
||||||
|
| Datei | Problem | Fix |
|
||||||
|
|---|---|---|
|
||||||
|
| `05_Backend/_archive/2026-03-15_TASK_...Hardening.md` | Broken Links (falsche relative Pfade nach Archivierung) | Pfade auf `../../01_Architecture/...` korrigiert; Roadmap-Link auf archivierte Version |
|
||||||
|
| `05_Backend/README.md` | `ping-service.md` existiert nicht | Link auf `PingService_Reference.md` korrigiert |
|
||||||
|
| `05_Backend/Guides/Database_Best_Practices.md` | `...` in Kotlin-Code-Blöcken → "Expecting an element" | Durch Kommentare ersetzt |
|
||||||
|
| `02_Guides/SQLDelight_Integration_Compose_Multiplatform.md` | `package`/`import`-Direktiven in Code-Fragmenten → IDE-Fehler | Alle `package`- und `import`-Zeilen aus Kotlin-Blöcken entfernt |
|
||||||
|
| `02_Guides/SQLDelight_Web_Asynchron.md` | `package`/`import`-Direktiven in Code-Fragmenten → IDE-Fehler | Alle `package`- und `import`-Zeilen aus Kotlin-Blöcken entfernt |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 🔗 Offene Punkte / Empfehlungen
|
## 🔗 Offene Punkte / Empfehlungen
|
||||||
|
|
||||||
- **Domain-Analyse-Docs** (`docs/03_Domain/03_Analysis/`) haben noch kein `last_update` — diese sind DRAFT und sollten beim nächsten Domain-Workshop aktualisiert werden.
|
- **Domain-Analyse-Docs** (`docs/03_Domain/03_Analysis/`) haben noch kein `last_update` — diese sind DRAFT und sollten beim nächsten Domain-Workshop aktualisiert werden.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user