Skip to content

Commit c2a3044

Browse files
Merge pull request #27 from solid-software/list_expanded_subscriptions
Add SubscriptionResource.listExpanded method
2 parents 9013819 + 67b478d commit c2a3044

1 file changed

Lines changed: 46 additions & 6 deletions

File tree

lib/src/resources/subscription.dart

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ import '../client.dart';
99
import '_resource.dart';
1010

1111
class SubscriptionResource extends Resource<Subscription> {
12+
static const _resourceName = 'subscriptions';
13+
1214
SubscriptionResource(Client client) : super(client);
1315

1416
Future<Subscription> retrieve(String id) async {
15-
final response = await get('subscriptions/$id');
17+
final response = await get('$_resourceName/$id');
1618
return Subscription.fromJson(response);
1719
}
1820

@@ -22,7 +24,7 @@ class SubscriptionResource extends Resource<Subscription> {
2224
}) async {
2325
final expandableFields = _expandableFields(expand);
2426
final response = await get(
25-
'subscriptions/$id',
27+
'$_resourceName/$id',
2628
queryParameters: {
2729
'expand': expandableFields.map((e) => e.field).toList(),
2830
},
@@ -58,17 +60,55 @@ class SubscriptionResource extends Resource<Subscription> {
5860

5961
Future<DataList<Subscription>> list(
6062
[ListSubscriptionsRequest? request]) async {
61-
final map = await get('subscriptions', queryParameters: request?.toJson());
63+
final map = await get(_resourceName, queryParameters: request?.toJson());
6264
return DataList<Subscription>.fromJson(
6365
map, (value) => Subscription.fromJson(value as Map<String, dynamic>));
6466
}
6567

68+
Future<DataList<SubscriptionExpanded>> listExpanded({
69+
required Set<SubscriptionExpandableField> expand,
70+
ListSubscriptionsRequest? request,
71+
}) async {
72+
final expandableFields = _expandableFields(expand);
73+
74+
final response = await get(
75+
_resourceName,
76+
queryParameters: {
77+
...?request?.toJson(),
78+
'expand': expandableFields.map((e) => 'data.${e.field}').toList(),
79+
},
80+
);
81+
82+
return DataList<SubscriptionExpanded>.fromJson(
83+
response,
84+
(value) => _parseSubscriptionExpanded(
85+
value as Map<String, dynamic>,
86+
expand,
87+
),
88+
);
89+
}
90+
91+
SubscriptionExpanded _parseSubscriptionExpanded(
92+
Map<String, dynamic> json,
93+
Set<SubscriptionExpandableField> expand,
94+
) {
95+
List<Discount>? discounts;
96+
if (expand.contains(SubscriptionExpandableField.discounts)) {
97+
discounts = _DiscountsExpandableField().extract(json);
98+
}
99+
100+
return SubscriptionExpanded(
101+
subscription: Subscription.fromJson(json),
102+
discounts: discounts,
103+
);
104+
}
105+
66106
Future<DataList<Subscription>> search({
67107
/// https://docs.stripe.com/search#query-fields-for-subscriptions
68108
required String queryString,
69109
}) async {
70110
final Map<String, dynamic> map = await get(
71-
'subscriptions/search',
111+
'$_resourceName/search',
72112
queryParameters: {'query': queryString},
73113
);
74114

@@ -87,7 +127,7 @@ class SubscriptionResource extends Resource<Subscription> {
87127
required SubscriptionUpdate update,
88128
}) async {
89129
final response = await post(
90-
'subscriptions/$id',
130+
'$_resourceName/$id',
91131
data: update.toJson(),
92132
);
93133

@@ -101,7 +141,7 @@ class SubscriptionResource extends Resource<Subscription> {
101141
bool? prorate,
102142
}) async {
103143
final response = await delete(
104-
'subscriptions/$id',
144+
'$_resourceName/$id',
105145
data: {
106146
if (invoiceNow != null) 'invoice_now': invoiceNow,
107147
if (prorate != null) 'prorate': invoiceNow,

0 commit comments

Comments
 (0)