Skip to content

Commit 087e092

Browse files
feat(transaction): implement transfer transaction infrastructure
- Added `TransferTransactionRemoteDataSource` and its implementation. - Created `TransferTransactionModel` and `TransferTransactionEntity`. - Implemented `TransferTransactionMapper` for data transformation. - Developed `TransferTransactionRepositoryImpl` for data handling. - Introduced `TransferTransactionService` for remote service calls. - Established BLoC architecture with `GetTransferBloc`, `GetTransferEvent`, and `GetTransferState` for managing transfer transaction state. - inject dependencies of tranfer transaction sub module in `loactor`
1 parent c5fdca3 commit 087e092

14 files changed

+1191
-0
lines changed

lib/src/core/di/locator.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ import 'package:gui/src/features/blockchain_get_info/data/repositories/blockchai
66
import 'package:gui/src/features/blockchain_get_info/data/services/blockchain_service.dart';
77
import 'package:gui/src/features/blockchain_get_info/domain/repositories/blockchain_repository.dart';
88
import 'package:gui/src/features/blockchain_get_info/domain/use_cases/get_blockchain_info_use_case.dart';
9+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/data_sources/transfer_transaction_remote_data_source.dart';
10+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/services/transfer_transaction_service.dart';
11+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/repositories/transfer_transaction_repository_impl.dart';
12+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/repositories/transfer_transaction_repository.dart';
13+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/use_cases/get_transfer_transaction_use_case.dart';
914
import 'package:shared_preferences/shared_preferences.dart';
1015

