This repository has been archived on 2025-08-25. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Seshat/lib/data/repositories/owner_repository.dart
2025-08-05 10:32:18 +02:00

47 lines
1.2 KiB
Dart

import 'dart:convert';
import 'package:seshat/data/services/api_client.dart';
import 'package:seshat/data/services/websocket_client.dart';
import 'package:seshat/domain/models/owner.dart';
import 'package:seshat/utils/result.dart';
class OwnerRepository {
OwnerRepository({
required ApiClient apiClient,
required WebsocketClient wsClient,
}) : _apiClient = apiClient,
_wsClient = wsClient;
final ApiClient _apiClient;
final WebsocketClient _wsClient;
List<Owner>? _cachedData;
Future<Result<List<Owner>>> getOwners() async {
if (_cachedData == null) {
final result = await _apiClient.getOwners();
if (result is Ok<List<Owner>>) {
_cachedData = result.value;
}
return result;
} else {
return Result.ok(_cachedData!);
}
}
Stream<Owner> liveOwners() async* {
await for (String data in _wsClient.connect()) {
Map<String, dynamic> decodedData = jsonDecode(
data,
).cast<Map<String, dynamic>>();
Owner owner = Owner.fromJSON(decodedData);
if (_cachedData == null) {
getOwners();
} else {
_cachedData!.add(owner);
yield* Stream.value(owner);
}
}
}
}