Files
SerpentRace/SerpentRace_Backend/src/Database/mappers/user.mapper.ts
T
2025-07-18 09:20:40 +02:00

120 lines
5.0 KiB
TypeScript

import { User, UserStatus, UserAuthLevel } from '../entities/user.entity';
import { Company } from '../entities/company.entity';
import {
CreateUserDto,
UpdateUserDto,
UserResponseDto,
JwtTokenDto,
LoginResponseDto,
UserRequestDto,
LoginRequestDto,
RemoveUserDto,
PasswordResetRequestDto,
PasswordResetDto,
EmailConfirmationDto,
PremiumSubscriptionDto,
CompanyRegistrationDto
} from '../dto/user.dto';
export class UserMapper {
static toEntity(createUserDto: CreateUserDto): User {
const user = new User();
user.username = createUserDto.username;
user.FirstName = createUserDto.FirstName;
user.LastName = createUserDto.LastName;
user.email = createUserDto.email;
user.password = createUserDto.password;
user.CompanyId = createUserDto.CompanyId;
user.authLevel = createUserDto.authLevel || UserAuthLevel.STANDARD;
user.status = createUserDto.status || UserStatus.PENDING_CONFIRMATION;
return user;
}
static toResponseDto(user: User): UserResponseDto {
const dto = new UserResponseDto();
dto.id = user.id;
dto.guid = user.guid;
dto.username = user.username;
dto.FirstName = user.FirstName;
dto.LastName = user.LastName;
dto.email = user.email;
dto.createdAt = user.createdAt;
dto.updatedAt = user.updatedAt;
dto.status = user.status;
dto.authLevel = user.authLevel;
dto.premiumExpirationDate = user.premiumExpirationDate;
dto.CompanyId = user.CompanyId;
dto.companyRegistered = user.companyRegistered;
dto.companyRegistrationDate = user.companyRegistrationDate;
return dto;
}
static toJwtTokenDto(user: User): JwtTokenDto {
const dto = new JwtTokenDto();
dto.userId = user.id;
dto.username = user.username;
dto.companyId = user.CompanyId;
dto.authLevel = user.authLevel;
dto.status = user.status;
return dto;
}
static toLoginResponseDto(user: User, token: string): LoginResponseDto {
const dto = new LoginResponseDto();
dto.username = user.username;
dto.id = user.id;
dto.companyId = user.CompanyId;
dto.authLevel = user.authLevel;
dto.status = user.status;
dto.token = token;
return dto;
}
static updateEntity(user: User, updateUserDto: UpdateUserDto): User {
if (updateUserDto.username !== undefined) user.username = updateUserDto.username;
if (updateUserDto.FirstName !== undefined) user.FirstName = updateUserDto.FirstName;
if (updateUserDto.LastName !== undefined) user.LastName = updateUserDto.LastName;
if (updateUserDto.email !== undefined) user.email = updateUserDto.email;
if (updateUserDto.password !== undefined) user.password = updateUserDto.password;
if (updateUserDto.status !== undefined) user.status = updateUserDto.status;
if (updateUserDto.authLevel !== undefined) user.authLevel = updateUserDto.authLevel;
if (updateUserDto.securityToken !== undefined) user.securityToken = updateUserDto.securityToken;
if (updateUserDto.securityTokenExpiry !== undefined) user.securityTokenExpiry = updateUserDto.securityTokenExpiry;
if (updateUserDto.premiumExpirationDate !== undefined) user.premiumExpirationDate = updateUserDto.premiumExpirationDate;
if (updateUserDto.CompanyId !== undefined) user.CompanyId = updateUserDto.CompanyId;
if (updateUserDto.companyRegistered !== undefined) user.companyRegistered = updateUserDto.companyRegistered;
if (updateUserDto.companyRegistrationDate !== undefined) user.companyRegistrationDate = updateUserDto.companyRegistrationDate;
return user;
}
static toResponseDtoArray(users: User[]): UserResponseDto[] {
return users.map(user => this.toResponseDto(user));
}
static toQueryParams(requestDto: UserRequestDto): any {
const params: any = {};
if (requestDto.guid) params.guid = requestDto.guid;
if (requestDto.username) params.username = requestDto.username;
if (requestDto.email) params.email = requestDto.email;
if (requestDto.status !== undefined) params.status = requestDto.status;
if (requestDto.authLevel !== undefined) params.authLevel = requestDto.authLevel;
if (requestDto.CompanyId) params.CompanyId = requestDto.CompanyId;
if (requestDto.companyRegistered !== undefined) params.companyRegistered = requestDto.companyRegistered;
return params;
}
static canMapToResponse(user: User): boolean {
return user.status !== UserStatus.DELETED;
}
static toPublicResponseDto(user: User): Partial<UserResponseDto> {
const dto = this.toResponseDto(user);
const publicDto: Partial<UserResponseDto> = { ...dto };
delete publicDto.email;
delete publicDto.premiumExpirationDate;
delete publicDto.companyRegistrationDate;
return publicDto;
}
}