website refactor
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import type { UserListResponse } from '@/lib/api/admin/AdminApiClient';
|
||||
import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData';
|
||||
|
||||
/**
|
||||
* AdminUsersViewDataBuilder
|
||||
*
|
||||
* Server-side builder that transforms API DTO
|
||||
* into ViewData for the AdminUsersTemplate.
|
||||
*
|
||||
* Deterministic, side-effect free.
|
||||
*/
|
||||
export class AdminUsersViewDataBuilder {
|
||||
static build(apiDto: UserListResponse): AdminUsersViewData {
|
||||
const users = apiDto.users.map(user => ({
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
displayName: user.displayName,
|
||||
roles: user.roles,
|
||||
status: user.status,
|
||||
isSystemAdmin: user.isSystemAdmin,
|
||||
createdAt: user.createdAt.toISOString(),
|
||||
updatedAt: user.updatedAt.toISOString(),
|
||||
lastLoginAt: user.lastLoginAt?.toISOString(),
|
||||
primaryDriverId: user.primaryDriverId,
|
||||
}));
|
||||
|
||||
return {
|
||||
users,
|
||||
total: apiDto.total,
|
||||
page: apiDto.page,
|
||||
limit: apiDto.limit,
|
||||
totalPages: apiDto.totalPages,
|
||||
// Pre-computed derived values for template
|
||||
activeUserCount: users.filter(u => u.status === 'active').length,
|
||||
adminCount: users.filter(u => u.isSystemAdmin).length,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user