Skip to content

Commit 94dfda9

Browse files
Merge pull request #290 from akhil-deriv/akhil/1340/fetching_the_list_of_wallets_available_to_create
akhil/1340/fetching_the_list_of_wallets_available_to_create
2 parents d25811b + fb03e94 commit 94dfda9

7 files changed

+364
-4
lines changed

binary-websocket-api

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'package:deriv_dependency_injector/dependency_injector.dart';
2+
import 'package:flutter_deriv_api/api/exceptions/exceptions.dart';
3+
import 'package:flutter_deriv_api/api/response/available_accounts_response_result.dart';
4+
import 'package:flutter_deriv_api/basic_api/generated/available_accounts_receive.dart';
5+
import 'package:flutter_deriv_api/basic_api/generated/available_accounts_send.dart';
6+
import 'package:flutter_deriv_api/helpers/helpers.dart';
7+
import 'package:flutter_deriv_api/services/connection/api_manager/base_api.dart';
8+
9+
/// The extended version of the [AvailableAccountsResponse] class to implement
10+
/// the API call methods.
11+
class AvailableAccountsResponseExtended extends AvailableAccountsResponse {
12+
static final BaseAPI _api = Injector()<BaseAPI>();
13+
14+
/// Fetches the available wallets that can be created
15+
static Future<AvailableAccountsResponse> fetchAvailableWalletsToCreate({
16+
required AvailableAccountsRequest request,
17+
}) async {
18+
final AvailableAccountsReceive response = await _api.call(request: request);
19+
20+
checkException(
21+
response: response,
22+
exceptionCreator: ({BaseExceptionModel? baseExceptionModel}) =>
23+
BaseAPIException(baseExceptionModel: baseExceptionModel),
24+
);
25+
26+
return AvailableAccountsResponse.fromJson(response.availableAccounts);
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
// ignore_for_file: prefer_single_quotes, unnecessary_import, unused_import
2+
3+
import 'package:equatable/equatable.dart';
4+
5+
import 'package:flutter_deriv_api/helpers/helpers.dart';
6+
7+
/// Available accounts response model class.
8+
abstract class AvailableAccountsResponseModel {
9+
/// Initializes Available accounts response model class .
10+
const AvailableAccountsResponseModel({
11+
this.availableAccounts,
12+
});
13+
14+
/// Returns list of accounts that are available to be created - limited to wallets and can be extended
15+
final AvailableAccounts? availableAccounts;
16+
}
17+
18+
/// Available accounts response class.
19+
class AvailableAccountsResponse extends AvailableAccountsResponseModel {
20+
/// Initializes Available accounts response class.
21+
const AvailableAccountsResponse({
22+
super.availableAccounts,
23+
});
24+
25+
/// Creates an instance from JSON.
26+
factory AvailableAccountsResponse.fromJson(
27+
dynamic availableAccountsJson,
28+
) =>
29+
AvailableAccountsResponse(
30+
availableAccounts: availableAccountsJson == null
31+
? null
32+
: AvailableAccounts.fromJson(availableAccountsJson),
33+
);
34+
35+
/// Converts an instance to JSON.
36+
Map<String, dynamic> toJson() {
37+
final Map<String, dynamic> resultMap = <String, dynamic>{};
38+
39+
if (availableAccounts != null) {
40+
resultMap['available_accounts'] = availableAccounts!.toJson();
41+
}
42+
43+
return resultMap;
44+
}
45+
46+
/// Creates a copy of instance with given parameters.
47+
AvailableAccountsResponse copyWith({
48+
AvailableAccounts? availableAccounts,
49+
}) =>
50+
AvailableAccountsResponse(
51+
availableAccounts: availableAccounts ?? this.availableAccounts,
52+
);
53+
}
54+
55+
/// AccountTypeEnum mapper.
56+
final Map<String, AccountTypeEnum> accountTypeEnumMapper =
57+
<String, AccountTypeEnum>{
58+
"doughflow": AccountTypeEnum.doughflow,
59+
"crypto": AccountTypeEnum.crypto,
60+
"paymentagent": AccountTypeEnum.paymentagent,
61+
"paymentagent_client": AccountTypeEnum.paymentagentClient,
62+
"p2p": AccountTypeEnum.p2p,
63+
};
64+
65+
/// AccountType Enum.
66+
enum AccountTypeEnum {
67+
/// doughflow.
68+
doughflow,
69+
70+
/// crypto.
71+
crypto,
72+
73+
/// paymentagent.
74+
paymentagent,
75+
76+
/// paymentagent_client.
77+
paymentagentClient,
78+
79+
/// p2p.
80+
p2p,
81+
}
82+
/// Available accounts model class.
83+
abstract class AvailableAccountsModel {
84+
/// Initializes Available accounts model class .
85+
const AvailableAccountsModel({
86+
required this.wallets,
87+
});
88+
89+
/// Wallet account types that are available to be created
90+
final List<WalletsItem> wallets;
91+
}
92+
93+
/// Available accounts class.
94+
class AvailableAccounts extends AvailableAccountsModel {
95+
/// Initializes Available accounts class.
96+
const AvailableAccounts({
97+
required super.wallets,
98+
});
99+
100+
/// Creates an instance from JSON.
101+
factory AvailableAccounts.fromJson(Map<String, dynamic> json) =>
102+
AvailableAccounts(
103+
wallets: List<WalletsItem>.from(
104+
json['wallets'].map(
105+
(dynamic item) => WalletsItem.fromJson(item),
106+
),
107+
),
108+
);
109+
110+
/// Converts an instance to JSON.
111+
Map<String, dynamic> toJson() {
112+
final Map<String, dynamic> resultMap = <String, dynamic>{};
113+
114+
resultMap['wallets'] = wallets
115+
.map<dynamic>(
116+
(WalletsItem item) => item.toJson(),
117+
)
118+
.toList();
119+
120+
return resultMap;
121+
}
122+
123+
/// Creates a copy of instance with given parameters.
124+
AvailableAccounts copyWith({
125+
List<WalletsItem>? wallets,
126+
}) =>
127+
AvailableAccounts(
128+
wallets: wallets ?? this.wallets,
129+
);
130+
}
131+
/// Wallets item model class.
132+
abstract class WalletsItemModel {
133+
/// Initializes Wallets item model class .
134+
const WalletsItemModel({
135+
required this.landingCompany,
136+
required this.currency,
137+
required this.accountType,
138+
});
139+
140+
/// Landing Company of wallet.
141+
final String landingCompany;
142+
143+
/// Currency of wallet
144+
final String currency;
145+
146+
/// Account type of wallet
147+
final AccountTypeEnum accountType;
148+
}
149+
150+
/// Wallets item class.
151+
class WalletsItem extends WalletsItemModel {
152+
/// Initializes Wallets item class.
153+
const WalletsItem({
154+
required super.accountType,
155+
required super.currency,
156+
required super.landingCompany,
157+
});
158+
159+
/// Creates an instance from JSON.
160+
factory WalletsItem.fromJson(Map<String, dynamic> json) => WalletsItem(
161+
accountType: accountTypeEnumMapper[json['account_type']]!,
162+
currency: json['currency'],
163+
landingCompany: json['landing_company'],
164+
);
165+
166+
/// Converts an instance to JSON.
167+
Map<String, dynamic> toJson() {
168+
final Map<String, dynamic> resultMap = <String, dynamic>{};
169+
170+
resultMap['account_type'] = accountTypeEnumMapper.entries
171+
.firstWhere((MapEntry<String, AccountTypeEnum> entry) =>
172+
entry.value == accountType)
173+
.key;
174+
resultMap['currency'] = currency;
175+
resultMap['landing_company'] = landingCompany;
176+
177+
return resultMap;
178+
}
179+
180+
/// Creates a copy of instance with given parameters.
181+
WalletsItem copyWith({
182+
AccountTypeEnum? accountType,
183+
String? currency,
184+
String? landingCompany,
185+
}) =>
186+
WalletsItem(
187+
accountType: accountType ?? this.accountType,
188+
currency: currency ?? this.currency,
189+
landingCompany: landingCompany ?? this.landingCompany,
190+
);
191+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/// Generated automatically from flutter_deriv_api|lib/basic_api/generated/available_accounts_receive.json.
2+
3+
// ignore_for_file: always_put_required_named_parameters_first
4+
5+
import '../response.dart';
6+
7+
/// Available accounts receive class.
8+
class AvailableAccountsReceive extends Response {
9+
/// Initialize AvailableAccountsReceive.
10+
const AvailableAccountsReceive({
11+
this.availableAccounts,
12+
super.echoReq,
13+
super.error,
14+
super.msgType,
15+
super.reqId,
16+
});
17+
18+
/// Creates an instance from JSON.
19+
factory AvailableAccountsReceive.fromJson(Map<String, dynamic> json) =>
20+
AvailableAccountsReceive(
21+
availableAccounts: json['available_accounts'] as Map<String, dynamic>?,
22+
echoReq: json['echo_req'] as Map<String, dynamic>?,
23+
error: json['error'] as Map<String, dynamic>?,
24+
msgType: json['msg_type'] as String?,
25+
reqId: json['req_id'] as int?,
26+
);
27+
28+
/// Returns list of accounts that are available to be created - limited to wallets and can be extended
29+
final Map<String, dynamic>? availableAccounts;
30+
31+
/// Converts this instance to JSON
32+
@override
33+
Map<String, dynamic> toJson() => <String, dynamic>{
34+
'available_accounts': availableAccounts,
35+
'echo_req': echoReq,
36+
'error': error,
37+
'msg_type': msgType,
38+
'req_id': reqId,
39+
};
40+
41+
/// Creates a copy of instance with given parameters
42+
@override
43+
AvailableAccountsReceive copyWith({
44+
Map<String, dynamic>? availableAccounts,
45+
Map<String, dynamic>? echoReq,
46+
Map<String, dynamic>? error,
47+
String? msgType,
48+
int? reqId,
49+
}) =>
50+
AvailableAccountsReceive(
51+
availableAccounts: availableAccounts ?? this.availableAccounts,
52+
echoReq: echoReq ?? this.echoReq,
53+
error: error ?? this.error,
54+
msgType: msgType ?? this.msgType,
55+
reqId: reqId ?? this.reqId,
56+
);
57+
58+
/// Override equatable class.
59+
@override
60+
List<Object?> get props => <Object?>[];
61+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/// Generated automatically from flutter_deriv_api|lib/basic_api/generated/available_accounts_send.json.
2+
3+
// ignore_for_file: always_put_required_named_parameters_first
4+
5+
import '../request.dart';
6+
7+
/// Available accounts request class.
8+
class AvailableAccountsRequest extends Request {
9+
/// Initialize AvailableAccountsRequest.
10+
const AvailableAccountsRequest({
11+
this.availableAccounts = true,
12+
required this.categories,
13+
this.loginid,
14+
super.msgType = 'available_accounts',
15+
super.passthrough,
16+
super.reqId,
17+
});
18+
19+
/// Creates an instance from JSON.
20+
factory AvailableAccountsRequest.fromJson(Map<String, dynamic> json) =>
21+
AvailableAccountsRequest(
22+
availableAccounts: json['available_accounts'] == null
23+
? null
24+
: json['available_accounts'] == 1,
25+
categories: (json['categories'] as List<dynamic>?)
26+
?.map<String>((dynamic item) => item as String)
27+
.toList(),
28+
loginid: json['loginid'] as String?,
29+
passthrough: json['passthrough'] as Map<String, dynamic>?,
30+
reqId: json['req_id'] as int?,
31+
);
32+
33+
/// Must be `true`
34+
final bool? availableAccounts;
35+
36+
/// List of account categories that needs to received.
37+
final List<String>? categories;
38+
39+
/// [Optional] The login id of the user. If left unspecified, it defaults to the initial authorized token's login id.
40+
final String? loginid;
41+
42+
/// Converts this instance to JSON
43+
@override
44+
Map<String, dynamic> toJson() => <String, dynamic>{
45+
'available_accounts': availableAccounts == null
46+
? null
47+
: availableAccounts!
48+
? 1
49+
: 0,
50+
'categories': categories,
51+
'loginid': loginid,
52+
'passthrough': passthrough,
53+
'req_id': reqId,
54+
};
55+
56+
/// Creates a copy of instance with given parameters
57+
@override
58+
AvailableAccountsRequest copyWith({
59+
bool? availableAccounts,
60+
List<String>? categories,
61+
String? loginid,
62+
Map<String, dynamic>? passthrough,
63+
int? reqId,
64+
}) =>
65+
AvailableAccountsRequest(
66+
availableAccounts: availableAccounts ?? this.availableAccounts,
67+
categories: categories ?? this.categories,
68+
loginid: loginid ?? this.loginid,
69+
passthrough: passthrough ?? this.passthrough,
70+
reqId: reqId ?? this.reqId,
71+
);
72+
73+
/// Override equatable class.
74+
@override
75+
List<Object?> get props => <Object?>[];
76+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"methods": "",
3+
"imports": "import 'package:flutter_deriv_api/helpers/helpers.dart';\n"
4+
}

0 commit comments

Comments
 (0)