Skip to content

Commit

Permalink
Merge pull request #20 from solid-software/resuource-subscription_sch…
Browse files Browse the repository at this point in the history
…edule

add subscription schedule resource
yurii-prykhodko-solid authored May 27, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
2 parents abcbe5d + ab5a0f2 commit a1c8c4e
Showing 8 changed files with 422 additions and 27 deletions.
3 changes: 3 additions & 0 deletions lib/messages.dart
Original file line number Diff line number Diff line change
@@ -28,14 +28,17 @@ part 'src/messages/requests/create_portal_session.dart';
part 'src/messages/requests/create_price.dart';
part 'src/messages/requests/create_product.dart';
part 'src/messages/requests/create_refund.dart';
part 'src/messages/requests/create_subscription_schedule.dart';
part 'src/messages/requests/list_prices.dart';
part 'src/messages/requests/list_products.dart';
part 'src/messages/requests/list_subscription_items.dart';
part 'src/messages/requests/list_subscriptions.dart';
part 'src/messages/requests/update_customer.dart';
part 'src/messages/requests/update_subscription.dart';
part 'src/messages/requests/update_subscription_item.dart';
part 'src/messages/requests/update_subscription_schedule.dart';
part 'src/messages/shipping_specification.dart';
part 'src/messages/stripe_api_error.dart';
part 'src/messages/subscription.dart';
part 'src/messages/subscription_item.dart';
part 'src/messages/subscription_schedule.dart';
230 changes: 203 additions & 27 deletions lib/messages.g.dart

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions lib/src/messages/_message.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
part of '../../messages.dart';

abstract class Message {
const Message();

Map<String, dynamic> toJson();
}
18 changes: 18 additions & 0 deletions lib/src/messages/requests/create_subscription_schedule.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
part of '../../../messages.dart';

@JsonSerializable()
class CreateSubscriptionScheduleRequest extends Message {
final String? fromSubscription;

const CreateSubscriptionScheduleRequest({
this.fromSubscription,
});

factory CreateSubscriptionScheduleRequest.fromJson(
Map<String, dynamic> json) =>
_$CreateSubscriptionScheduleRequestFromJson(json);

@override
Map<String, dynamic> toJson() =>
_$CreateSubscriptionScheduleRequestToJson(this);
}
65 changes: 65 additions & 0 deletions lib/src/messages/requests/update_subscription_schedule.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
part of '../../../messages.dart';

@JsonSerializable()
class UpdateSubscriptionScheduleRequest extends Message {
final List<UpdateSubscriptionSchedulePhase> phases;

const UpdateSubscriptionScheduleRequest({
required this.phases,
});

factory UpdateSubscriptionScheduleRequest.fromJson(
Map<String, dynamic> json) =>
_$UpdateSubscriptionScheduleRequestFromJson(json);

@override
Map<String, dynamic> toJson() =>
_$UpdateSubscriptionScheduleRequestToJson(this);
}

@JsonSerializable()
class UpdateSubscriptionSchedulePhase extends Message {
final String id;

@TimestampConverter()
final DateTime? startDate;

@TimestampConverter()
final DateTime? endDate;

final List<UpdateSubscriptionSchedulePhaseItem> items;

const UpdateSubscriptionSchedulePhase({
required this.id,
this.startDate,
this.endDate,
required this.items,
});

factory UpdateSubscriptionSchedulePhase.fromJson(Map<String, dynamic> json) =>
_$UpdateSubscriptionSchedulePhaseFromJson(json);

@override
Map<String, dynamic> toJson() =>
_$UpdateSubscriptionSchedulePhaseToJson(this);
}

@JsonSerializable()
class UpdateSubscriptionSchedulePhaseItem extends Message {
final String price;

final int quantity;

const UpdateSubscriptionSchedulePhaseItem({
required this.price,
required this.quantity,
});

factory UpdateSubscriptionSchedulePhaseItem.fromJson(
Map<String, dynamic> json) =>
_$UpdateSubscriptionSchedulePhaseItemFromJson(json);

@override
Map<String, dynamic> toJson() =>
_$UpdateSubscriptionSchedulePhaseItemToJson(this);
}
77 changes: 77 additions & 0 deletions lib/src/messages/subscription_schedule.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
part of '../../messages.dart';

