website refactor

This commit is contained in:
2026-01-14 02:02:24 +01:00
parent 8d7c709e0c
commit 4522d41aef
291 changed files with 12763 additions and 9309 deletions

View File

@@ -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,
};
}
}