1
1
import {
2
2
PrismaClient ,
3
3
PaymentProvider ,
4
- DonationStatus ,
5
- DonationType ,
4
+ PaymentStatus ,
6
5
Person ,
7
6
CampaignState ,
7
+ PaymentType ,
8
+ DonationType ,
8
9
} from '@prisma/client'
9
10
10
- import { donationFactory } from './factory'
11
+ import { paymentFactory } from './factory'
12
+ import { faker } from '@faker-js/faker'
13
+ import { donationFactory } from '../donations/factory'
11
14
12
15
const prisma = new PrismaClient ( )
13
16
14
17
const SEED_COMPLETED_CAMPAIGN_DONATIONS = 5
15
18
const SEED_HEAVILY_FUNDED_CAMPAIGN_DONATIONS = 25
16
19
17
- export async function donationsSeed ( ) {
18
- console . log ( 'Donations seed' )
20
+ export async function paymentsSeed ( ) {
21
+ console . log ( 'Payments seed' )
19
22
20
23
const person = await prisma . person . findFirst ( )
21
24
if ( ! person ) {
@@ -36,46 +39,68 @@ async function seedRandomDonations({ person }: SeedData) {
36
39
if ( ! vault ) {
37
40
throw new Error ( 'There are no vaults created yet!' )
38
41
}
39
-
40
42
const donationFactoryOptions = {
41
43
associations : {
42
44
personId : person . id ,
43
45
targetVaultId : vault . id ,
44
46
} ,
45
47
}
46
48
49
+ const randomPaymentsData = [
50
+ paymentFactory . build ( {
51
+ type : PaymentType . single ,
52
+ provider : PaymentProvider . stripe ,
53
+ status : PaymentStatus . succeeded ,
54
+ } ) ,
55
+ paymentFactory . build ( {
56
+ type : PaymentType . single ,
57
+ provider : PaymentProvider . stripe ,
58
+ status : PaymentStatus . declined ,
59
+ } ) ,
60
+ paymentFactory . build ( {
61
+ type : PaymentType . single ,
62
+ provider : PaymentProvider . bank ,
63
+ status : PaymentStatus . initial ,
64
+ } ) ,
65
+ ]
66
+
47
67
const randomDonationsData = [
48
68
donationFactory . build (
49
69
{
50
- type : DonationType . donation ,
51
- provider : PaymentProvider . stripe ,
52
- status : DonationStatus . succeeded ,
70
+ paymentId : randomPaymentsData [ 0 ] . id ,
71
+ createdAt : randomPaymentsData [ 0 ] . createdAt ,
72
+ updatedAt : randomPaymentsData [ 0 ] . updatedAt ,
53
73
} ,
54
74
donationFactoryOptions ,
55
75
) ,
56
76
donationFactory . build (
57
77
{
58
- type : DonationType . donation ,
59
- provider : PaymentProvider . stripe ,
60
- status : DonationStatus . declined ,
78
+ paymentId : randomPaymentsData [ 1 ] . id ,
79
+ createdAt : randomPaymentsData [ 1 ] . createdAt ,
80
+ updatedAt : randomPaymentsData [ 1 ] . updatedAt ,
61
81
} ,
62
82
donationFactoryOptions ,
63
83
) ,
64
84
donationFactory . build (
65
85
{
66
- type : DonationType . donation ,
67
- provider : PaymentProvider . bank ,
68
- status : DonationStatus . initial ,
86
+ paymentId : randomPaymentsData [ 2 ] . id ,
87
+ createdAt : randomPaymentsData [ 2 ] . createdAt ,
88
+ updatedAt : randomPaymentsData [ 2 ] . updatedAt ,
69
89
} ,
70
90
donationFactoryOptions ,
71
91
) ,
72
92
]
93
+ const insertRandomPayments = await prisma . payment . createMany ( {
94
+ data : randomPaymentsData ,
95
+ skipDuplicates : true ,
96
+ } )
73
97
74
98
const insertRandomDonations = await prisma . donation . createMany ( {
75
99
data : randomDonationsData ,
76
100
skipDuplicates : true ,
77
101
} )
78
102
103
+ console . log ( { insertRandomPayments } )
79
104
console . log ( { insertRandomDonations } )
80
105
81
106
console . log ( '{ Updating first campaign vault: %s }' , vault . id )
@@ -102,21 +127,33 @@ async function seedDonationsForCompletedCampaign({ person }: SeedData) {
102
127
} ,
103
128
}
104
129
105
- const completedCampaignDonationsData = donationFactory . buildList (
130
+ const completedCampaignPaymentsData = paymentFactory . buildList (
106
131
SEED_COMPLETED_CAMPAIGN_DONATIONS ,
107
132
{
108
- type : DonationType . donation ,
133
+ type : PaymentType . single ,
109
134
provider : PaymentProvider . stripe ,
110
- status : DonationStatus . succeeded ,
135
+ status : PaymentStatus . succeeded ,
111
136
} ,
112
- donationFactoryOptions ,
113
137
)
114
138
139
+ const completedCampaignDonationData = completedCampaignPaymentsData . map ( ( payment ) =>
140
+ donationFactory . build (
141
+ { paymentId : payment . id , updatedAt : payment . updatedAt , createdAt : payment . createdAt } ,
142
+ donationFactoryOptions ,
143
+ ) ,
144
+ )
145
+
146
+ const insertCompletedCampaignPayments = await prisma . payment . createMany ( {
147
+ data : completedCampaignPaymentsData ,
148
+ skipDuplicates : true ,
149
+ } )
150
+
115
151
const insertCompletedCampaignDonations = await prisma . donation . createMany ( {
116
- data : completedCampaignDonationsData ,
152
+ data : completedCampaignDonationData ,
117
153
skipDuplicates : true ,
118
154
} )
119
155
156
+ console . log ( { insertCompletedCampaignPayments } )
120
157
console . log ( { insertCompletedCampaignDonations } )
121
158
122
159
console . log ( '{ Updating completed campaign vault: %s }' , completedCampaignVault . id )
@@ -145,21 +182,30 @@ async function seedDonationsForHeavilyFundedCampaign({ person }: SeedData) {
145
182
} ,
146
183
}
147
184
148
- const heavilyFundedCampaignDonationsData = donationFactory . buildList (
185
+ const heavilyFundedCampaignPaymentData = paymentFactory . buildList (
149
186
SEED_HEAVILY_FUNDED_CAMPAIGN_DONATIONS ,
150
187
{
151
- type : DonationType . donation ,
188
+ type : PaymentType . single ,
152
189
provider : PaymentProvider . stripe ,
153
- status : DonationStatus . succeeded ,
190
+ status : PaymentStatus . succeeded ,
154
191
} ,
155
- donationFactoryOptions ,
192
+ )
193
+ const heavilyFundedCampaignDonationData = heavilyFundedCampaignPaymentData . map ( ( payment ) =>
194
+ donationFactory . build (
195
+ { paymentId : payment . id , createdAt : payment . createdAt , updatedAt : payment . updatedAt } ,
196
+ donationFactoryOptions ,
197
+ ) ,
156
198
)
157
199
200
+ const insertHeavilyFundedCampaignPayments = await prisma . payment . createMany ( {
201
+ data : heavilyFundedCampaignPaymentData ,
202
+ skipDuplicates : true ,
203
+ } )
158
204
const insertHeavilyFundedCampaignDonations = await prisma . donation . createMany ( {
159
- data : heavilyFundedCampaignDonationsData ,
205
+ data : heavilyFundedCampaignDonationData ,
160
206
skipDuplicates : true ,
161
207
} )
162
-
208
+ console . log ( { insertHeavilyFundedCampaignPayments } )
163
209
console . log ( { insertHeavilyFundedCampaignDonations } )
164
210
165
211
console . log ( '{ Updating heavily-funded campaign vault: %s }' , heavilyFundedCampaignVault . id )
@@ -172,13 +218,13 @@ async function seedDonationsForHeavilyFundedCampaign({ person }: SeedData) {
172
218
* @param vaultId
173
219
*/
174
220
async function updateVault ( vaultId : string ) {
175
- const totalDonationsAmount = await prisma . donation . aggregate ( {
221
+ const totalDonationsAmount = await prisma . payment . aggregate ( {
176
222
_sum : {
177
223
amount : true ,
178
224
} ,
179
225
where : {
180
- targetVaultId : vaultId ,
181
- status : DonationStatus . succeeded ,
226
+ donations : { some : { targetVaultId : vaultId } } ,
227
+ status : PaymentStatus . succeeded ,
182
228
} ,
183
229
} )
184
230
0 commit comments