enum _SubscriptionScheduleObject {
@JsonValue('subscription_schedule')
subscriptionSchedule,
}

@JsonSerializable()
class SubscriptionSchedule extends Message {
final _SubscriptionScheduleObject object;

final String id;

final String? customer;

final Map<String, dynamic>? metadata;

final List<SubscriptionSchedulePhase> phases;

const SubscriptionSchedule({
required this.object,
required this.id,
this.customer,
this.metadata,
required this.phases,
});

factory SubscriptionSchedule.fromJson(Map<String, dynamic> json) =>
_$SubscriptionScheduleFromJson(json);

@override
Map<String, dynamic> toJson() => _$SubscriptionScheduleToJson(this);
}

@JsonSerializable()
class SubscriptionSchedulePhase extends Message {
final String id;

@TimestampConverter()
final DateTime? startDate;

@TimestampConverter()
final DateTime? endDate;

final List<SubscriptionSchedulePhaseItem> items;

const SubscriptionSchedulePhase({
required this.id,
this.startDate,
this.endDate,
required this.items,
});

factory SubscriptionSchedulePhase.fromJson(Map<String, dynamic> json) =>
_$SubscriptionSchedulePhaseFromJson(json);

@override
Map<String, dynamic> toJson() => _$SubscriptionSchedulePhaseToJson(this);
}

@JsonSerializable()
class SubscriptionSchedulePhaseItem extends Message {
final String price;

final int quantity;

const SubscriptionSchedulePhaseItem({
required this.price,
required this.quantity,
});

factory SubscriptionSchedulePhaseItem.fromJson(Map<String, dynamic> json) =>
_$SubscriptionSchedulePhaseItemFromJson(json);

@override
Map<String, dynamic> toJson() => _$SubscriptionSchedulePhaseItemToJson(this);
}
49 changes: 49 additions & 0 deletions lib/src/resources/subscription_schedule.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import '../../messages.dart';
import '../client.dart';
import '_resource.dart';

class SubscriptionScheduleResource extends Resource {
SubscriptionScheduleResource(Client client) : super(client);

/// https://stripe.com/docs/api/subscription_schedules/retrieve
Future<SubscriptionSchedule> retrieve(String id) async {
final response = await get('subscription_schedules/$id');

return SubscriptionSchedule.fromJson(response);
}

/// https://stripe.com/docs/api/subscription_schedules/list
Future<DataList<SubscriptionSchedule>> list() async {
final map = await get('subscription_schedules');

return DataList<SubscriptionSchedule>.fromJson(
map,
(value) => SubscriptionSchedule.fromJson(value as Map<String, dynamic>),
);
}

/// https://stripe.com/docs/api/subscription_schedules/create
Future<SubscriptionSchedule> create(
CreateSubscriptionScheduleRequest request,
) async {
final response = await post(
'subscription_schedules',
data: request.toJson(),
);

return SubscriptionSchedule.fromJson(response);
}

/// https://stripe.com/docs/api/subscription_schedules/update
Future<SubscriptionSchedule> update(
String id,
UpdateSubscriptionScheduleRequest request,
) async {
final response = await post(
'subscription_schedules/$id',
data: request.toJson(),
);

return SubscriptionSchedule.fromJson(response);
}
}
5 changes: 5 additions & 0 deletions lib/stripe.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
library stripe;

import 'package:meta/meta.dart';
import 'package:stripe/src/resources/subscription_schedule.dart';

import 'src/client.dart';
import 'src/resources/balance_transaction.dart';
@@ -62,6 +63,9 @@ class Stripe {
/// https://stripe.com/docs/api/subscription_items
final SubscriptionItemResource subscriptionItem;

/// https://stripe.com/docs/api/subscription_schedules
final SubscriptionScheduleResource subscriptionSchedule;

/// https://stripe.com/docs/api/balance_transactions
final BalanceTransactionResource balanceTransaction;

@@ -81,6 +85,7 @@ class Stripe {
product = ProductResource(client),
subscription = SubscriptionResource(client),
subscriptionItem = SubscriptionItemResource(client),
subscriptionSchedule = SubscriptionScheduleResource(client),
charge = ChargeResource(client),
balanceTransaction = BalanceTransactionResource(client);
}

0 comments on commit a1c8c4e

Please sign in to comment.