@opprs/db-prisma 0.5.2-canary.760356d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/index.cjs +573 -0
- package/dist/index.d.cts +608 -0
- package/dist/index.d.ts +608 -0
- package/dist/index.js +500 -0
- package/package.json +85 -0
- package/prisma/schema.prisma +123 -0
- package/prisma/seed.ts +349 -0
package/prisma/seed.ts
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { PrismaClient, EventBoosterType } from '@prisma/client';
|
|
2
|
+
|
|
3
|
+
const prisma = new PrismaClient();
|
|
4
|
+
|
|
5
|
+
async function main() {
|
|
6
|
+
console.log('🌱 Seeding database...');
|
|
7
|
+
|
|
8
|
+
// Create sample players
|
|
9
|
+
console.log('Creating players...');
|
|
10
|
+
const player1 = await prisma.player.create({
|
|
11
|
+
data: {
|
|
12
|
+
externalId: 'player-1',
|
|
13
|
+
name: 'Alice Champion',
|
|
14
|
+
email: 'alice@example.com',
|
|
15
|
+
rating: 1850,
|
|
16
|
+
ratingDeviation: 50,
|
|
17
|
+
ranking: 5,
|
|
18
|
+
isRated: true,
|
|
19
|
+
eventCount: 25,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const player2 = await prisma.player.create({
|
|
24
|
+
data: {
|
|
25
|
+
externalId: 'player-2',
|
|
26
|
+
name: 'Bob Wizard',
|
|
27
|
+
email: 'bob@example.com',
|
|
28
|
+
rating: 1750,
|
|
29
|
+
ratingDeviation: 60,
|
|
30
|
+
ranking: 12,
|
|
31
|
+
isRated: true,
|
|
32
|
+
eventCount: 18,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const player3 = await prisma.player.create({
|
|
37
|
+
data: {
|
|
38
|
+
externalId: 'player-3',
|
|
39
|
+
name: 'Charlie Flipper',
|
|
40
|
+
email: 'charlie@example.com',
|
|
41
|
+
rating: 1650,
|
|
42
|
+
ratingDeviation: 75,
|
|
43
|
+
ranking: 28,
|
|
44
|
+
isRated: true,
|
|
45
|
+
eventCount: 12,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const player4 = await prisma.player.create({
|
|
50
|
+
data: {
|
|
51
|
+
externalId: 'player-4',
|
|
52
|
+
name: 'Diana Tilt',
|
|
53
|
+
email: 'diana@example.com',
|
|
54
|
+
rating: 1550,
|
|
55
|
+
ratingDeviation: 100,
|
|
56
|
+
ranking: 45,
|
|
57
|
+
isRated: true,
|
|
58
|
+
eventCount: 8,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const player5 = await prisma.player.create({
|
|
63
|
+
data: {
|
|
64
|
+
externalId: 'player-5',
|
|
65
|
+
name: 'Eve Plunger',
|
|
66
|
+
email: 'eve@example.com',
|
|
67
|
+
rating: 1300,
|
|
68
|
+
ratingDeviation: 150,
|
|
69
|
+
ranking: null,
|
|
70
|
+
isRated: false,
|
|
71
|
+
eventCount: 3,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
console.log(`✓ Created ${await prisma.player.count()} players`);
|
|
76
|
+
|
|
77
|
+
// Create sample tournaments
|
|
78
|
+
console.log('Creating tournaments...');
|
|
79
|
+
|
|
80
|
+
// Major Championship Tournament
|
|
81
|
+
const tournament1 = await prisma.tournament.create({
|
|
82
|
+
data: {
|
|
83
|
+
externalId: 'tournament-1',
|
|
84
|
+
name: 'World Pinball Championship 2024',
|
|
85
|
+
location: 'Las Vegas, NV',
|
|
86
|
+
date: new Date('2024-03-15'),
|
|
87
|
+
eventBooster: EventBoosterType.MAJOR,
|
|
88
|
+
allowsOptOut: false,
|
|
89
|
+
tgpConfig: {
|
|
90
|
+
qualifying: {
|
|
91
|
+
type: 'limited',
|
|
92
|
+
meaningfulGames: 12,
|
|
93
|
+
fourPlayerGroups: true,
|
|
94
|
+
},
|
|
95
|
+
finals: {
|
|
96
|
+
formatType: 'match-play',
|
|
97
|
+
meaningfulGames: 20,
|
|
98
|
+
fourPlayerGroups: true,
|
|
99
|
+
finalistCount: 16,
|
|
100
|
+
},
|
|
101
|
+
ballCountAdjustment: 1.0,
|
|
102
|
+
},
|
|
103
|
+
baseValue: 32.0,
|
|
104
|
+
tvaRating: 25.0,
|
|
105
|
+
tvaRanking: 50.0,
|
|
106
|
+
totalTVA: 75.0,
|
|
107
|
+
tgp: 1.92,
|
|
108
|
+
eventBoosterMultiplier: 2.0,
|
|
109
|
+
firstPlaceValue: 411.84,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// Certified Tournament
|
|
114
|
+
const tournament2 = await prisma.tournament.create({
|
|
115
|
+
data: {
|
|
116
|
+
externalId: 'tournament-2',
|
|
117
|
+
name: 'Spring Classics 2024',
|
|
118
|
+
location: 'Portland, OR',
|
|
119
|
+
date: new Date('2024-04-20'),
|
|
120
|
+
eventBooster: EventBoosterType.CERTIFIED,
|
|
121
|
+
allowsOptOut: true,
|
|
122
|
+
tgpConfig: {
|
|
123
|
+
qualifying: {
|
|
124
|
+
type: 'limited',
|
|
125
|
+
meaningfulGames: 7,
|
|
126
|
+
},
|
|
127
|
+
finals: {
|
|
128
|
+
formatType: 'double-elimination',
|
|
129
|
+
meaningfulGames: 15,
|
|
130
|
+
fourPlayerGroups: false,
|
|
131
|
+
finalistCount: 8,
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
baseValue: 28.0,
|
|
135
|
+
tvaRating: 18.5,
|
|
136
|
+
tvaRanking: 32.0,
|
|
137
|
+
totalTVA: 50.5,
|
|
138
|
+
tgp: 0.88,
|
|
139
|
+
eventBoosterMultiplier: 1.25,
|
|
140
|
+
firstPlaceValue: 87.28,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// Local Tournament
|
|
145
|
+
const tournament3 = await prisma.tournament.create({
|
|
146
|
+
data: {
|
|
147
|
+
externalId: 'tournament-3',
|
|
148
|
+
name: 'Monthly League Finals',
|
|
149
|
+
location: 'Seattle, WA',
|
|
150
|
+
date: new Date('2024-05-10'),
|
|
151
|
+
eventBooster: EventBoosterType.NONE,
|
|
152
|
+
allowsOptOut: false,
|
|
153
|
+
tgpConfig: {
|
|
154
|
+
qualifying: {
|
|
155
|
+
type: 'none',
|
|
156
|
+
meaningfulGames: 0,
|
|
157
|
+
},
|
|
158
|
+
finals: {
|
|
159
|
+
formatType: 'match-play',
|
|
160
|
+
meaningfulGames: 10,
|
|
161
|
+
fourPlayerGroups: true,
|
|
162
|
+
finalistCount: 8,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
baseValue: 15.0,
|
|
166
|
+
tvaRating: 8.5,
|
|
167
|
+
tvaRanking: 12.0,
|
|
168
|
+
totalTVA: 20.5,
|
|
169
|
+
tgp: 0.80,
|
|
170
|
+
eventBoosterMultiplier: 1.0,
|
|
171
|
+
firstPlaceValue: 28.4,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
console.log(`✓ Created ${await prisma.tournament.count()} tournaments`);
|
|
176
|
+
|
|
177
|
+
// Create tournament results
|
|
178
|
+
console.log('Creating tournament results...');
|
|
179
|
+
|
|
180
|
+
// World Championship results
|
|
181
|
+
await prisma.tournamentResult.createMany({
|
|
182
|
+
data: [
|
|
183
|
+
{
|
|
184
|
+
playerId: player1.id,
|
|
185
|
+
tournamentId: tournament1.id,
|
|
186
|
+
position: 1,
|
|
187
|
+
totalPoints: 411.84,
|
|
188
|
+
linearPoints: 41.18,
|
|
189
|
+
dynamicPoints: 370.66,
|
|
190
|
+
ageInDays: 0,
|
|
191
|
+
decayMultiplier: 1.0,
|
|
192
|
+
decayedPoints: 411.84,
|
|
193
|
+
efficiency: 85.5,
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
playerId: player2.id,
|
|
197
|
+
tournamentId: tournament1.id,
|
|
198
|
+
position: 2,
|
|
199
|
+
totalPoints: 298.45,
|
|
200
|
+
linearPoints: 41.18,
|
|
201
|
+
dynamicPoints: 257.27,
|
|
202
|
+
ageInDays: 0,
|
|
203
|
+
decayMultiplier: 1.0,
|
|
204
|
+
decayedPoints: 298.45,
|
|
205
|
+
efficiency: 72.5,
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
playerId: player3.id,
|
|
209
|
+
tournamentId: tournament1.id,
|
|
210
|
+
position: 3,
|
|
211
|
+
totalPoints: 215.32,
|
|
212
|
+
linearPoints: 41.18,
|
|
213
|
+
dynamicPoints: 174.14,
|
|
214
|
+
ageInDays: 0,
|
|
215
|
+
decayMultiplier: 1.0,
|
|
216
|
+
decayedPoints: 215.32,
|
|
217
|
+
efficiency: 65.2,
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
playerId: player4.id,
|
|
221
|
+
tournamentId: tournament1.id,
|
|
222
|
+
position: 5,
|
|
223
|
+
totalPoints: 125.18,
|
|
224
|
+
linearPoints: 41.18,
|
|
225
|
+
dynamicPoints: 84.00,
|
|
226
|
+
ageInDays: 0,
|
|
227
|
+
decayMultiplier: 1.0,
|
|
228
|
+
decayedPoints: 125.18,
|
|
229
|
+
efficiency: 48.3,
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// Spring Classics results
|
|
235
|
+
await prisma.tournamentResult.createMany({
|
|
236
|
+
data: [
|
|
237
|
+
{
|
|
238
|
+
playerId: player2.id,
|
|
239
|
+
tournamentId: tournament2.id,
|
|
240
|
+
position: 1,
|
|
241
|
+
totalPoints: 87.28,
|
|
242
|
+
linearPoints: 8.73,
|
|
243
|
+
dynamicPoints: 78.55,
|
|
244
|
+
ageInDays: 0,
|
|
245
|
+
decayMultiplier: 1.0,
|
|
246
|
+
decayedPoints: 87.28,
|
|
247
|
+
efficiency: 92.0,
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
playerId: player1.id,
|
|
251
|
+
tournamentId: tournament2.id,
|
|
252
|
+
position: 2,
|
|
253
|
+
totalPoints: 63.25,
|
|
254
|
+
linearPoints: 8.73,
|
|
255
|
+
dynamicPoints: 54.52,
|
|
256
|
+
ageInDays: 0,
|
|
257
|
+
decayMultiplier: 1.0,
|
|
258
|
+
decayedPoints: 63.25,
|
|
259
|
+
efficiency: 78.5,
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
playerId: player4.id,
|
|
263
|
+
tournamentId: tournament2.id,
|
|
264
|
+
position: 3,
|
|
265
|
+
totalPoints: 45.67,
|
|
266
|
+
linearPoints: 8.73,
|
|
267
|
+
dynamicPoints: 36.94,
|
|
268
|
+
ageInDays: 0,
|
|
269
|
+
decayMultiplier: 1.0,
|
|
270
|
+
decayedPoints: 45.67,
|
|
271
|
+
efficiency: 68.2,
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
playerId: player5.id,
|
|
275
|
+
tournamentId: tournament2.id,
|
|
276
|
+
position: 6,
|
|
277
|
+
totalPoints: 18.52,
|
|
278
|
+
linearPoints: 8.73,
|
|
279
|
+
dynamicPoints: 9.79,
|
|
280
|
+
ageInDays: 0,
|
|
281
|
+
decayMultiplier: 1.0,
|
|
282
|
+
decayedPoints: 18.52,
|
|
283
|
+
efficiency: 35.8,
|
|
284
|
+
},
|
|
285
|
+
],
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
// Monthly League results
|
|
289
|
+
await prisma.tournamentResult.createMany({
|
|
290
|
+
data: [
|
|
291
|
+
{
|
|
292
|
+
playerId: player3.id,
|
|
293
|
+
tournamentId: tournament3.id,
|
|
294
|
+
position: 1,
|
|
295
|
+
totalPoints: 28.4,
|
|
296
|
+
linearPoints: 2.84,
|
|
297
|
+
dynamicPoints: 25.56,
|
|
298
|
+
ageInDays: 0,
|
|
299
|
+
decayMultiplier: 1.0,
|
|
300
|
+
decayedPoints: 28.4,
|
|
301
|
+
efficiency: 88.5,
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
playerId: player4.id,
|
|
305
|
+
tournamentId: tournament3.id,
|
|
306
|
+
position: 2,
|
|
307
|
+
totalPoints: 20.58,
|
|
308
|
+
linearPoints: 2.84,
|
|
309
|
+
dynamicPoints: 17.74,
|
|
310
|
+
ageInDays: 0,
|
|
311
|
+
decayMultiplier: 1.0,
|
|
312
|
+
decayedPoints: 20.58,
|
|
313
|
+
efficiency: 75.2,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
playerId: player5.id,
|
|
317
|
+
tournamentId: tournament3.id,
|
|
318
|
+
position: 3,
|
|
319
|
+
totalPoints: 14.85,
|
|
320
|
+
linearPoints: 2.84,
|
|
321
|
+
dynamicPoints: 12.01,
|
|
322
|
+
ageInDays: 0,
|
|
323
|
+
decayMultiplier: 1.0,
|
|
324
|
+
decayedPoints: 14.85,
|
|
325
|
+
efficiency: 62.5,
|
|
326
|
+
},
|
|
327
|
+
],
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
console.log(`✓ Created ${await prisma.tournamentResult.count()} tournament results`);
|
|
331
|
+
|
|
332
|
+
console.log('');
|
|
333
|
+
console.log('✅ Database seeded successfully!');
|
|
334
|
+
console.log('');
|
|
335
|
+
console.log('Summary:');
|
|
336
|
+
console.log(` - ${await prisma.player.count()} players`);
|
|
337
|
+
console.log(` - ${await prisma.tournament.count()} tournaments`);
|
|
338
|
+
console.log(` - ${await prisma.tournamentResult.count()} tournament results`);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
main()
|
|
342
|
+
.catch((e) => {
|
|
343
|
+
console.error('Error seeding database:');
|
|
344
|
+
console.error(e);
|
|
345
|
+
process.exit(1);
|
|
346
|
+
})
|
|
347
|
+
.finally(async () => {
|
|
348
|
+
await prisma.$disconnect();
|
|
349
|
+
});
|