Files
gridpilot.gg/apps/website/lib/builders/view-data/AdminUsersViewDataBuilder.ts
2026-01-24 00:52:27 +01:00

35 lines
1.1 KiB
TypeScript

'use client';
import type { UserListResponseDTO } from '@/lib/types/generated/UserListResponseDTO';
import type { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData';
import type { ViewDataBuilder } from '@/lib/contracts/builders/ViewDataBuilder';
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>;