1116
final getIt = GetIt.instance;
@@ -37,19 +42,31 @@ Future<void> setupDependencies() async {
3742

3843
// Register `services`
3944
..registerSingleton<BlockchainService>(BlockchainService())
45+
..registerSingleton<TransferTransactionService>(
46+
TransferTransactionService(),
47+
)
4048

4149
// Register `DataSources`
4250
..registerSingleton<BlockchainRemoteDataSource>(
4351
BlockchainRemoteDataSourceImpl(getIt()),
4452
)
53+
..registerSingleton<TransferTransactionRemoteDataSource>(
54+
TransferTransactionRemoteDataSourceImpl(getIt()),
55+
)
4556

4657
// Register `Repositories`
4758
..registerSingleton<BlockchainRepository>(
4859
BlockchainRepositoryImpl(getIt()),
4960
)
61+
..registerSingleton<TransferTransactionRepository>(
62+
TransferTransactionRepositoryImpl(getIt()),
63+
)
5064

5165
// Register `UseCases`
5266
..registerSingleton<GetBlockchainInfoUseCase>(
5367
GetBlockchainInfoUseCase(getIt()),
68+
)
69+
..registerSingleton<GetTransferTransactionUseCase>(
70+
GetTransferTransactionUseCase(getIt()),
5471
);
5572
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/mappers/transfer_transaction_mapper.dart';
2+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/models/transfer_transaction_model.dart';
3+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
4+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/services/transfer_transaction_service.dart';
5+
6+
abstract class TransferTransactionRemoteDataSource {
7+
Future<TransferTransactionModel> getRawTransferTransaction(
8+
TransferTransactionParams params,
9+
);
10+
}
11+
12+
class TransferTransactionRemoteDataSourceImpl
13+
implements TransferTransactionRemoteDataSource {
14+
TransferTransactionRemoteDataSourceImpl(this._service);
15+
16+
final TransferTransactionService _service;
17+
18+
@override
19+
Future<TransferTransactionModel> getRawTransferTransaction(
20+
TransferTransactionParams params,
21+
) async {
22+
final response = await _service.getRawTransferTransaction(params);
23+
return TransferTransactionMapper().fromResponse(response);
24+
}
25+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import 'package:gui/src/data/models/generated/transaction.pb.dart';
2+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
3+
import '../models/transfer_transaction_model.dart';
4+
5+
class TransferTransactionMapper {
6+
TransferTransactionEntity toEntity(TransferTransactionModel model) {
7+
return TransferTransactionEntity(
8+
rawTransaction: model.rawTransaction,
9+
id: model.id,
10+
);
11+
}
12+
13+
TransferTransactionModel fromResponse(GetRawTransactionResponse response) {
14+
return TransferTransactionModel(
15+
rawTransaction: response.rawTransaction,
16+
id: response.id,
17+
);
18+
}
19+
20+
GetRawTransactionResponse toResponse(TransferTransactionModel model) {
21+
return GetRawTransactionResponse(
22+
rawTransaction: model.rawTransaction,
23+
id: model.id,
24+
);
25+
}
26+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class TransferTransactionModel {
2+
TransferTransactionModel({
3+
required this.rawTransaction,
4+
required this.id,
5+
});
6+
7+
final String rawTransaction;
8+
final String id;
9+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/presentation/bloc/get_transfer_bloc.dart';
2+
3+
class TransferTransactionParams {
4+
TransferTransactionParams({
5+
this.lockTime,
6+
required this.sender,
7+
required this.receiver,
8+
required this.amount,
9+
this.fee,
10+
required this.memo,
11+
});
12+
final int? lockTime;
13+
final String sender;
14+
final String receiver;
15+
final int amount;
16+
final int? fee;
17+
final String memo;
18+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'package:dartz/dartz.dart';
2+
import 'package:gui/src/data/data_sources/remote_data_state.dart';
3+
import 'package:gui/src/data/models/error_response_model.dart';
4+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/data_sources/transfer_transaction_remote_data_source.dart';
5+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/mappers/transfer_transaction_mapper.dart';
6+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
7+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
8+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/repositories/transfer_transaction_repository.dart';
9+
10+
class TransferTransactionRepositoryImpl with TransferTransactionRepository {
11+
TransferTransactionRepositoryImpl(this._dataSource);
12+
13+
final TransferTransactionRemoteDataSource _dataSource;
14+
15+
@override
16+
Future<
17+
Either<RemoteDataState<ErrorResponseModel>,
18+
RemoteDataState<TransferTransactionEntity>>>
19+
getRawTransferTransaction(TransferTransactionParams params) async {
20+
try {
21+
final model = await _dataSource.getRawTransferTransaction(params);
22+
final entity = TransferTransactionMapper().toEntity(model);
23+
return Right(RemoteDataState.success(remoteData: entity));
24+
} on Exception catch (e) {
25+
return Left(RemoteDataState.failed(error: e.toString()));
26+
}
27+
}
28+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import 'dart:async';
2+
import 'package:fixnum/fixnum.dart';
3+
import 'package:get_it/get_it.dart';
4+
import 'package:grpc/grpc.dart';
5+
import 'package:gui/src/data/models/generated/transaction.pbgrpc.dart';
6+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
7+
8+
class TransferTransactionService {
9+
Future<GetRawTransactionResponse> getRawTransferTransaction(
10+
TransferTransactionParams params,
11+
) async {
12+
final request = GetRawTransferTransactionRequest(
13+
lockTime: params.lockTime,
14+
sender: params.sender,
15+
receiver: params.receiver,
16+
amount: Int64(params.amount),
17+
fee: params.fee != null ? Int64(params.fee!) : null,
18+
memo: params.memo,
19+
);
20+
return TransactionClient(
21+
GetIt.I<ClientChannel>(),
22+
).getRawTransferTransaction(request);
23+
}
24+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class TransferTransactionEntity {
2+
TransferTransactionEntity({
3+
required this.rawTransaction,
4+
required this.id,
5+
});
6+
7+
final String rawTransaction;
8+
final String id;
9+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:dartz/dartz.dart';
2+
import 'package:gui/src/data/data_sources/remote_data_state.dart';
3+
import 'package:gui/src/data/models/error_response_model.dart';
4+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
5+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
6+
7+
mixin TransferTransactionRepository {
8+
Future<
9+
Either<RemoteDataState<ErrorResponseModel>,
10+
RemoteDataState<TransferTransactionEntity>>>
11+
getRawTransferTransaction(TransferTransactionParams params);
12+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import 'package:dartz/dartz.dart';
2+
import 'package:gui/src/data/data_sources/remote_data_state.dart';
3+
import 'package:gui/src/data/models/error_response_model.dart';
4+
import 'package:gui/src/data/use_cases/use_case.dart';
5+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
6+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
7+
import 'package:gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/repositories/transfer_transaction_repository.dart';
8+
9+
class GetTransferTransactionUseCase
10+
implements
11+
FutureUseCase<
12+
Either<RemoteDataState<ErrorResponseModel>,
13+
RemoteDataState<TransferTransactionEntity>>,
14+
TransferTransactionParams> {
15+
GetTransferTransactionUseCase(this._repository);
16+
final TransferTransactionRepository _repository;
17+
18+
@override
19+
Future<
20+
Either<RemoteDataState<ErrorResponseModel>,
21+
RemoteDataState<TransferTransactionEntity>>> call({
22+
TransferTransactionParams? params,
23+
}) async {
24+
return _repository.getRawTransferTransaction(params!);
25+
}
26+
}

0 commit comments

Comments
 (0)