@opprs/db-prisma 2.2.1-canary.5233c68 → 2.2.1-canary.d052ffb
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/dist/index.cjs +2 -51
- package/dist/index.d.cts +2 -23
- package/dist/index.d.ts +2 -23
- package/dist/index.js +2 -48
- package/package.json +2 -2
- package/prisma/schema.prisma +0 -2
- package/prisma/seed.ts +0 -20
package/dist/index.cjs
CHANGED
|
@@ -39,7 +39,6 @@ __export(index_exports, {
|
|
|
39
39
|
disconnect: () => disconnect,
|
|
40
40
|
findPlayerByExternalId: () => findPlayerByExternalId,
|
|
41
41
|
findPlayerById: () => findPlayerById,
|
|
42
|
-
findPlayerByPlayerNumber: () => findPlayerByPlayerNumber,
|
|
43
42
|
findPlayerByUserEmail: () => findPlayerByUserEmail,
|
|
44
43
|
findPlayers: () => findPlayers,
|
|
45
44
|
findResultById: () => findResultById,
|
|
@@ -51,7 +50,6 @@ __export(index_exports, {
|
|
|
51
50
|
findUserByEmail: () => findUserByEmail,
|
|
52
51
|
findUserById: () => findUserById,
|
|
53
52
|
findUsers: () => findUsers,
|
|
54
|
-
generateUniquePlayerNumber: () => generateUniquePlayerNumber,
|
|
55
53
|
getMajorTournaments: () => getMajorTournaments,
|
|
56
54
|
getPlayerResults: () => getPlayerResults,
|
|
57
55
|
getPlayerStats: () => getPlayerStats,
|
|
@@ -68,7 +66,6 @@ __export(index_exports, {
|
|
|
68
66
|
getTournamentsByDateRange: () => getTournamentsByDateRange,
|
|
69
67
|
getUserByEmailWithPlayer: () => getUserByEmailWithPlayer,
|
|
70
68
|
getUserWithPlayer: () => getUserWithPlayer,
|
|
71
|
-
isValidPlayerNumber: () => isValidPlayerNumber,
|
|
72
69
|
linkPlayerToUser: () => linkPlayerToUser,
|
|
73
70
|
prisma: () => prisma,
|
|
74
71
|
recalculateTimeDecay: () => recalculateTimeDecay,
|
|
@@ -110,40 +107,10 @@ async function testConnection() {
|
|
|
110
107
|
}
|
|
111
108
|
}
|
|
112
109
|
|
|
113
|
-
// src/player-number.ts
|
|
114
|
-
var MIN_PLAYER_NUMBER = 1e4;
|
|
115
|
-
var MAX_PLAYER_NUMBER = 99999;
|
|
116
|
-
var MAX_RETRIES = 10;
|
|
117
|
-
function generateRandomPlayerNumber() {
|
|
118
|
-
return Math.floor(Math.random() * (MAX_PLAYER_NUMBER - MIN_PLAYER_NUMBER + 1)) + MIN_PLAYER_NUMBER;
|
|
119
|
-
}
|
|
120
|
-
async function generateUniquePlayerNumber() {
|
|
121
|
-
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
122
|
-
const candidate = generateRandomPlayerNumber();
|
|
123
|
-
const existing = await prisma.player.findUnique({
|
|
124
|
-
where: { playerNumber: candidate },
|
|
125
|
-
select: { id: true }
|
|
126
|
-
});
|
|
127
|
-
if (!existing) {
|
|
128
|
-
return candidate;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
throw new Error(
|
|
132
|
-
`Failed to generate unique player number after ${MAX_RETRIES} attempts. Consider increasing the number range or implementing a different allocation strategy.`
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
function isValidPlayerNumber(playerNumber) {
|
|
136
|
-
return Number.isInteger(playerNumber) && playerNumber >= MIN_PLAYER_NUMBER && playerNumber <= MAX_PLAYER_NUMBER;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
110
|
// src/players.ts
|
|
140
111
|
async function createPlayer(data) {
|
|
141
|
-
const playerNumber = data.playerNumber ?? await generateUniquePlayerNumber();
|
|
142
112
|
return prisma.player.create({
|
|
143
|
-
data
|
|
144
|
-
...data,
|
|
145
|
-
playerNumber
|
|
146
|
-
}
|
|
113
|
+
data
|
|
147
114
|
});
|
|
148
115
|
}
|
|
149
116
|
async function findPlayerById(id, include) {
|
|
@@ -158,12 +125,6 @@ async function findPlayerByExternalId(externalId, include) {
|
|
|
158
125
|
include
|
|
159
126
|
});
|
|
160
127
|
}
|
|
161
|
-
async function findPlayerByPlayerNumber(playerNumber, include) {
|
|
162
|
-
return prisma.player.findUnique({
|
|
163
|
-
where: { playerNumber },
|
|
164
|
-
include
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
128
|
async function findPlayerByUserEmail(email, include) {
|
|
168
129
|
const user = await prisma.user.findUnique({
|
|
169
130
|
where: { email },
|
|
@@ -579,11 +540,9 @@ async function createUser(data) {
|
|
|
579
540
|
}
|
|
580
541
|
async function createUserWithPlayer(userData, playerData) {
|
|
581
542
|
return prisma.$transaction(async (tx) => {
|
|
582
|
-
const playerNumber = await generateUniquePlayerNumber();
|
|
583
543
|
const player = await tx.player.create({
|
|
584
544
|
data: {
|
|
585
|
-
name: playerData.name
|
|
586
|
-
playerNumber
|
|
545
|
+
name: playerData.name
|
|
587
546
|
}
|
|
588
547
|
});
|
|
589
548
|
const user = await tx.user.create({
|
|
@@ -595,7 +554,6 @@ async function createUserWithPlayer(userData, playerData) {
|
|
|
595
554
|
player: {
|
|
596
555
|
select: {
|
|
597
556
|
id: true,
|
|
598
|
-
playerNumber: true,
|
|
599
557
|
name: true,
|
|
600
558
|
rating: true,
|
|
601
559
|
ratingDeviation: true,
|
|
@@ -628,7 +586,6 @@ async function getUserWithPlayer(id) {
|
|
|
628
586
|
player: {
|
|
629
587
|
select: {
|
|
630
588
|
id: true,
|
|
631
|
-
playerNumber: true,
|
|
632
589
|
name: true,
|
|
633
590
|
rating: true,
|
|
634
591
|
ratingDeviation: true,
|
|
@@ -651,7 +608,6 @@ async function getUserByEmailWithPlayer(email) {
|
|
|
651
608
|
player: {
|
|
652
609
|
select: {
|
|
653
610
|
id: true,
|
|
654
|
-
playerNumber: true,
|
|
655
611
|
name: true,
|
|
656
612
|
rating: true,
|
|
657
613
|
ratingDeviation: true,
|
|
@@ -697,7 +653,6 @@ async function findUsers(params) {
|
|
|
697
653
|
player: {
|
|
698
654
|
select: {
|
|
699
655
|
id: true,
|
|
700
|
-
playerNumber: true,
|
|
701
656
|
name: true,
|
|
702
657
|
rating: true,
|
|
703
658
|
ratingDeviation: true,
|
|
@@ -729,7 +684,6 @@ async function linkPlayerToUser(userId, playerId) {
|
|
|
729
684
|
player: {
|
|
730
685
|
select: {
|
|
731
686
|
id: true,
|
|
732
|
-
playerNumber: true,
|
|
733
687
|
name: true,
|
|
734
688
|
rating: true,
|
|
735
689
|
ratingDeviation: true,
|
|
@@ -764,7 +718,6 @@ async function linkPlayerToUser(userId, playerId) {
|
|
|
764
718
|
disconnect,
|
|
765
719
|
findPlayerByExternalId,
|
|
766
720
|
findPlayerById,
|
|
767
|
-
findPlayerByPlayerNumber,
|
|
768
721
|
findPlayerByUserEmail,
|
|
769
722
|
findPlayers,
|
|
770
723
|
findResultById,
|
|
@@ -776,7 +729,6 @@ async function linkPlayerToUser(userId, playerId) {
|
|
|
776
729
|
findUserByEmail,
|
|
777
730
|
findUserById,
|
|
778
731
|
findUsers,
|
|
779
|
-
generateUniquePlayerNumber,
|
|
780
732
|
getMajorTournaments,
|
|
781
733
|
getPlayerResults,
|
|
782
734
|
getPlayerStats,
|
|
@@ -793,7 +745,6 @@ async function linkPlayerToUser(userId, playerId) {
|
|
|
793
745
|
getTournamentsByDateRange,
|
|
794
746
|
getUserByEmailWithPlayer,
|
|
795
747
|
getUserWithPlayer,
|
|
796
|
-
isValidPlayerNumber,
|
|
797
748
|
linkPlayerToUser,
|
|
798
749
|
prisma,
|
|
799
750
|
recalculateTimeDecay,
|
package/dist/index.d.cts
CHANGED
|
@@ -25,7 +25,6 @@ declare function testConnection(): Promise<boolean>;
|
|
|
25
25
|
*/
|
|
26
26
|
interface CreatePlayerInput {
|
|
27
27
|
externalId?: string;
|
|
28
|
-
playerNumber?: number;
|
|
29
28
|
name?: string;
|
|
30
29
|
rating?: number;
|
|
31
30
|
ratingDeviation?: number;
|
|
@@ -57,7 +56,7 @@ interface FindPlayersOptions {
|
|
|
57
56
|
include?: Prisma.PlayerInclude;
|
|
58
57
|
}
|
|
59
58
|
/**
|
|
60
|
-
* Creates a new player
|
|
59
|
+
* Creates a new player
|
|
61
60
|
*/
|
|
62
61
|
declare function createPlayer(data: CreatePlayerInput): Promise<Player>;
|
|
63
62
|
/**
|
|
@@ -68,10 +67,6 @@ declare function findPlayerById(id: string, include?: Prisma.PlayerInclude): Pro
|
|
|
68
67
|
* Finds a player by external ID
|
|
69
68
|
*/
|
|
70
69
|
declare function findPlayerByExternalId(externalId: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
|
|
71
|
-
/**
|
|
72
|
-
* Finds a player by player number
|
|
73
|
-
*/
|
|
74
|
-
declare function findPlayerByPlayerNumber(playerNumber: number, include?: Prisma.PlayerInclude): Promise<Player | null>;
|
|
75
70
|
/**
|
|
76
71
|
* Finds a player through their linked User's email
|
|
77
72
|
*/
|
|
@@ -189,7 +184,6 @@ declare function getPlayerWithResults(id: string): Promise<{
|
|
|
189
184
|
createdAt: Date;
|
|
190
185
|
updatedAt: Date;
|
|
191
186
|
externalId: string | null;
|
|
192
|
-
playerNumber: number;
|
|
193
187
|
rating: number;
|
|
194
188
|
ratingDeviation: number;
|
|
195
189
|
ranking: number | null;
|
|
@@ -203,18 +197,6 @@ declare function getPlayerWithResults(id: string): Promise<{
|
|
|
203
197
|
*/
|
|
204
198
|
declare function searchPlayers(query: string, limit?: number): Promise<Player[]>;
|
|
205
199
|
|
|
206
|
-
/**
|
|
207
|
-
* Generates a unique player number with collision handling.
|
|
208
|
-
* Retries up to MAX_RETRIES times if collision occurs.
|
|
209
|
-
*
|
|
210
|
-
* @throws Error if unable to generate unique number after max retries
|
|
211
|
-
*/
|
|
212
|
-
declare function generateUniquePlayerNumber(): Promise<number>;
|
|
213
|
-
/**
|
|
214
|
-
* Validates that a player number is in the valid range
|
|
215
|
-
*/
|
|
216
|
-
declare function isValidPlayerNumber(playerNumber: number): boolean;
|
|
217
|
-
|
|
218
200
|
/**
|
|
219
201
|
* Input for creating a new tournament
|
|
220
202
|
*/
|
|
@@ -317,7 +299,6 @@ declare function getTournamentWithResults(id: string): Promise<({
|
|
|
317
299
|
createdAt: Date;
|
|
318
300
|
updatedAt: Date;
|
|
319
301
|
externalId: string | null;
|
|
320
|
-
playerNumber: number;
|
|
321
302
|
rating: number;
|
|
322
303
|
ratingDeviation: number;
|
|
323
304
|
ranking: number | null;
|
|
@@ -377,7 +358,6 @@ declare function getTournamentStats(id: string): Promise<{
|
|
|
377
358
|
createdAt: Date;
|
|
378
359
|
updatedAt: Date;
|
|
379
360
|
externalId: string | null;
|
|
380
|
-
playerNumber: number;
|
|
381
361
|
rating: number;
|
|
382
362
|
ratingDeviation: number;
|
|
383
363
|
ranking: number | null;
|
|
@@ -591,7 +571,6 @@ interface UserWithPlayer {
|
|
|
591
571
|
updatedAt: Date;
|
|
592
572
|
player: {
|
|
593
573
|
id: string;
|
|
594
|
-
playerNumber: number;
|
|
595
574
|
name: string | null;
|
|
596
575
|
rating: number;
|
|
597
576
|
ratingDeviation: number;
|
|
@@ -721,4 +700,4 @@ interface ConnectionStatus {
|
|
|
721
700
|
error?: string;
|
|
722
701
|
}
|
|
723
702
|
|
|
724
|
-
export { type ConnectionStatus, type CreatePlayerInput, type CreateResultInput, type CreateTournamentInput, type CreateUserInput, type FindPlayersOptions, type FindResultsOptions, type FindTournamentsOptions, type PlayerStatistics, type PlayerWithResults, type TournamentResultWithTournament, type TournamentStatistics, type UpdatePlayerInput, type UpdateResultInput, type UpdateTournamentInput, type UpdateUserInput, type UserWithPlayer, connect, countPlayers, countResults, countTournaments, countUsers, createManyResults, createPlayer, createResult, createTournament, createUser, createUserWithPlayer, deletePlayer, deleteResult, deleteResultsByTournament, deleteTournament, deleteUser, disconnect, findPlayerByExternalId, findPlayerById,
|
|
703
|
+
export { type ConnectionStatus, type CreatePlayerInput, type CreateResultInput, type CreateTournamentInput, type CreateUserInput, type FindPlayersOptions, type FindResultsOptions, type FindTournamentsOptions, type PlayerStatistics, type PlayerWithResults, type TournamentResultWithTournament, type TournamentStatistics, type UpdatePlayerInput, type UpdateResultInput, type UpdateTournamentInput, type UpdateUserInput, type UserWithPlayer, connect, countPlayers, countResults, countTournaments, countUsers, createManyResults, createPlayer, createResult, createTournament, createUser, createUserWithPlayer, deletePlayer, deleteResult, deleteResultsByTournament, deleteTournament, deleteUser, disconnect, findPlayerByExternalId, findPlayerById, findPlayerByUserEmail, findPlayers, findResultById, findResultByPlayerAndTournament, findResults, findTournamentByExternalId, findTournamentById, findTournaments, findUserByEmail, findUserById, findUsers, getMajorTournaments, getPlayerResults, getPlayerStats, getPlayerTopFinishes, getPlayerWithResults, getRatedPlayers, getRecentTournaments, getTopPlayersByRanking, getTopPlayersByRating, getTournamentResults, getTournamentStats, getTournamentWithResults, getTournamentsByBoosterType, getTournamentsByDateRange, getUserByEmailWithPlayer, getUserWithPlayer, linkPlayerToUser, prisma, recalculateTimeDecay, searchPlayers, searchTournaments, testConnection, updatePlayer, updatePlayerRating, updateResult, updateResultPoints, updateTournament, updateUser, updateUserRefreshToken };
|
package/dist/index.d.ts
CHANGED
|
@@ -25,7 +25,6 @@ declare function testConnection(): Promise<boolean>;
|
|
|
25
25
|
*/
|
|
26
26
|
interface CreatePlayerInput {
|
|
27
27
|
externalId?: string;
|
|
28
|
-
playerNumber?: number;
|
|
29
28
|
name?: string;
|
|
30
29
|
rating?: number;
|
|
31
30
|
ratingDeviation?: number;
|
|
@@ -57,7 +56,7 @@ interface FindPlayersOptions {
|
|
|
57
56
|
include?: Prisma.PlayerInclude;
|
|
58
57
|
}
|
|
59
58
|
/**
|
|
60
|
-
* Creates a new player
|
|
59
|
+
* Creates a new player
|
|
61
60
|
*/
|
|
62
61
|
declare function createPlayer(data: CreatePlayerInput): Promise<Player>;
|
|
63
62
|
/**
|
|
@@ -68,10 +67,6 @@ declare function findPlayerById(id: string, include?: Prisma.PlayerInclude): Pro
|
|
|
68
67
|
* Finds a player by external ID
|
|
69
68
|
*/
|
|
70
69
|
declare function findPlayerByExternalId(externalId: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
|
|
71
|
-
/**
|
|
72
|
-
* Finds a player by player number
|
|
73
|
-
*/
|
|
74
|
-
declare function findPlayerByPlayerNumber(playerNumber: number, include?: Prisma.PlayerInclude): Promise<Player | null>;
|
|
75
70
|
/**
|
|
76
71
|
* Finds a player through their linked User's email
|
|
77
72
|
*/
|
|
@@ -189,7 +184,6 @@ declare function getPlayerWithResults(id: string): Promise<{
|
|
|
189
184
|
createdAt: Date;
|
|
190
185
|
updatedAt: Date;
|
|
191
186
|
externalId: string | null;
|
|
192
|
-
playerNumber: number;
|
|
193
187
|
rating: number;
|
|
194
188
|
ratingDeviation: number;
|
|
195
189
|
ranking: number | null;
|
|
@@ -203,18 +197,6 @@ declare function getPlayerWithResults(id: string): Promise<{
|
|
|
203
197
|
*/
|
|
204
198
|
declare function searchPlayers(query: string, limit?: number): Promise<Player[]>;
|
|
205
199
|
|
|
206
|
-
/**
|
|
207
|
-
* Generates a unique player number with collision handling.
|
|
208
|
-
* Retries up to MAX_RETRIES times if collision occurs.
|
|
209
|
-
*
|
|
210
|
-
* @throws Error if unable to generate unique number after max retries
|
|
211
|
-
*/
|
|
212
|
-
declare function generateUniquePlayerNumber(): Promise<number>;
|
|
213
|
-
/**
|
|
214
|
-
* Validates that a player number is in the valid range
|
|
215
|
-
*/
|
|
216
|
-
declare function isValidPlayerNumber(playerNumber: number): boolean;
|
|
217
|
-
|
|
218
200
|
/**
|
|
219
201
|
* Input for creating a new tournament
|
|
220
202
|
*/
|
|
@@ -317,7 +299,6 @@ declare function getTournamentWithResults(id: string): Promise<({
|
|
|
317
299
|
createdAt: Date;
|
|
318
300
|
updatedAt: Date;
|
|
319
301
|
externalId: string | null;
|
|
320
|
-
playerNumber: number;
|
|
321
302
|
rating: number;
|
|
322
303
|
ratingDeviation: number;
|
|
323
304
|
ranking: number | null;
|
|
@@ -377,7 +358,6 @@ declare function getTournamentStats(id: string): Promise<{
|
|
|
377
358
|
createdAt: Date;
|
|
378
359
|
updatedAt: Date;
|
|
379
360
|
externalId: string | null;
|
|
380
|
-
playerNumber: number;
|
|
381
361
|
rating: number;
|
|
382
362
|
ratingDeviation: number;
|
|
383
363
|
ranking: number | null;
|
|
@@ -591,7 +571,6 @@ interface UserWithPlayer {
|
|
|
591
571
|
updatedAt: Date;
|
|
592
572
|
player: {
|
|
593
573
|
id: string;
|
|
594
|
-
playerNumber: number;
|
|
595
574
|
name: string | null;
|
|
596
575
|
rating: number;
|
|
597
576
|
ratingDeviation: number;
|
|
@@ -721,4 +700,4 @@ interface ConnectionStatus {
|
|
|
721
700
|
error?: string;
|
|
722
701
|
}
|
|
723
702
|
|
|
724
|
-
export { type ConnectionStatus, type CreatePlayerInput, type CreateResultInput, type CreateTournamentInput, type CreateUserInput, type FindPlayersOptions, type FindResultsOptions, type FindTournamentsOptions, type PlayerStatistics, type PlayerWithResults, type TournamentResultWithTournament, type TournamentStatistics, type UpdatePlayerInput, type UpdateResultInput, type UpdateTournamentInput, type UpdateUserInput, type UserWithPlayer, connect, countPlayers, countResults, countTournaments, countUsers, createManyResults, createPlayer, createResult, createTournament, createUser, createUserWithPlayer, deletePlayer, deleteResult, deleteResultsByTournament, deleteTournament, deleteUser, disconnect, findPlayerByExternalId, findPlayerById,
|
|
703
|
+
export { type ConnectionStatus, type CreatePlayerInput, type CreateResultInput, type CreateTournamentInput, type CreateUserInput, type FindPlayersOptions, type FindResultsOptions, type FindTournamentsOptions, type PlayerStatistics, type PlayerWithResults, type TournamentResultWithTournament, type TournamentStatistics, type UpdatePlayerInput, type UpdateResultInput, type UpdateTournamentInput, type UpdateUserInput, type UserWithPlayer, connect, countPlayers, countResults, countTournaments, countUsers, createManyResults, createPlayer, createResult, createTournament, createUser, createUserWithPlayer, deletePlayer, deleteResult, deleteResultsByTournament, deleteTournament, deleteUser, disconnect, findPlayerByExternalId, findPlayerById, findPlayerByUserEmail, findPlayers, findResultById, findResultByPlayerAndTournament, findResults, findTournamentByExternalId, findTournamentById, findTournaments, findUserByEmail, findUserById, findUsers, getMajorTournaments, getPlayerResults, getPlayerStats, getPlayerTopFinishes, getPlayerWithResults, getRatedPlayers, getRecentTournaments, getTopPlayersByRanking, getTopPlayersByRating, getTournamentResults, getTournamentStats, getTournamentWithResults, getTournamentsByBoosterType, getTournamentsByDateRange, getUserByEmailWithPlayer, getUserWithPlayer, linkPlayerToUser, prisma, recalculateTimeDecay, searchPlayers, searchTournaments, testConnection, updatePlayer, updatePlayerRating, updateResult, updateResultPoints, updateTournament, updateUser, updateUserRefreshToken };
|
package/dist/index.js
CHANGED
|
@@ -23,40 +23,10 @@ async function testConnection() {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
// src/player-number.ts
|
|
27
|
-
var MIN_PLAYER_NUMBER = 1e4;
|
|
28
|
-
var MAX_PLAYER_NUMBER = 99999;
|
|
29
|
-
var MAX_RETRIES = 10;
|
|
30
|
-
function generateRandomPlayerNumber() {
|
|
31
|
-
return Math.floor(Math.random() * (MAX_PLAYER_NUMBER - MIN_PLAYER_NUMBER + 1)) + MIN_PLAYER_NUMBER;
|
|
32
|
-
}
|
|
33
|
-
async function generateUniquePlayerNumber() {
|
|
34
|
-
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
35
|
-
const candidate = generateRandomPlayerNumber();
|
|
36
|
-
const existing = await prisma.player.findUnique({
|
|
37
|
-
where: { playerNumber: candidate },
|
|
38
|
-
select: { id: true }
|
|
39
|
-
});
|
|
40
|
-
if (!existing) {
|
|
41
|
-
return candidate;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
throw new Error(
|
|
45
|
-
`Failed to generate unique player number after ${MAX_RETRIES} attempts. Consider increasing the number range or implementing a different allocation strategy.`
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
function isValidPlayerNumber(playerNumber) {
|
|
49
|
-
return Number.isInteger(playerNumber) && playerNumber >= MIN_PLAYER_NUMBER && playerNumber <= MAX_PLAYER_NUMBER;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
26
|
// src/players.ts
|
|
53
27
|
async function createPlayer(data) {
|
|
54
|
-
const playerNumber = data.playerNumber ?? await generateUniquePlayerNumber();
|
|
55
28
|
return prisma.player.create({
|
|
56
|
-
data
|
|
57
|
-
...data,
|
|
58
|
-
playerNumber
|
|
59
|
-
}
|
|
29
|
+
data
|
|
60
30
|
});
|
|
61
31
|
}
|
|
62
32
|
async function findPlayerById(id, include) {
|
|
@@ -71,12 +41,6 @@ async function findPlayerByExternalId(externalId, include) {
|
|
|
71
41
|
include
|
|
72
42
|
});
|
|
73
43
|
}
|
|
74
|
-
async function findPlayerByPlayerNumber(playerNumber, include) {
|
|
75
|
-
return prisma.player.findUnique({
|
|
76
|
-
where: { playerNumber },
|
|
77
|
-
include
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
44
|
async function findPlayerByUserEmail(email, include) {
|
|
81
45
|
const user = await prisma.user.findUnique({
|
|
82
46
|
where: { email },
|
|
@@ -492,11 +456,9 @@ async function createUser(data) {
|
|
|
492
456
|
}
|
|
493
457
|
async function createUserWithPlayer(userData, playerData) {
|
|
494
458
|
return prisma.$transaction(async (tx) => {
|
|
495
|
-
const playerNumber = await generateUniquePlayerNumber();
|
|
496
459
|
const player = await tx.player.create({
|
|
497
460
|
data: {
|
|
498
|
-
name: playerData.name
|
|
499
|
-
playerNumber
|
|
461
|
+
name: playerData.name
|
|
500
462
|
}
|
|
501
463
|
});
|
|
502
464
|
const user = await tx.user.create({
|
|
@@ -508,7 +470,6 @@ async function createUserWithPlayer(userData, playerData) {
|
|
|
508
470
|
player: {
|
|
509
471
|
select: {
|
|
510
472
|
id: true,
|
|
511
|
-
playerNumber: true,
|
|
512
473
|
name: true,
|
|
513
474
|
rating: true,
|
|
514
475
|
ratingDeviation: true,
|
|
@@ -541,7 +502,6 @@ async function getUserWithPlayer(id) {
|
|
|
541
502
|
player: {
|
|
542
503
|
select: {
|
|
543
504
|
id: true,
|
|
544
|
-
playerNumber: true,
|
|
545
505
|
name: true,
|
|
546
506
|
rating: true,
|
|
547
507
|
ratingDeviation: true,
|
|
@@ -564,7 +524,6 @@ async function getUserByEmailWithPlayer(email) {
|
|
|
564
524
|
player: {
|
|
565
525
|
select: {
|
|
566
526
|
id: true,
|
|
567
|
-
playerNumber: true,
|
|
568
527
|
name: true,
|
|
569
528
|
rating: true,
|
|
570
529
|
ratingDeviation: true,
|
|
@@ -610,7 +569,6 @@ async function findUsers(params) {
|
|
|
610
569
|
player: {
|
|
611
570
|
select: {
|
|
612
571
|
id: true,
|
|
613
|
-
playerNumber: true,
|
|
614
572
|
name: true,
|
|
615
573
|
rating: true,
|
|
616
574
|
ratingDeviation: true,
|
|
@@ -642,7 +600,6 @@ async function linkPlayerToUser(userId, playerId) {
|
|
|
642
600
|
player: {
|
|
643
601
|
select: {
|
|
644
602
|
id: true,
|
|
645
|
-
playerNumber: true,
|
|
646
603
|
name: true,
|
|
647
604
|
rating: true,
|
|
648
605
|
ratingDeviation: true,
|
|
@@ -676,7 +633,6 @@ export {
|
|
|
676
633
|
disconnect,
|
|
677
634
|
findPlayerByExternalId,
|
|
678
635
|
findPlayerById,
|
|
679
|
-
findPlayerByPlayerNumber,
|
|
680
636
|
findPlayerByUserEmail,
|
|
681
637
|
findPlayers,
|
|
682
638
|
findResultById,
|
|
@@ -688,7 +644,6 @@ export {
|
|
|
688
644
|
findUserByEmail,
|
|
689
645
|
findUserById,
|
|
690
646
|
findUsers,
|
|
691
|
-
generateUniquePlayerNumber,
|
|
692
647
|
getMajorTournaments,
|
|
693
648
|
getPlayerResults,
|
|
694
649
|
getPlayerStats,
|
|
@@ -705,7 +660,6 @@ export {
|
|
|
705
660
|
getTournamentsByDateRange,
|
|
706
661
|
getUserByEmailWithPlayer,
|
|
707
662
|
getUserWithPlayer,
|
|
708
|
-
isValidPlayerNumber,
|
|
709
663
|
linkPlayerToUser,
|
|
710
664
|
prisma,
|
|
711
665
|
recalculateTimeDecay,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opprs/db-prisma",
|
|
3
|
-
"version": "2.2.1-canary.
|
|
3
|
+
"version": "2.2.1-canary.d052ffb",
|
|
4
4
|
"description": "Database backend for OPPR (Open Pinball Player Ranking System) using Prisma and PostgreSQL",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"oppr",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"vitest": "^4.0.16"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@opprs/core": "^2.2.1-canary.
|
|
59
|
+
"@opprs/core": "^2.2.1-canary.d052ffb"
|
|
60
60
|
},
|
|
61
61
|
"engines": {
|
|
62
62
|
"node": ">=20.9.0"
|
package/prisma/schema.prisma
CHANGED
|
@@ -18,7 +18,6 @@ model Player {
|
|
|
18
18
|
|
|
19
19
|
// Player identification
|
|
20
20
|
externalId String? @unique // External ID from OPPR or other systems
|
|
21
|
-
playerNumber Int @unique // 5-digit unique identifier (10000-99999)
|
|
22
21
|
name String?
|
|
23
22
|
|
|
24
23
|
// OPPR Rating fields
|
|
@@ -37,7 +36,6 @@ model Player {
|
|
|
37
36
|
user User?
|
|
38
37
|
|
|
39
38
|
@@index([externalId])
|
|
40
|
-
@@index([playerNumber])
|
|
41
39
|
@@index([rating])
|
|
42
40
|
@@index([ranking])
|
|
43
41
|
}
|
package/prisma/seed.ts
CHANGED
|
@@ -144,26 +144,6 @@ async function main() {
|
|
|
144
144
|
|
|
145
145
|
console.log(`✓ Created admin user (admin@example.com / ${adminPassword})`);
|
|
146
146
|
|
|
147
|
-
// Create admin user
|
|
148
|
-
console.log('Creating admin user...');
|
|
149
|
-
const adminPassword = 'AdminPassword123!';
|
|
150
|
-
const adminPasswordHash = await bcrypt.hash(adminPassword, BCRYPT_SALT_ROUNDS);
|
|
151
|
-
|
|
152
|
-
await prisma.user.upsert({
|
|
153
|
-
where: { email: 'admin@example.com' },
|
|
154
|
-
update: {
|
|
155
|
-
passwordHash: adminPasswordHash,
|
|
156
|
-
role: 'ADMIN',
|
|
157
|
-
},
|
|
158
|
-
create: {
|
|
159
|
-
email: 'admin@example.com',
|
|
160
|
-
passwordHash: adminPasswordHash,
|
|
161
|
-
role: 'ADMIN',
|
|
162
|
-
},
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
console.log(`✓ Created admin user (admin@example.com / ${adminPassword})`);
|
|
166
|
-
|
|
167
147
|
// Create sample tournaments (using upsert for idempotency)
|
|
168
148
|
console.log('Creating tournaments...');
|
|
169
149
|
|