/** * Tenant Request Mapper * * Maps domain Tenant objects to API request schemas. * Handles transformation from dashboard domain → @archer/api-interface schemas. * * @layer Infrastructure - API Client */ import type { CreateTenantRequest, UpdateTenantRequest } from '@archer/api-interface'; import { Tenant } from '@/domain/entities/Tenant'; /** * TenantRequestMapper * * Transforms Tenant domain objects to request DTOs. * All mappings are internal - not exposed to application layer. */ export class TenantRequestMapper { /** * Maps domain Tenant to CreateTenantRequest schema * * @param tenant - Tenant domain object * @returns CreateTenantRequest DTO for API */ static toCreateRequest(tenant: Tenant): CreateTenantRequest { return { companyId: tenant.companyId, name: tenant.name, domain: tenant.domain, // Already lowercase in domain status: tenant.status as CreateTenantRequest['status'], }; } /** * Maps partial domain Tenant to UpdateTenantRequest schema * * @param updates - Partial Tenant domain object with changes * @returns UpdateTenantRequest DTO for API */ static toUpdateRequest(updates: Partial): UpdateTenantRequest { const request: UpdateTenantRequest = {}; if (updates.name !== undefined) { request.name = updates.name; } if (updates.domain !== undefined) { request.domain = updates.domain; } if (updates.status !== undefined) { request.status = updates.status as UpdateTenantRequest['status']; } return request; } }