import 'package:json_annotation/json_annotation.dart'; import 'package:isar/isar.dart'; import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:mnemo_cards_common/mnemo_cards_common.dart'; import 'product_model.dart'; import 'user/user_model.dart'; part 'payment.g.dart'; @JsonSerializable() @Collection() @CopyWith() class PaymentModel { Id? id; final String amount; final String currency; final IsarLink user = IsarLink(); @JsonKey(unknownEnumValue: PaymentStatus.unknown) @enumerated final PaymentStatus status; @JsonKey(unknownEnumValue: PaymentSystem.unknown) @enumerated final PaymentSystem paymentSystem; final String? externalToken; final String? meta; final DateTime date; final int userId; @deprecated final List packs; @deprecated final bool subscription; final List products; PaymentModel({ required this.amount, required this.currency, required this.status, required this.paymentSystem, required this.userId, required this.date, required this.products, this.packs = const [], this.subscription = false, this.externalToken, this.meta, this.id, }); // Model to reserve isar id for future payment factory PaymentModel.empty({ required int userId, required DateTime date, }) => PaymentModel( amount: '', currency: '', status: PaymentStatus.created, paymentSystem: PaymentSystem.unknown, products: [], userId: userId, date: date, ); factory PaymentModel.promocode({ required int userId, required DateTime date, required List products, }) => PaymentModel( amount: '0', currency: 'PROMO', status: PaymentStatus.succeeded, paymentSystem: PaymentSystem.promoCode, userId: userId, date: DateTime.now(), products: products.toBaseList(), ); factory PaymentModel.adView({ required int userId, required DateTime date, required List products, }) => PaymentModel( amount: '0', currency: 'AD_PROMO', status: PaymentStatus.succeeded, paymentSystem: PaymentSystem.adView, userId: userId, date: DateTime.now(), products: products.toBaseList(), ); PaymentModel.yooKassa({ required this.amount, required this.currency, required this.userId, required this.externalToken, required this.date, required this.products, this.packs = const [], this.subscription = false, this.meta, this.id, }) : paymentSystem = PaymentSystem.yookassa, status = PaymentStatus.created; PaymentModel.google({ required this.amount, required this.currency, required this.userId, required this.externalToken, required this.date, required this.products, this.packs = const [], this.subscription = false, this.meta, this.id, this.status = PaymentStatus.created, }) : paymentSystem = PaymentSystem.google; PaymentModel.rustore({ required this.amount, required this.currency, required this.userId, required this.externalToken, required this.date, required this.products, this.packs = const [], this.subscription = false, this.meta, this.id, this.status = PaymentStatus.created, }) : paymentSystem = PaymentSystem.rustore; factory PaymentModel.fromJson(Map json) => _$PaymentModelFromJson(json); Map toJson() => _$PaymentModelToJson(this); }