import 'dart:async'; import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:rxdart/rxdart.dart'; 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; final BehaviorSubject _ownersController = BehaviorSubject( sync: true, ); late final StreamSubscription sub; 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(); _wsClient.connect(); if (result is Ok>) { _cachedOwners = result.value; } sub = _wsClient.owners.listen((owner) { debugPrint("\n\n\n\n[3] Added : $owner\n\n\n\n"); _cachedOwners!.add(owner); _ownersController.add(owner); }); return result; } else { return Result.ok(_cachedOwners!); } } Stream get liveOwners => _ownersController.stream; dispose() { sub.cancel(); } }