because I got bored of customising my CV for every job
1import { Injectable } from "@nestjs/common";
2import type { RefreshToken as PrismaRefreshToken } from "@prisma/client";
3import { RefreshToken } from "./refresh-token.entity";
4
5@Injectable()
6export class RefreshTokenMapper {
7 toDomain(prismaToken: null, decryptedToken?: string): null;
8 toDomain(
9 prismaToken: PrismaRefreshToken,
10 decryptedToken: string,
11 ): RefreshToken;
12 toDomain(
13 prismaToken: PrismaRefreshToken | null,
14 decryptedToken?: string,
15 ): RefreshToken | null {
16 if (prismaToken === null) {
17 return null;
18 }
19
20 return new RefreshToken(
21 prismaToken.id,
22 decryptedToken ?? prismaToken.token,
23 prismaToken.userId,
24 prismaToken.expiresAt,
25 prismaToken.createdAt,
26 prismaToken.updatedAt,
27 prismaToken.userAgent,
28 prismaToken.ipAddress,
29 prismaToken.deviceName,
30 prismaToken.deviceType,
31 prismaToken.country,
32 prismaToken.city,
33 prismaToken.usedAt,
34 );
35 }
36
37 mapToDomain(
38 prismaTokens: PrismaRefreshToken[],
39 decryptedTokens: string[],
40 ): RefreshToken[] {
41 return prismaTokens.map((token, index) =>
42 this.toDomain(token, decryptedTokens[index] ?? token.token),
43 );
44 }
45}