Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 23 additions & 6 deletions lib/src/core/di/locator.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
import 'package:get_it/get_it.dart';
import 'package:grpc/grpc.dart';
import 'package:pactus_gui/src/data/models/node_details.dart';
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/data/data_sources/blockchain_remote_data_source.dart';
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/data/repositories/blockchain_repository_impl.dart';
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/data/services/blockchain_service.dart';
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/domain/repositories/blockchain_repository.dart';
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/domain/use_cases/get_blockchain_info_use_case.dart';
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/data/data_sources/blockchain_remote_data_source.dart' show BlockchainRemoteDataSource, BlockchainRemoteDataSourceImpl;
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/data/repositories/blockchain_repository_impl.dart' show BlockchainRepositoryImpl;
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/data/services/blockchain_service.dart'
show BlockchainService;
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/domain/repositories/blockchain_repository.dart' show BlockchainRepository;
import 'package:pactus_gui/src/features/dashboard/sub_modules/blockchain_get_info/domain/use_cases/get_blockchain_info_use_case.dart' show GetBlockchainInfoUseCase;
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/data_sources/transfer_transaction_remote_data_source.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/repositories/transfer_transaction_repository_impl.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/services/transfer_transaction_service.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/repositories/transfer_transaction_repository.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/use_cases/get_transfer_transaction_use_case.dart';
import 'package:shared_preferences/shared_preferences.dart';

