Skip to content

Commit 5a26c7f

Browse files
committed
refactor(core): drop usecase from adapter deps, migrate interface_adapters to adapters
ElectrumServersAdapter (electrum), ElectrumServerAdapter (blockchain, wallet) previously depended on GetElectrumServersToUseUsecase — an application-layer use case invoked from secondary adapters, reversing the layer-direction rule. The usecase served these adapters only. Absorb the orchestration (fetch + filter custom + sort by priority) into ElectrumServerRepository.fetchActiveServers as a query method. The two non-electrum adapters compose it with ElectrumSettingsRepository and SettingsRepository (for tor proxy) inline. Delete the usecase plus its request/response DTOs. Relocate all touched files from the legacy interface_adapters/ folder to the canonical adapters/ folder (electrum, wallet — matching the blockchain move already in flight). Remaining interface_adapters/ usage in tor/mempool/swaps/status is out of scope for this PR.
1 parent 8ab40b9 commit 5a26c7f

19 files changed

Lines changed: 172 additions & 325 deletions
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import 'package:bb_mobile/core/blockchain/domain/ports/electrum_server_port.dart';
2+
import 'package:bb_mobile/core/electrum/domain/repositories/electrum_server_repository.dart';
3+
import 'package:bb_mobile/core/electrum/domain/repositories/electrum_settings_repository.dart';
4+
import 'package:bb_mobile/core/electrum/domain/value_objects/electrum_server_network.dart';
5+
import 'package:bb_mobile/core/settings/data/settings_repository.dart';
6+
7+
class ElectrumServerAdapter implements ElectrumServerPort {
8+
final ElectrumServerRepository _electrumServerRepository;
9+
final ElectrumSettingsRepository _electrumSettingsRepository;
10+
final SettingsRepository _settingsRepository;
11+
12+
ElectrumServerAdapter({
13+
required ElectrumServerRepository electrumServerRepository,
14+
required ElectrumSettingsRepository electrumSettingsRepository,
15+
required SettingsRepository settingsRepository,
16+
}) : _electrumServerRepository = electrumServerRepository,
17+
_electrumSettingsRepository = electrumSettingsRepository,
18+
_settingsRepository = settingsRepository;
19+
20+
@override
21+
Future<List<ElectrumServer>> getElectrumServers({
22+
required bool isTestnet,
23+
required bool isLiquid,
24+
}) async {
25+
final network = ElectrumServerNetwork.fromEnvironment(
26+
isTestnet: isTestnet,
27+
isLiquid: isLiquid,
28+
);
29+
30+
final (activeServers, settings, appSettings) = await (
31+
_electrumServerRepository.fetchActiveServers(network: network),
32+
_electrumSettingsRepository.fetchByNetwork(network),
33+
_settingsRepository.fetch(),
34+
).wait;
35+
36+
// Tor proxy applies to Bitcoin only, never Liquid.
37+
final socks5Url = (appSettings.useTorProxy && !isLiquid)
38+
? (settings.socks5 ?? '127.0.0.1:${appSettings.torProxyPort}')
39+
: settings.socks5;
40+
41+
return activeServers
42+
.map(
43+
(e) => ElectrumServer(
44+
url: e.url,
45+
priority: e.priority,
46+
retry: settings.retry,
47+
timeout: settings.timeout,
48+
stopGap: settings.stopGap,
49+
validateDomain: settings.validateDomain,
50+
socks5: socks5Url,
51+
isCustom: e.isCustom,
52+
),
53+
)
54+
.toList();
55+
}
56+
}

