49 lines
1.3 KiB
Dart
49 lines
1.3 KiB
Dart
import 'package:json_annotation/json_annotation.dart';
|
|
|
|
import 'package:pshared/data/dto/payment/operation.dart';
|
|
import 'package:pshared/data/dto/payment/intent/payment.dart';
|
|
import 'package:pshared/data/dto/payment/payment_quote.dart';
|
|
|
|
part 'payment.g.dart';
|
|
|
|
@JsonSerializable()
|
|
class PaymentDTO {
|
|
final String? paymentRef;
|
|
final String? idempotencyKey;
|
|
final String? state;
|
|
final String? failureCode;
|
|
final String? failureReason;
|
|
final PaymentIntentDTO? intent;
|
|
final List<PaymentOperationDTO> operations;
|
|
final PaymentQuoteDTO? lastQuote;
|
|
final Map<String, String>? metadata;
|
|
final String? createdAt;
|
|
|
|
const PaymentDTO({
|
|
this.paymentRef,
|
|
this.idempotencyKey,
|
|
this.state,
|
|
this.failureCode,
|
|
this.failureReason,
|
|
this.intent,
|
|
this.operations = const <PaymentOperationDTO>[],
|
|
this.lastQuote,
|
|
this.metadata,
|
|
this.createdAt,
|
|
});
|
|
|
|
factory PaymentDTO.fromJson(Map<String, dynamic> json) =>
|
|
_$PaymentDTOFromJson(_normalizeJson(json));
|
|
Map<String, dynamic> toJson() => _$PaymentDTOToJson(this);
|
|
|
|
static Map<String, dynamic> _normalizeJson(Map<String, dynamic> json) {
|
|
if (json.containsKey('metadata') || !json.containsKey('meta')) {
|
|
return json;
|
|
}
|
|
|
|
final normalized = Map<String, dynamic>.from(json);
|
|
normalized['metadata'] = normalized['meta'];
|
|
return normalized;
|
|
}
|
|
}
|