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