@opprs/db-prisma 1.1.5 → 2.0.0

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 CHANGED
@@ -37,9 +37,9 @@ __export(index_exports, {
37
37
  deleteTournament: () => deleteTournament,
38
38
  deleteUser: () => deleteUser,
39
39
  disconnect: () => disconnect,
40
- findPlayerByEmail: () => findPlayerByEmail,
41
40
  findPlayerByExternalId: () => findPlayerByExternalId,
42
41
  findPlayerById: () => findPlayerById,
42
+ findPlayerByUserEmail: () => findPlayerByUserEmail,
43
43
  findPlayers: () => findPlayers,
44
44
  findResultById: () => findResultById,
45
45
  findResultByPlayerAndTournament: () => findResultByPlayerAndTournament,
@@ -49,6 +49,7 @@ __export(index_exports, {
49
49
  findTournaments: () => findTournaments,
50
50
  findUserByEmail: () => findUserByEmail,
51
51
  findUserById: () => findUserById,
52
+ findUsers: () => findUsers,
52
53
  getMajorTournaments: () => getMajorTournaments,
53
54
  getPlayerResults: () => getPlayerResults,
54
55
  getPlayerStats: () => getPlayerStats,
@@ -123,11 +124,12 @@ async function findPlayerByExternalId(externalId, include) {
123
124
  include
124
125
  });
125
126
  }
126
- async function findPlayerByEmail(email, include) {
127
- return prisma.player.findUnique({
127
+ async function findPlayerByUserEmail(email, include) {
128
+ const user = await prisma.user.findUnique({
128
129
  where: { email },
129
- include
130
+ include: { player: include ? { include } : true }
130
131
  });
132
+ return user?.player ?? null;
131
133
  }
132
134
  async function findPlayers(options = {}) {
133
135
  return prisma.player.findMany({
@@ -216,10 +218,7 @@ async function searchPlayers(query, limit = 20) {
216
218
  return findPlayers({
217
219
  take: limit,
218
220
  where: {
219
- OR: [
220
- { name: { contains: query, mode: "insensitive" } },
221
- { email: { contains: query, mode: "insensitive" } }
222
- ]
221
+ name: { contains: query, mode: "insensitive" }
223
222
  }
224
223
  });
225
224
  }
@@ -542,8 +541,7 @@ async function createUserWithPlayer(userData, playerData) {
542
541
  return prisma.$transaction(async (tx) => {
543
542
  const player = await tx.player.create({
544
543
  data: {
545
- name: playerData.name,
546
- email: playerData.email
544
+ name: playerData.name
547
545
  }
548
546
  });
549
547
  const user = await tx.user.create({
@@ -644,6 +642,28 @@ async function deleteUser(id) {
644
642
  async function countUsers(where) {
645
643
  return prisma.user.count({ where });
646
644
  }
645
+ async function findUsers(params) {
646
+ const users = await prisma.user.findMany({
647
+ take: params.take,
648
+ skip: params.skip,
649
+ where: params.where,
650
+ orderBy: params.orderBy,
651
+ include: {
652
+ player: {
653
+ select: {
654
+ id: true,
655
+ name: true,
656
+ rating: true,
657
+ ratingDeviation: true,
658
+ ranking: true,
659
+ isRated: true,
660
+ eventCount: true
661
+ }
662
+ }
663
+ }
664
+ });
665
+ return users;
666
+ }
647
667
  // Annotate the CommonJS export names for ESM import in node:
648
668
  0 && (module.exports = {
649
669
  connect,
@@ -663,9 +683,9 @@ async function countUsers(where) {
663
683
  deleteTournament,
664
684
  deleteUser,
665
685
  disconnect,
666
- findPlayerByEmail,
667
686
  findPlayerByExternalId,
668
687
  findPlayerById,
688
+ findPlayerByUserEmail,
669
689
  findPlayers,
670
690
  findResultById,
671
691
  findResultByPlayerAndTournament,
@@ -675,6 +695,7 @@ async function countUsers(where) {
675
695
  findTournaments,
676
696
  findUserByEmail,
677
697
  findUserById,
698
+ findUsers,
678
699
  getMajorTournaments,
679
700
  getPlayerResults,
680
701
  getPlayerStats,
package/dist/index.d.cts CHANGED
@@ -26,7 +26,6 @@ declare function testConnection(): Promise<boolean>;
26
26
  interface CreatePlayerInput {
27
27
  externalId?: string;
28
28
  name?: string;
29
- email?: string;
30
29
  rating?: number;
31
30
  ratingDeviation?: number;
32
31
  ranking?: number;
@@ -38,7 +37,6 @@ interface CreatePlayerInput {
38
37
  */
39
38
  interface UpdatePlayerInput {
40
39
  name?: string;
41
- email?: string;
42
40
  rating?: number;
43
41
  ratingDeviation?: number;
44
42
  ranking?: number;
@@ -70,9 +68,9 @@ declare function findPlayerById(id: string, include?: Prisma.PlayerInclude): Pro
70
68
  */
71
69
  declare function findPlayerByExternalId(externalId: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
72
70
  /**
73
- * Finds a player by email
71
+ * Finds a player through their linked User's email
74
72
  */
75
- declare function findPlayerByEmail(email: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
73
+ declare function findPlayerByUserEmail(email: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
76
74
  /**
77
75
  * Finds multiple players with optional filters
78
76
  */
@@ -186,7 +184,6 @@ declare function getPlayerWithResults(id: string): Promise<{
186
184
  createdAt: Date;
187
185
  updatedAt: Date;
188
186
  externalId: string | null;
189
- email: string | null;
190
187
  rating: number;
191
188
  ratingDeviation: number;
192
189
  ranking: number | null;
@@ -196,7 +193,7 @@ declare function getPlayerWithResults(id: string): Promise<{
196
193
  lastEventDate: Date | null;
197
194
  } | null>;
198
195
  /**
199
- * Searches players by name or email
196
+ * Searches players by name
200
197
  */
201
198
  declare function searchPlayers(query: string, limit?: number): Promise<Player[]>;
202
199
 
@@ -302,7 +299,6 @@ declare function getTournamentWithResults(id: string): Promise<({
302
299
  createdAt: Date;
303
300
  updatedAt: Date;
304
301
  externalId: string | null;
305
- email: string | null;
306
302
  rating: number;
307
303
  ratingDeviation: number;
308
304
  ranking: number | null;
@@ -362,7 +358,6 @@ declare function getTournamentStats(id: string): Promise<{
362
358
  createdAt: Date;
363
359
  updatedAt: Date;
364
360
  externalId: string | null;
365
- email: string | null;
366
361
  rating: number;
367
362
  ratingDeviation: number;
368
363
  ranking: number | null;
@@ -593,7 +588,6 @@ declare function createUser(data: CreateUserInput): Promise<User>;
593
588
  */
594
589
  declare function createUserWithPlayer(userData: Omit<CreateUserInput, 'playerId'>, playerData: {
595
590
  name?: string;
596
- email?: string;
597
591
  }): Promise<UserWithPlayer>;
598
592
  /**
599
593
  * Finds a user by ID
@@ -627,6 +621,15 @@ declare function deleteUser(id: string): Promise<User>;
627
621
  * Counts total users
628
622
  */
629
623
  declare function countUsers(where?: Prisma.UserWhereInput): Promise<number>;
624
+ /**
625
+ * Finds users with pagination and optional filtering
626
+ */
627
+ declare function findUsers(params: {
628
+ take?: number;
629
+ skip?: number;
630
+ where?: Prisma.UserWhereInput;
631
+ orderBy?: Prisma.UserOrderByWithRelationInput;
632
+ }): Promise<UserWithPlayer[]>;
630
633
 
631
634
  /**
632
635
  * Re-export Prisma generated types
@@ -687,4 +690,4 @@ interface ConnectionStatus {
687
690
  error?: string;
688
691
  }
689
692
 
690
- 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, findPlayerByEmail, findPlayerByExternalId, findPlayerById, findPlayers, findResultById, findResultByPlayerAndTournament, findResults, findTournamentByExternalId, findTournamentById, findTournaments, findUserByEmail, findUserById, getMajorTournaments, getPlayerResults, getPlayerStats, getPlayerTopFinishes, getPlayerWithResults, getRatedPlayers, getRecentTournaments, getTopPlayersByRanking, getTopPlayersByRating, getTournamentResults, getTournamentStats, getTournamentWithResults, getTournamentsByBoosterType, getTournamentsByDateRange, getUserByEmailWithPlayer, getUserWithPlayer, prisma, recalculateTimeDecay, searchPlayers, searchTournaments, testConnection, updatePlayer, updatePlayerRating, updateResult, updateResultPoints, updateTournament, updateUser, updateUserRefreshToken };
693
+ 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, prisma, recalculateTimeDecay, searchPlayers, searchTournaments, testConnection, updatePlayer, updatePlayerRating, updateResult, updateResultPoints, updateTournament, updateUser, updateUserRefreshToken };
package/dist/index.d.ts CHANGED
@@ -26,7 +26,6 @@ declare function testConnection(): Promise<boolean>;
26
26
  interface CreatePlayerInput {
27
27
  externalId?: string;
28
28
  name?: string;
29
- email?: string;
30
29
  rating?: number;
31
30
  ratingDeviation?: number;
32
31
  ranking?: number;
@@ -38,7 +37,6 @@ interface CreatePlayerInput {
38
37
  */
39
38
  interface UpdatePlayerInput {
40
39
  name?: string;
41
- email?: string;
42
40
  rating?: number;
43
41
  ratingDeviation?: number;
44
42
  ranking?: number;
@@ -70,9 +68,9 @@ declare function findPlayerById(id: string, include?: Prisma.PlayerInclude): Pro
70
68
  */
71
69
  declare function findPlayerByExternalId(externalId: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
72
70
  /**
73
- * Finds a player by email
71
+ * Finds a player through their linked User's email
74
72
  */
75
- declare function findPlayerByEmail(email: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
73
+ declare function findPlayerByUserEmail(email: string, include?: Prisma.PlayerInclude): Promise<Player | null>;
76
74
  /**
77
75
  * Finds multiple players with optional filters
78
76
  */
@@ -186,7 +184,6 @@ declare function getPlayerWithResults(id: string): Promise<{
186
184
  createdAt: Date;
187
185
  updatedAt: Date;
188
186
  externalId: string | null;
189
- email: string | null;
190
187
  rating: number;
191
188
  ratingDeviation: number;
192
189
  ranking: number | null;
@@ -196,7 +193,7 @@ declare function getPlayerWithResults(id: string): Promise<{
196
193
  lastEventDate: Date | null;
197
194
  } | null>;
198
195
  /**
199
- * Searches players by name or email
196
+ * Searches players by name
200
197
  */
201
198
  declare function searchPlayers(query: string, limit?: number): Promise<Player[]>;
202
199
 
@@ -302,7 +299,6 @@ declare function getTournamentWithResults(id: string): Promise<({
302
299
  createdAt: Date;
303
300
  updatedAt: Date;
304
301
  externalId: string | null;
305
- email: string | null;
306
302
  rating: number;
307
303
  ratingDeviation: number;
308
304
  ranking: number | null;
@@ -362,7 +358,6 @@ declare function getTournamentStats(id: string): Promise<{
362
358
  createdAt: Date;
363
359
  updatedAt: Date;
364
360
  externalId: string | null;
365
- email: string | null;
366
361
  rating: number;
367
362
  ratingDeviation: number;
368
363
  ranking: number | null;
@@ -593,7 +588,6 @@ declare function createUser(data: CreateUserInput): Promise<User>;
593
588
  */
594
589
  declare function createUserWithPlayer(userData: Omit<CreateUserInput, 'playerId'>, playerData: {
595
590
  name?: string;
596
- email?: string;
597
591
  }): Promise<UserWithPlayer>;
598
592
  /**
599
593
  * Finds a user by ID
@@ -627,6 +621,15 @@ declare function deleteUser(id: string): Promise<User>;
627
621
  * Counts total users
628
622
  */
629
623
  declare function countUsers(where?: Prisma.UserWhereInput): Promise<number>;
624
+ /**
625
+ * Finds users with pagination and optional filtering
626
+ */
627
+ declare function findUsers(params: {
628
+ take?: number;
629
+ skip?: number;
630
+ where?: Prisma.UserWhereInput;
631
+ orderBy?: Prisma.UserOrderByWithRelationInput;
632
+ }): Promise<UserWithPlayer[]>;
630
633
 
631
634
  /**
632
635
  * Re-export Prisma generated types
@@ -687,4 +690,4 @@ interface ConnectionStatus {
687
690
  error?: string;
688
691
  }
689
692
 
690
- 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, findPlayerByEmail, findPlayerByExternalId, findPlayerById, findPlayers, findResultById, findResultByPlayerAndTournament, findResults, findTournamentByExternalId, findTournamentById, findTournaments, findUserByEmail, findUserById, getMajorTournaments, getPlayerResults, getPlayerStats, getPlayerTopFinishes, getPlayerWithResults, getRatedPlayers, getRecentTournaments, getTopPlayersByRanking, getTopPlayersByRating, getTournamentResults, getTournamentStats, getTournamentWithResults, getTournamentsByBoosterType, getTournamentsByDateRange, getUserByEmailWithPlayer, getUserWithPlayer, prisma, recalculateTimeDecay, searchPlayers, searchTournaments, testConnection, updatePlayer, updatePlayerRating, updateResult, updateResultPoints, updateTournament, updateUser, updateUserRefreshToken };
693
+ 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, prisma, recalculateTimeDecay, searchPlayers, searchTournaments, testConnection, updatePlayer, updatePlayerRating, updateResult, updateResultPoints, updateTournament, updateUser, updateUserRefreshToken };
package/dist/index.js CHANGED
@@ -41,11 +41,12 @@ async function findPlayerByExternalId(externalId, include) {
41
41
  include
42
42
  });
43
43
  }
44
- async function findPlayerByEmail(email, include) {
45
- return prisma.player.findUnique({
44
+ async function findPlayerByUserEmail(email, include) {
45
+ const user = await prisma.user.findUnique({
46
46
  where: { email },
47
- include
47
+ include: { player: include ? { include } : true }
48
48
  });
49
+ return user?.player ?? null;
49
50
  }
50
51
  async function findPlayers(options = {}) {
51
52
  return prisma.player.findMany({
@@ -134,10 +135,7 @@ async function searchPlayers(query, limit = 20) {
134
135
  return findPlayers({
135
136
  take: limit,
136
137
  where: {
137
- OR: [
138
- { name: { contains: query, mode: "insensitive" } },
139
- { email: { contains: query, mode: "insensitive" } }
140
- ]
138
+ name: { contains: query, mode: "insensitive" }
141
139
  }
142
140
  });
143
141
  }
@@ -460,8 +458,7 @@ async function createUserWithPlayer(userData, playerData) {
460
458
  return prisma.$transaction(async (tx) => {
461
459
  const player = await tx.player.create({
462
460
  data: {
463
- name: playerData.name,
464
- email: playerData.email
461
+ name: playerData.name
465
462
  }
466
463
  });
467
464
  const user = await tx.user.create({
@@ -562,6 +559,28 @@ async function deleteUser(id) {
562
559
  async function countUsers(where) {
563
560
  return prisma.user.count({ where });
564
561
  }
562
+ async function findUsers(params) {
563
+ const users = await prisma.user.findMany({
564
+ take: params.take,
565
+ skip: params.skip,
566
+ where: params.where,
567
+ orderBy: params.orderBy,
568
+ include: {
569
+ player: {
570
+ select: {
571
+ id: true,
572
+ name: true,
573
+ rating: true,
574
+ ratingDeviation: true,
575
+ ranking: true,
576
+ isRated: true,
577
+ eventCount: true
578
+ }
579
+ }
580
+ }
581
+ });
582
+ return users;
583
+ }
565
584
  export {
566
585
  connect,
567
586
  countPlayers,
@@ -580,9 +599,9 @@ export {
580
599
  deleteTournament,
581
600
  deleteUser,
582
601
  disconnect,
583
- findPlayerByEmail,
584
602
  findPlayerByExternalId,
585
603
  findPlayerById,
604
+ findPlayerByUserEmail,
586
605
  findPlayers,
587
606
  findResultById,
588
607
  findResultByPlayerAndTournament,
@@ -592,6 +611,7 @@ export {
592
611
  findTournaments,
593
612
  findUserByEmail,
594
613
  findUserById,
614
+ findUsers,
595
615
  getMajorTournaments,
596
616
  getPlayerResults,
597
617
  getPlayerStats,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opprs/db-prisma",
3
- "version": "1.1.5",
3
+ "version": "2.0.0",
4
4
  "description": "Database backend for OPPR (Open Pinball Player Ranking System) using Prisma and PostgreSQL",
5
5
  "keywords": [
6
6
  "oppr",
@@ -80,6 +80,7 @@
80
80
  "db:migrate:prod": "prisma migrate deploy",
81
81
  "db:studio": "prisma studio",
82
82
  "db:seed": "tsx prisma/seed.ts",
83
- "db:reset": "prisma migrate reset"
83
+ "db:reset": "prisma migrate reset",
84
+ "db:make-admin": "tsx scripts/make-admin.ts"
84
85
  }
85
86
  }
@@ -19,7 +19,6 @@ model Player {
19
19
  // Player identification
20
20
  externalId String? @unique // External ID from OPPR or other systems
21
21
  name String?
22
- email String? @unique
23
22
 
24
23
  // OPPR Rating fields
25
24
  rating Float @default(1500) // Glicko rating
@@ -36,7 +35,6 @@ model Player {
36
35
  tournamentResults TournamentResult[]
37
36
  user User?
38
37
 
39
- @@index([email])
40
38
  @@index([externalId])
41
39
  @@index([rating])
42
40
  @@index([ranking])