PaidMarks.of constructor

PaidMarks.of(
  1. Iterable<TimelineItem> items
)

Collects the marks in items.

Implementation

factory PaidMarks.of(Iterable<TimelineItem> items) {
  final orders = <String>{};
  final payments = <String>{};
  void add(Set<String> set, Object? v) {
    if (v is String && v.isNotEmpty) set.add(v);
  }

  for (final i in items) {
    switch (i) {
      case MessageDto(:final metadata?) when metadata['kind'] == 'order_paid':
        add(orders, metadata['order_id']);
      case ConversationEventDto(:final type, :final data) when type == 'order_paid':
        add(orders, data['order_id']);
        add(payments, data['payment_id']);
      default:
        break;
    }
  }
  return PaidMarks(orderIds: orders, paymentIds: payments);
}