-
Notifications
You must be signed in to change notification settings - Fork 90
/
Copy pathmodel.ts
115 lines (105 loc) · 3.42 KB
/
model.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import { Pojo } from 'objection'
import { BaseModel } from '../shared/baseModel'
import { join } from 'path'
import { OutgoingPayment } from '../open_payments/payment/outgoing/model'
import { IncomingPayment } from '../open_payments/payment/incoming/model'
import { WalletAddress } from '../open_payments/wallet_address/model'
import { Asset } from '../asset/model'
import { Peer } from '../payment-method/ilp/peer/model'
const fieldPrefixes = ['withdrawal']
export class WebhookEvent extends BaseModel {
public static get tableName(): string {
return 'webhookEvents'
}
static relationMappings = () => ({
outgoingPayment: {
relation: BaseModel.BelongsToOneRelation,
modelClass: join(__dirname, '../open_payments/payment/outgoing/model'),
join: {
from: 'webhookEvents.outgoingPaymentId',
to: 'outgoingPayments.id'
}
},
incomingPayment: {
relation: BaseModel.BelongsToOneRelation,
modelClass: join(__dirname, '../open_payments/payment/incoming/model'),
join: {
from: 'webhookEvents.incomingPaymentId',
to: 'incomingPayments.id'
}
},
walletAddress: {
relation: BaseModel.BelongsToOneRelation,
modelClass: join(__dirname, '../open_payments/wallet_address/model'),
join: {
from: 'webhookEvents.walletAddressId',
to: 'walletAddresses.id'
}
},
asset: {
relation: BaseModel.BelongsToOneRelation,
modelClass: join(__dirname),
join: {
from: 'webhookEvents.assetId',
to: 'assets.id'
}
},
peer: {
relation: BaseModel.BelongsToOneRelation,
modelClass: join(__dirname, '../payment-method/ilp/peer/model'),
join: {
from: 'webhookEvents.peerId',
to: 'peer.id'
}
}
})
public type!: string
public data!: Record<string, unknown>
public attempts!: number
public statusCode?: number
public processAt!: Date | null
public depositAccountId?: string
public readonly outgoingPaymentId?: string
public readonly incomingPaymentId?: string
public readonly walletAddressId?: string
public readonly assetId?: string
public readonly peerId?: string
public outgoingPayment?: OutgoingPayment
public incomingPayment?: IncomingPayment
public walletAddress?: WalletAddress
public asset?: Asset
public peer?: Peer
public withdrawal?: {
accountId: string
assetId: string
amount: bigint
}
$formatDatabaseJson(json: Pojo): Pojo {
// transforms WebhookEvent.withdrawal to db fields. eg. withdrawal.accountId => withdrawalAccountId
for (const prefix of fieldPrefixes) {
if (!json[prefix]) continue
for (const key in json[prefix]) {
json[prefix + key.charAt(0).toUpperCase() + key.slice(1)] =
json[prefix][key]
}
delete json[prefix]
}
return super.$formatDatabaseJson(json)
}
$parseDatabaseJson(json: Pojo): Pojo {
// transforms withdrawal db fields to WebhookEvent.withdrawal. eg. withdrawalAccountId => withdrawal.accountId
json = super.$parseDatabaseJson(json)
for (const key in json) {
const prefix = fieldPrefixes.find((prefix) => key.startsWith(prefix))
if (!prefix) continue
if (json[key] !== null) {
if (!json[prefix]) json[prefix] = {}
json[prefix][
key.charAt(prefix.length).toLowerCase() + key.slice(prefix.length + 1)
] = json[key]
}
delete json[key]
}
return json
}
}