35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
|
|
|
|
import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder';
|
|
import type { UserListResponseDTO } from '@/lib/types/generated/UserListResponseDTO';
|
|
import type { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData';
|
|
|
|
export class AdminUsersViewDataBuilder {
|
|
public static build(apiDto: UserListResponseDTO): AdminUsersViewData {
|
|
const users = apiDto.users.map(u => ({
|
|
id: u.id,
|
|
email: u.email,
|
|
displayName: u.displayName,
|
|
roles: u.roles,
|
|
status: u.status,
|
|
isSystemAdmin: u.isSystemAdmin,
|
|
createdAt: u.createdAt,
|
|
updatedAt: u.updatedAt,
|
|
lastLoginAt: u.lastLoginAt,
|
|
primaryDriverId: u.primaryDriverId,
|
|
}));
|
|
|
|
return {
|
|
users,
|
|
total: apiDto.total,
|
|
page: apiDto.page,
|
|
limit: apiDto.limit,
|
|
totalPages: apiDto.totalPages,
|
|
activeUserCount: users.filter(u => u.status === 'active').length,
|
|
adminCount: users.filter(u => u.isSystemAdmin).length,
|
|
};
|
|
}
|
|
}
|
|
|
|
AdminUsersViewDataBuilder satisfies ViewDataBuilder<UserListResponseDTO, AdminUsersViewData>;
|