Assist_Design/apps/bff/src/infra/utils/user-mapper.util.ts

57 lines
1.6 KiB
TypeScript
Raw Normal View History

import type { AuthenticatedUser, User } from "@customer-portal/domain";
import type { User as PrismaUser } from "@prisma/client";
export function mapPrismaUserToSharedUser(user: PrismaUser): User {
return {
id: user.id,
email: user.email,
firstName: user.firstName || undefined,
lastName: user.lastName || undefined,
company: user.company || undefined,
phone: user.phone || undefined,
mfaEnabled: !!user.mfaSecret,
emailVerified: user.emailVerified,
createdAt: user.createdAt.toISOString(),
updatedAt: user.updatedAt.toISOString(),
};
}
export function mapPrismaUserToEnhancedBase(user: PrismaUser): {
id: string;
email: string;
firstName?: string;
lastName?: string;
company?: string;
phone?: string;
mfaEnabled: boolean;
emailVerified: boolean;
createdAt: Date;
updatedAt: Date;
} {
return {
id: user.id,
email: user.email,
firstName: user.firstName || undefined,
lastName: user.lastName || undefined,
company: user.company || undefined,
phone: user.phone || undefined,
mfaEnabled: !!user.mfaSecret,
emailVerified: user.emailVerified,
createdAt: user.createdAt,
updatedAt: user.updatedAt,
};
}
export function mapPrismaUserToUserProfile(user: PrismaUser): AuthenticatedUser {
const shared = mapPrismaUserToSharedUser(user);
const normalizedRole = user.role?.toLowerCase() === "admin" ? "admin" : "user";
return {
...shared,
avatar: undefined,
preferences: {},
lastLoginAt: user.lastLoginAt ? user.lastLoginAt.toISOString() : undefined,
role: normalizedRole,
};
}