31 lines
961 B
TypeScript
31 lines
961 B
TypeScript
import { ViewData } from '@/lib/contracts/view-data/ViewData';
|
|
import type { UserListResponse } from '@/lib/types/admin';
|
|
import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData';
|
|
|
|
import { ViewDataBuilder } from "../../contracts/builders/ViewDataBuilder";
|
|
|
|
export class AdminUsersViewDataBuilder implements ViewDataBuilder<any, any> {
|
|
build(input: any): any {
|
|
return AdminUsersViewDataBuilder.build(input);
|
|
}
|
|
|
|
static build(
|
|
public static build(apiDto: UserListResponse): AdminUsersViewData {
|
|
const users = apiDto.users.map(u => ({
|
|
...u,
|
|
joinedAt: new Date(u.joinedAt),
|
|
}));
|
|
|
|
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,
|
|
};
|
|
}
|
|
}
|