/** * Tenant Response Mapper * * Maps API response schemas to domain Tenant objects. * Handles transformation from @archer/api-interface schemas → dashboard domain. * * @layer Infrastructure - API Client */ import type { TenantResponse, TenantListResponse } from '@archer/api-interface'; import { Tenant, TenantStatus } from '@/domain/entities/Tenant'; import type { PaginationMeta } from '../../shared/types'; /** * TenantResponseMapper * * Transforms response DTOs to Tenant domain objects. * All mappings are internal - not exposed to application layer. */ export class TenantResponseMapper { /** * Maps TenantResponse schema to domain Tenant object * * @param response - TenantResponse DTO from API * @returns Tenant domain entity */ static toTenant(response: TenantResponse): Tenant { return Tenant.fromPersistence({ id: response.id, companyId: response.companyId, name: response.name, domain: response.domain, status: response.status as TenantStatus, integrationKeysCount: 0, // Not provided by API response, default to 0 createdAt: response.createdAt, updatedAt: response.updatedAt, }); } /** * Maps TenantListResponse schema to array of domain Tenants with pagination * * @param response - TenantListResponse DTO from API * @returns Object with tenants array and pagination metadata */ static toTenantList(response: TenantListResponse): { tenants: Tenant[]; pagination: PaginationMeta; } { return { tenants: response.data.map((tenant) => this.toTenant(tenant)), pagination: { page: response.page, limit: response.limit, total: response.totalRows, totalPages: response.totalPages, hasNext: response.page < response.totalPages, hasPrevious: response.page > 1, }, }; } }