lib/core/blockchain/blockchain_locator.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import 'package:bb_mobile/core/blockchain/domain/ports/electrum_server_port.dart
66
import 'package:bb_mobile/core/blockchain/domain/repositories/liquid_blockchain_repository.dart';
77
import 'package:bb_mobile/core/blockchain/domain/usecases/broadcast_bitcoin_transaction_usecase.dart';
88
import 'package:bb_mobile/core/blockchain/domain/usecases/broadcast_liquid_transaction_usecase.dart';
9-
import 'package:bb_mobile/core/blockchain/interface_adapters/adapters/electrum_server_adapter.dart';
10-
import 'package:bb_mobile/core/electrum/application/usecases/get_electrum_servers_to_use_usecase.dart';
9+
import 'package:bb_mobile/core/blockchain/adapters/electrum_server_adapter.dart';
10+
import 'package:bb_mobile/core/electrum/domain/repositories/electrum_server_repository.dart';
11+
import 'package:bb_mobile/core/electrum/domain/repositories/electrum_settings_repository.dart';
1112
import 'package:bb_mobile/core/settings/data/settings_repository.dart';
1213
import 'package:get_it/get_it.dart';
1314

@@ -39,8 +40,9 @@ class BlockchainLocator {
3940
static void registerPorts(GetIt locator) {
4041
locator.registerLazySingleton<ElectrumServerPort>(
4142
() => ElectrumServerAdapter(
42-
getElectrumServersToUseUsecase:
43-
locator<GetElectrumServersToUseUsecase>(),
43+
electrumServerRepository: locator<ElectrumServerRepository>(),
44+
electrumSettingsRepository: locator<ElectrumSettingsRepository>(),
45+
settingsRepository: locator<SettingsRepository>(),
4446
),
4547
);
4648
}

lib/core/blockchain/interface_adapters/adapters/electrum_server_adapter.dart

Lines changed: 0 additions & 53 deletions
This file was deleted.

lib/core/electrum/interface_adapters/repositories/drift_electrum_server_repository.dart renamed to lib/core/electrum/adapters/drift_electrum_server_repository.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,20 @@ class DriftElectrumServerRepository implements ElectrumServerRepository {
6363
.then((models) => models.map((e) => e.toEntity()).toList());
6464
}
6565

66+
@override
67+
Future<List<ElectrumServer>> fetchActiveServers({
68+
required ElectrumServerNetwork network,
69+
}) async {
70+
final servers = await fetchAll(
71+
isTestnet: network.isTestnet,
72+
isLiquid: network.isLiquid,
73+
);
74+
final customServers = servers.where((s) => s.isCustom).toList();
75+
final activeServers = customServers.isNotEmpty ? customServers : servers;
76+
activeServers.sort((a, b) => a.priority.compareTo(b.priority));
77+
return activeServers;
78+
}
79+
6680
@override
6781
Future<void> delete({required String url}) {
6882
return _datasource.deleteServer(url);

lib/core/electrum/interface_adapters/repositories/drift_electrum_settings_repository.dart renamed to lib/core/electrum/adapters/drift_electrum_settings_repository.dart

File renamed without changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import 'package:bb_mobile/core/electrum/domain/entities/electrum_server.dart';
2+
import 'package:bb_mobile/core/electrum/domain/ports/electrum_servers_port.dart';
3+
import 'package:bb_mobile/core/electrum/domain/repositories/electrum_server_repository.dart';
4+
import 'package:bb_mobile/core/electrum/domain/value_objects/electrum_server_network.dart';
5+
6+
class ElectrumServersAdapter implements ElectrumServersPort {
7+
final ElectrumServerRepository _repository;
8+
9+
ElectrumServersAdapter({required ElectrumServerRepository repository})
10+
: _repository = repository;
11+
12+
@override
13+
Future<List<ElectrumServer>> getServersToUse({
14+
required ElectrumServerNetwork network,
15+
}) {
16+
return _repository.fetchActiveServers(network: network);
17+
}
18+
}

lib/core/electrum/interface_adapters/adapters/environment_adapter.dart renamed to lib/core/electrum/adapters/environment_adapter.dart

File renamed without changes.

lib/core/electrum/interface_adapters/adapters/server_status_adapter.dart renamed to lib/core/electrum/adapters/server_status_adapter.dart

File renamed without changes.

lib/core/electrum/application/dtos/requests/get_electrum_servers_to_use_request.dart

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/core/electrum/application/dtos/responses/get_electrum_servers_to_use_response.dart

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)