@opprs/db-prisma 2.0.0 → 2.1.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
@@ -66,6 +66,7 @@ __export(index_exports, {
66
66
  getTournamentsByDateRange: () => getTournamentsByDateRange,
67
67
  getUserByEmailWithPlayer: () => getUserByEmailWithPlayer,
68
68
  getUserWithPlayer: () => getUserWithPlayer,
69
+ linkPlayerToUser: () => linkPlayerToUser,
69
70
  prisma: () => prisma,
70
71
  recalculateTimeDecay: () => recalculateTimeDecay,
71
72
  searchPlayers: () => searchPlayers,
@@ -664,6 +665,38 @@ async function findUsers(params) {
664
665
  });
665
666
  return users;
666
667
  }
668
+ async function linkPlayerToUser(userId, playerId) {
669
+ return prisma.$transaction(async (tx) => {
670
+ if (playerId) {
671
+ const player = await tx.player.findUnique({ where: { id: playerId } });
672
+ if (!player) {
673
+ throw new Error(`Player with id '${playerId}' not found`);
674
+ }
675
+ await tx.user.updateMany({
676
+ where: { playerId },
677
+ data: { playerId: null }
678
+ });
679
+ }
680
+ const user = await tx.user.update({
681
+ where: { id: userId },
682
+ data: { playerId },
683
+ include: {
684
+ player: {
685
+ select: {
686
+ id: true,
687
+ name: true,
688
+ rating: true,
689
+ ratingDeviation: true,
690
+ ranking: true,
691
+ isRated: true,
692
+ eventCount: true
693
+ }
694
+ }
695
+ }
696
+ });
697
+ return user;
698
+ });
699
+ }
667
700
  // Annotate the CommonJS export names for ESM import in node:
668
701
  0 && (module.exports = {
669
702
  connect,
@@ -712,6 +745,7 @@ async function findUsers(params) {
712
745
  getTournamentsByDateRange,
713
746
  getUserByEmailWithPlayer,
714
747
  getUserWithPlayer,
748
+ linkPlayerToUser,
715
749
  prisma,
716
750
  recalculateTimeDecay,
717
751
  searchPlayers,
package/dist/index.d.cts CHANGED
@@ -556,7 +556,7 @@ interface CreateUserInput {
556
556
  interface UpdateUserInput {
557
557
  email?: string;
558
558
  passwordHash?: string;
559
- playerId?: string;
559
+ playerId?: string | null;
560
560
  role?: 'USER' | 'ADMIN';
561
561
  refreshTokenHash?: string | null;
562
562
  }
@@ -630,6 +630,16 @@ declare function findUsers(params: {
630
630
  where?: Prisma.UserWhereInput;
631
631
  orderBy?: Prisma.UserOrderByWithRelationInput;
632
632
  }): Promise<UserWithPlayer[]>;
633
+ /**
634
+ * Links a player to a user, automatically unlinking from any existing user.
635
+ * Uses a transaction to ensure atomicity.
636
+ *
637
+ * @param userId - The user to link the player to
638
+ * @param playerId - The player to link (null to unlink)
639
+ * @returns The updated user with player data
640
+ * @throws Error if player not found
641
+ */
642
+ declare function linkPlayerToUser(userId: string, playerId: string | null): Promise<UserWithPlayer>;
633
643
 
634
644
  /**
635
645
  * Re-export Prisma generated types
@@ -690,4 +700,4 @@ interface ConnectionStatus {
690
700
  error?: string;
691
701
  }
692
702
 
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 };
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
@@ -556,7 +556,7 @@ interface CreateUserInput {
556
556
  interface UpdateUserInput {
557
557
  email?: string;
558
558
  passwordHash?: string;
559
- playerId?: string;
559
+ playerId?: string | null;
560
560
  role?: 'USER' | 'ADMIN';
561
561
  refreshTokenHash?: string | null;
562
562
  }
@@ -630,6 +630,16 @@ declare function findUsers(params: {
630
630
  where?: Prisma.UserWhereInput;
631
631
  orderBy?: Prisma.UserOrderByWithRelationInput;
632
632
  }): Promise<UserWithPlayer[]>;
633
+ /**
634
+ * Links a player to a user, automatically unlinking from any existing user.
635
+ * Uses a transaction to ensure atomicity.
636
+ *
637
+ * @param userId - The user to link the player to
638
+ * @param playerId - The player to link (null to unlink)
639
+ * @returns The updated user with player data
640
+ * @throws Error if player not found
641
+ */
642
+ declare function linkPlayerToUser(userId: string, playerId: string | null): Promise<UserWithPlayer>;
633
643
 
634
644
  /**
635
645
  * Re-export Prisma generated types
@@ -690,4 +700,4 @@ interface ConnectionStatus {
690
700
  error?: string;
691
701
  }
692
702
 
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 };
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
@@ -581,6 +581,38 @@ async function findUsers(params) {
581
581
  });
582
582
  return users;
583
583
  }
584
+ async function linkPlayerToUser(userId, playerId) {
585
+ return prisma.$transaction(async (tx) => {
586
+ if (playerId) {
587
+ const player = await tx.player.findUnique({ where: { id: playerId } });
588
+ if (!player) {
589
+ throw new Error(`Player with id '${playerId}' not found`);
590
+ }
591
+ await tx.user.updateMany({
592
+ where: { playerId },
593
+ data: { playerId: null }
594
+ });
595
+ }
596
+ const user = await tx.user.update({
597
+ where: { id: userId },
598
+ data: { playerId },
599
+ include: {
600
+ player: {
601
+ select: {
602
+ id: true,
603
+ name: true,
604
+ rating: true,
605
+ ratingDeviation: true,
606
+ ranking: true,
607
+ isRated: true,
608
+ eventCount: true
609
+ }
610
+ }
611
+ }
612
+ });
613
+ return user;
614
+ });
615
+ }
584
616
  export {
585
617
  connect,
586
618
  countPlayers,
@@ -628,6 +660,7 @@ export {
628
660
  getTournamentsByDateRange,
629
661
  getUserByEmailWithPlayer,
630
662
  getUserWithPlayer,
663
+ linkPlayerToUser,
631
664
  prisma,
632
665
  recalculateTimeDecay,
633
666
  searchPlayers,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opprs/db-prisma",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Database backend for OPPR (Open Pinball Player Ranking System) using Prisma and PostgreSQL",
5
5
  "keywords": [
6
6
  "oppr",