feat(core+frontend): add P2P sync infrastructure with WebSocket support
- **Core Updates:** - Implemented `P2pSyncService` interface with platform-specific WebSocket implementations (`JvmP2pSyncService` and no-op for JS). - Developed `SyncEvent` sealed class hierarchy to handle peer synchronization events (e.g., `PingEvent`, `PongEvent`, `DataChangedEvent`, etc.). - **Frontend Integration:** - Introduced `SyncManager` to manage peer discovery and synchronization, coupled with `NetworkDiscoveryService`. - Updated dependency injection to include `syncModule` for platform-specific sync service initialization. - Enhanced `BewerbViewModel` to support new sync capabilities, including observing sync events and UI updates for connected peers. - **Backend Enhancements:** - Added ZNS-specific fields (`zns_nummer`, `zns_abteilung`) to Bewerb table for idempotent imports. - Introduced import ZNS logic to handle duplicates and align with SyncManager updates. - **UI Improvements:** - Enhanced `TurnierBewerbeTab` with updated dialogs (ZNS imports, sync status) and dynamic previews. - Improved network syncing feedback and error handling in frontend components. - **DB Changes:** - Added migration for new column fields in the Bewerb table with relevant indexing for ZNS import optimizations.
This commit is contained in:
+6
-1
@@ -128,7 +128,12 @@ fun PreviewTurnierBewerbeTab() {
|
||||
override suspend fun generate(bewerbId: Long): Result<List<StartlistenZeile>> = Result.success(emptyList())
|
||||
override suspend fun getByBewerb(bewerbId: Long): Result<List<StartlistenZeile>> = Result.success(emptyList())
|
||||
}
|
||||
val vm = BewerbViewModel(mockRepo, mockStartlistenRepo, null, 1L)
|
||||
val vm = BewerbViewModel(
|
||||
repo = mockRepo,
|
||||
startlistenRepo = mockStartlistenRepo,
|
||||
syncManager = null,
|
||||
turnierId = 1L
|
||||
)
|
||||
MaterialTheme {
|
||||
BewerbeTabContent(viewModel = vm, turnierId = 1L)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user