storeInvoice method

  1. @override
Future<void> storeInvoice(
  1. InvoiceReadModel invoice
)
override

Store an invoice read model (insert, or replace an existing row with the same invoiceId).

Implementation

@override
Future<void> storeInvoice(InvoiceReadModel invoice) async {
  _ensureInitialized();

  await _pool!.execute(
    Sql.named('''
      INSERT INTO invoices (
        invoice_id, wallet_id, addresses_json, amount, description,
        status, created_at, expires_at, paid_at, payment_txid,
        amount_received, metadata_json, outputs_json
      ) VALUES (
        @invoiceId, @walletId, @addressesJson, @amount, @description,
        @status, @createdAt, @expiresAt, @paidAt, @paymentTxid,
        @amountReceived, CAST(@metadataJson AS JSONB),
        CAST(@outputsJson AS JSONB)
      )
      ON CONFLICT (invoice_id) DO UPDATE SET
        wallet_id = EXCLUDED.wallet_id,
        addresses_json = EXCLUDED.addresses_json,
        amount = EXCLUDED.amount,
        description = EXCLUDED.description,
        status = EXCLUDED.status,
        expires_at = EXCLUDED.expires_at,
        paid_at = EXCLUDED.paid_at,
        payment_txid = EXCLUDED.payment_txid,
        amount_received = EXCLUDED.amount_received,
        metadata_json = EXCLUDED.metadata_json,
        outputs_json = EXCLUDED.outputs_json
    '''),
    parameters: {
      'invoiceId': invoice.invoiceId,
      'walletId': invoice.walletId,
      'addressesJson': jsonEncode(invoice.addresses),
      'amount': invoice.amount.toInt(),
      'description': invoice.description,
      'status': invoice.status.name,
      'createdAt': invoice.createdAt,
      'expiresAt': invoice.expiresAt,
      'paidAt': invoice.paidAt,
      'paymentTxid': invoice.paymentTxid,
      'amountReceived': invoice.amountReceived?.toInt(),
      'metadataJson': jsonEncode(invoice.metadata),
      'outputsJson': invoice.outputs == null
          ? null
          : jsonEncode(invoice.outputs!.map((o) => o.toMap()).toList()),
    },
  );
}