47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
'use client';
|
|
|
|
import type { UserDto, DashboardStats, UserListResponse } from '@/lib/api/admin/AdminApiClient';
|
|
import { AdminUserViewModel, DashboardStatsViewModel, UserListViewModel } from './AdminUserViewModel';
|
|
|
|
/**
|
|
* AdminViewModelPresenter
|
|
*
|
|
* Presenter layer for transforming API DTOs to ViewModels.
|
|
* Runs in client code only ('use client').
|
|
* Deterministic, side-effect free transformations.
|
|
*/
|
|
export class AdminViewModelPresenter {
|
|
/**
|
|
* Map a single user DTO to a View Model
|
|
*/
|
|
static mapUser(apiDto: UserDto): AdminUserViewModel {
|
|
return new AdminUserViewModel(apiDto);
|
|
}
|
|
|
|
/**
|
|
* Map an array of user DTOs to View Models
|
|
*/
|
|
static mapUsers(apiDtos: UserDto[]): AdminUserViewModel[] {
|
|
return apiDtos.map(apiDto => this.mapUser(apiDto));
|
|
}
|
|
|
|
/**
|
|
* Map dashboard stats DTO to View Model
|
|
*/
|
|
static mapDashboardStats(apiDto: DashboardStats): DashboardStatsViewModel {
|
|
return new DashboardStatsViewModel(apiDto);
|
|
}
|
|
|
|
/**
|
|
* Map user list response to View Model
|
|
*/
|
|
static mapUserList(viewData: UserListResponse): UserListViewModel {
|
|
return new UserListViewModel({
|
|
users: viewData.users,
|
|
total: viewData.total,
|
|
page: viewData.page,
|
|
limit: viewData.limit,
|
|
totalPages: viewData.totalPages,
|
|
});
|
|
}
|
|
} |