From 1d0b0f5af98fa94f1249998c951c98b929144359 Mon Sep 17 00:00:00 2001 From: Eric Schultz Date: Wed, 5 May 2021 17:11:35 -0500 Subject: [PATCH] Correct the TS interface for subtransactions --- .../Transaction/OfflineTransaction/Charge.ts | 5 ++- .../Transaction/OfflineTransaction/Dispute.ts | 5 ++- .../Transaction/OfflineTransaction/Refund.ts | 5 ++- .../Transaction/OfflineTransaction/index.ts | 6 ++-- .../Nonprofit/Transaction/Payment.ts | 10 ++++-- .../Nonprofit/Transaction/Subtransaction.ts | 19 +++++++++++ .../Nonprofit/Transaction/index.ts | 34 +++++-------------- docs/event_definitions/common.ts | 23 +++++++++++-- 8 files changed, 69 insertions(+), 38 deletions(-) create mode 100644 docs/event_definitions/Nonprofit/Transaction/Subtransaction.ts diff --git a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Charge.ts b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Charge.ts index 3dc61c9a..fccc5585 100644 --- a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Charge.ts +++ b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Charge.ts @@ -1,11 +1,14 @@ // License: LGPL-3.0-or-later import type { HoudiniEvent } from "../../../common"; import type { CommonOfflineTransactionPayment } from '.'; +import type { PaymentAsId } from ".."; -export interface Charge extends CommonOfflineTransactionPayment { +export interface ChargeAsId extends PaymentAsId { object: 'offline_transaction_charge'; } +export type Charge = CommonOfflineTransactionPayment & ChargeAsId; + export type ChargeCreated = HoudiniEvent<'offline_transaction_charge.created', Charge>; export type ChargeUpdated = HoudiniEvent<'offline_transaction_charge.updated', Charge>; export type ChargeDeleted = HoudiniEvent<'offline_transaction_charge.deleted', Charge>; diff --git a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Dispute.ts b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Dispute.ts index f2ad06bf..66d720e1 100644 --- a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Dispute.ts +++ b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Dispute.ts @@ -1,10 +1,13 @@ // License: LGPL-3.0-or-later import type { HoudiniEvent } from "../../../common"; import type { CommonOfflineTransactionPayment } from '.'; +import type { PaymentAsId } from ".."; -export interface Dispute extends CommonOfflineTransactionPayment { + +export interface DisputeAsId extends PaymentAsId { object: 'offline_transaction_dispute'; } +export type Dispute = CommonOfflineTransactionPayment & DisputeAsId; export type DisputeCreated = HoudiniEvent<'offline_transaction_dispute.created', Dispute>; export type DisputeUpdated = HoudiniEvent<'offline_transaction_dispute.updated', Dispute>; diff --git a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Refund.ts b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Refund.ts index 70b15251..1db7d3b5 100644 --- a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Refund.ts +++ b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/Refund.ts @@ -1,11 +1,14 @@ // License: LGPL-3.0-or-later import type { HoudiniEvent } from "../../../common"; import type { CommonOfflineTransactionPayment } from '.'; +import type { PaymentAsId } from ".."; -export interface Refund extends CommonOfflineTransactionPayment { +export interface RefundAsId extends PaymentAsId { object: 'offline_transaction_refund'; } +export type Refund = CommonOfflineTransactionPayment & RefundAsId; + export type RefundCreated = HoudiniEvent<'offline_transaction_refund.created', Refund>; export type RefundUpdated = HoudiniEvent<'offline_transaction_refund.updated', Refund>; export type RefundDeleted = HoudiniEvent<'offline_transaction_refund.deleted', Refund>; \ No newline at end of file diff --git a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/index.ts b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/index.ts index 728a59f0..6d9077c1 100644 --- a/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/index.ts +++ b/docs/event_definitions/Nonprofit/Transaction/OfflineTransaction/index.ts @@ -1,7 +1,7 @@ // License: LGPL-3.0-or-later import type { HouID, HoudiniEvent } from "../../../common"; import type { Payment, Subtransaction} from ".."; -import type { Charge, Refund, Dispute } from '.'; +import type { Charge, Refund, Dispute, ChargeAsId, DisputeAsId, RefundAsId } from '.'; export interface CommonOfflineTransactionPayment extends Payment { // The kind of offline charge. Could be cash, check or something else @@ -14,11 +14,9 @@ export interface CommonOfflineTransactionPayment extends Payment { } export default interface OfflineTransaction extends Subtransaction { - charges: HouID[] | Charge[]; deleted: boolean; - disputes: HouID[] | Dispute[]; object: 'offline_transaction'; - refunds: HouID[] | Refund[]; + payments: (ChargeAsId|RefundAsId|DisputeAsId)[]| (Charge|Refund|Dispute)[]; } export type OfflineTransactionCreated = HoudiniEvent<'offline_transaction.created', OfflineTransaction>; diff --git a/docs/event_definitions/Nonprofit/Transaction/Payment.ts b/docs/event_definitions/Nonprofit/Transaction/Payment.ts index 745ae245..0eae9487 100644 --- a/docs/event_definitions/Nonprofit/Transaction/Payment.ts +++ b/docs/event_definitions/Nonprofit/Transaction/Payment.ts @@ -1,11 +1,15 @@ // License: LGPL-3.0-or-later -import type { Amount, HoudiniObject, HouID, HoudiniEvent } from "../../common"; +import type { Amount, HouID, HoudiniEvent, PolymorphicID } from "../../common"; import type { Subtransaction, TrxDescendent } from "."; -export interface Payment extends HoudiniObject, TrxDescendent { +export interface PaymentAsId extends PolymorphicID { + type: 'payment'; +} + +export interface Payment extends PaymentAsId, TrxDescendent { created: number; deleted: boolean; - fees: Amount; + fee_total: Amount; gross_amount: Amount; net_amount: Amount; status: string; diff --git a/docs/event_definitions/Nonprofit/Transaction/Subtransaction.ts b/docs/event_definitions/Nonprofit/Transaction/Subtransaction.ts new file mode 100644 index 00000000..366868f5 --- /dev/null +++ b/docs/event_definitions/Nonprofit/Transaction/Subtransaction.ts @@ -0,0 +1,19 @@ +// License: LGPL-3.0-or-later +import type { Amount, HouID, HoudiniEvent, PolymorphicID } from "../../common"; +import type { Payment, PaymentAsId, TrxDescendent } from "."; + +export interface SubtransactionAsId extends PolymorphicID { + type: 'subtransaction'; +} + +export interface Subtransaction extends SubtransactionAsId, TrxDescendent { + created: number; + initial_amount: Amount; + net_amount: Amount; + payments: PaymentAsId[]|Payment[]; +} + +export type SubtransactionCreated = HoudiniEvent<'subtransaction.created', Subtransaction>; +export type SubtransactionUpdated = HoudiniEvent<'subtransaction.updated', Subtransaction>; +export type SubtransactionDeleted = HoudiniEvent<'subtransaction.deleted', Subtransaction>; + diff --git a/docs/event_definitions/Nonprofit/Transaction/index.ts b/docs/event_definitions/Nonprofit/Transaction/index.ts index 50d211cf..82d9ec2c 100644 --- a/docs/event_definitions/Nonprofit/Transaction/index.ts +++ b/docs/event_definitions/Nonprofit/Transaction/index.ts @@ -1,19 +1,9 @@ // License: LGPL-3.0-or-later -import type { Amount, HoudiniObject, IDType, HouID, HoudiniEvent } from "../../common"; +import type { Amount, HoudiniObject, IDType, HouID, HoudiniEvent, PolymorphicID } from "../../common"; import type Nonprofit from '../'; import type Supporter from "../Supporter"; -import type { Payment } from "./Payment"; - -export interface Subtransaction extends HoudiniObject, TrxDescendent { - amount: Amount; - amount_disputed: Amount; - amount_pending: Amount; - amount_refunded: Amount; - created: number; - fee_total: Amount; - net_amount: Amount; - type: 'subtransaction'; -} +import type { Payment, PaymentAsId } from "./Payment"; +import type { SubtransactionAsId, Subtransaction } from "./Subtransaction"; /** * Every descendent of a Transaction object will have the following three fields @@ -37,30 +27,21 @@ export interface TrxDescendent { * Every transaction assignment, including Donation, TicketPurchase, CampaignGiftPurchase * must have an amount and the type 'trx_assignment' set. */ -export interface TrxAssignment extends HoudiniObject, TrxDescendent { +export interface TrxAssignment extends TrxAssignmentAsId, TrxDescendent { amount: Amount; - type: 'trx_assignment'; } -export interface TrxAssignmentAsId extends HoudiniObject { +export interface TrxAssignmentAsId extends PolymorphicID { type: 'trx_assignment'; } -export interface SubtransactionAsId extends HoudiniObject { - type: 'subtransaction'; -} - export default interface Transaction extends HoudiniObject { amount: Amount; - // amount_disputed: Amount; - // amount_refunded: Amount; created: number; - deleted: boolean; - // net_amount: Amount; nonprofit: IDType | Nonprofit; object: 'transaction'; + payments: PaymentAsId[] | Payment[]; subtransaction: SubtransactionAsId | Subtransaction; - subtransaction_payments: IDType[] | Payment[]; supporter: IDType | Supporter; transaction_assignments: TrxAssignmentAsId[] | TrxAssignment[]; } @@ -73,5 +54,6 @@ export type TransactionDeleted = HoudiniEvent<'transaction.deleted', Transaction export * from './Payment'; export * from './Donation'; -export * from './OfflineTransaction'; +export * from './Subtransaction'; +export * as OfflineTransactionTypes from './OfflineTransaction'; export {default as OfflineTransaction} from './OfflineTransaction'; diff --git a/docs/event_definitions/common.ts b/docs/event_definitions/common.ts index f1f0e01b..1dfe9209 100644 --- a/docs/event_definitions/common.ts +++ b/docs/event_definitions/common.ts @@ -60,7 +60,7 @@ export type RecurrenceRule = { * Every object controlled by the Houdini event publisher must meet this standard interface * and will inherit from it. */ -export interface HoudiniObject { +export interface HoudiniObject { /** * An IDType which unique which uniquely identifies this object * from all other similar objects @@ -72,7 +72,26 @@ export interface HoudiniObject { object: string; } -export type PolymorphicID = HoudiniObject; +/** + * Used to identify objects when the field they're assigned too isn't enough to know what type of object they are. + * As an example on a transaction object, you'll have a field called "subtransaction". That could be any subtransaction object, for example, an + * `offline_transaction` or a `stripe_transaction`. We don't have enough information using the field name to tell us EXACTLY what type of field this is. + * There for we provide the following JSON object: + * + * { + * id: , + * object: , + * type: 'subtransaction', + * } + * + * + * + * +*/ +export interface PolymorphicID extends HoudiniObject { + /** the subtype of the object */ + type: string; +} type HoudiniObjectOfAllIDs = HoudiniObject | HoudiniObject; /**