final getIt = GetIt.instance;
Expand All @@ -22,7 +28,6 @@ Future<void> setupSharedPreferences({SharedPreferences? param}) async {

Future<void> setupDependencies() async {
// Register `ClientChannel` as factory

getIt
..registerFactory<ClientChannel>(() {
final nodeDetails = getIt<NodeDetails>();
Expand All @@ -37,14 +42,26 @@ Future<void> setupDependencies() async {
})
// Register `services`
..registerSingleton<BlockchainService>(BlockchainService())
..registerSingleton<TransferTransactionService>(
TransferTransactionService(),
)
// Register `DataSources`
..registerSingleton<BlockchainRemoteDataSource>(
BlockchainRemoteDataSourceImpl(getIt()),
)
..registerSingleton<TransferTransactionRemoteDataSource>(
TransferTransactionRemoteDataSourceImpl(getIt()),
)
// Register `Repositories`
..registerSingleton<BlockchainRepository>(BlockchainRepositoryImpl(getIt()))
..registerSingleton<TransferTransactionRepository>(
TransferTransactionRepositoryImpl(getIt()),
)
// Register `UseCases`
..registerSingleton<GetBlockchainInfoUseCase>(
GetBlockchainInfoUseCase(getIt()),
)
..registerSingleton<GetTransferTransactionUseCase>(
GetTransferTransactionUseCase(getIt()),
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/mappers/transfer_transaction_mapper.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/models/transfer_transaction_model.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/services/transfer_transaction_service.dart';

abstract class TransferTransactionRemoteDataSource {
Future<TransferTransactionModel> getRawTransferTransaction(
TransferTransactionParams params,
);
}

class TransferTransactionRemoteDataSourceImpl
implements TransferTransactionRemoteDataSource {
TransferTransactionRemoteDataSourceImpl(this._service);

final TransferTransactionService _service;

@override
Future<TransferTransactionModel> getRawTransferTransaction(
TransferTransactionParams params,
) async {
final response = await _service.getRawTransferTransaction(params);
return TransferTransactionMapper().fromResponse(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:pactus_gui/src/data/models/generated/transaction.pb.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
import '../models/transfer_transaction_model.dart';

class TransferTransactionMapper {
TransferTransactionEntity toEntity(TransferTransactionModel model) {
return TransferTransactionEntity(
rawTransaction: model.rawTransaction,
id: model.id,
);
}

TransferTransactionModel fromResponse(GetRawTransactionResponse response) {
return TransferTransactionModel(
rawTransaction: response.rawTransaction,
id: response.id,
);
}

GetRawTransactionResponse toResponse(TransferTransactionModel model) {
return GetRawTransactionResponse(
rawTransaction: model.rawTransaction,
id: model.id,
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class TransferTransactionModel {
TransferTransactionModel({
required this.rawTransaction,
required this.id,
});

final String rawTransaction;
final String id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/presentation/bloc/get_transfer_bloc.dart';

class TransferTransactionParams {
TransferTransactionParams({
this.lockTime,
required this.sender,
required this.receiver,
required this.amount,
this.fee,
required this.memo,
});
final int? lockTime;
final String sender;
final String receiver;
final int amount;
final int? fee;
final String memo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import 'package:dartz/dartz.dart';
import 'package:pactus_gui/src/data/data_sources/remote_data_state.dart';
import 'package:pactus_gui/src/data/models/error_response_model.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/data_sources/transfer_transaction_remote_data_source.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/mappers/transfer_transaction_mapper.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/repositories/transfer_transaction_repository.dart';

class TransferTransactionRepositoryImpl with TransferTransactionRepository {
TransferTransactionRepositoryImpl(this._dataSource);

final TransferTransactionRemoteDataSource _dataSource;

@override
Future<
Either<RemoteDataState<ErrorResponseModel>,
RemoteDataState<TransferTransactionEntity>>>
getRawTransferTransaction(TransferTransactionParams params) async {
try {
final model = await _dataSource.getRawTransferTransaction(params);
final entity = TransferTransactionMapper().toEntity(model);
return Right(RemoteDataState.success(remoteData: entity));
} on Exception catch (e) {
return Left(RemoteDataState.failed(error: e.toString()));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import 'dart:async';
import 'package:fixnum/fixnum.dart';
import 'package:get_it/get_it.dart';
import 'package:grpc/grpc.dart';
import 'package:pactus_gui/src/data/models/generated/transaction.pbgrpc.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';

class TransferTransactionService {
Future<GetRawTransactionResponse> getRawTransferTransaction(
TransferTransactionParams params,
) async {
final request = GetRawTransferTransactionRequest(
lockTime: params.lockTime,
sender: params.sender,
receiver: params.receiver,
amount: Int64(params.amount),
fee: params.fee != null ? Int64(params.fee!) : null,
memo: params.memo,
);
return TransactionClient(
GetIt.I<ClientChannel>(),
).getRawTransferTransaction(request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class TransferTransactionEntity {
TransferTransactionEntity({
required this.rawTransaction,
required this.id,
});

final String rawTransaction;
final String id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import 'package:dartz/dartz.dart';
import 'package:pactus_gui/src/data/data_sources/remote_data_state.dart';
import 'package:pactus_gui/src/data/models/error_response_model.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';

mixin TransferTransactionRepository {
Future<
Either<RemoteDataState<ErrorResponseModel>,
RemoteDataState<TransferTransactionEntity>>>
getRawTransferTransaction(TransferTransactionParams params);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:dartz/dartz.dart';
import 'package:pactus_gui/src/data/data_sources/remote_data_state.dart';
import 'package:pactus_gui/src/data/models/error_response_model.dart';
import 'package:pactus_gui/src/data/use_cases/use_case.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/repositories/transfer_transaction_repository.dart';

class GetTransferTransactionUseCase
implements
FutureUseCase<
Either<RemoteDataState<ErrorResponseModel>,
RemoteDataState<TransferTransactionEntity>>,
TransferTransactionParams> {
GetTransferTransactionUseCase(this._repository);
final TransferTransactionRepository _repository;

@override
Future<
Either<RemoteDataState<ErrorResponseModel>,
RemoteDataState<TransferTransactionEntity>>> call({
TransferTransactionParams? params,
}) async {
return _repository.getRawTransferTransaction(params!);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/data/params/transfer_transaction_params.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/entities/transfer_transaction_entity.dart';
import 'package:pactus_gui/src/features/transaction/sub_modules/get_raw_transfer_transaction/domain/use_cases/get_transfer_transaction_use_case.dart';

part 'get_transfer_bloc.freezed.dart';
part 'get_transfer_event.dart';
part 'get_transfer_state.dart';

class GetTransferBloc extends Bloc<GetTransferEvent, GetTransferState> {
GetTransferBloc(this._getTransferUseCase)
: super(const GetTransferState.initial()) {
on<GetTransferEvent>((event, emit) async {
await event.when(
getResponse: (params) async {
emit(const GetTransferState.loading());

final result = await _getTransferUseCase(params: params);

result.fold(
(errorState) => emit(
GetTransferState.error(
errorState.remoteData?.msg ?? '',
),
),
(successState) => emit(
GetTransferState.loaded(
successState.remoteData!,
),
),
);
},
resetBloc: () async => emit(const GetTransferState.initial()),
);
});
}

final GetTransferTransactionUseCase _getTransferUseCase;
}
Loading
Loading