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? _cachedData; Future>> getOwners() async { if (_cachedData == null) { final result = await _apiClient.getOwners(); if (result is Ok>) { _cachedData = result.value; } return result; } else { return Result.ok(_cachedData!); } } Stream liveOwners() async* { await for (String data in _wsClient.connect()) { Map decodedData = jsonDecode( data, ).cast>(); Owner owner = Owner.fromJSON(decodedData); if (_cachedData == null) { getOwners(); } else { _cachedData!.add(owner); yield* Stream.value(owner); } } } }