120 lines
5.0 KiB
TypeScript
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;
|
|
}
|
|
}
|