import { BadRequestException } from '@nestjs/common'; import { FREIGHT_TYPES, FreightType } from './entities/booking.entity'; import { BookingFreightShapeInput } from './dto/validators/booking-freight.validator'; /** Normalize and validate booking freight shape (used on create and after update merge). */ export function assertFreightShape(input: BookingFreightShapeInput): void { if (!input.freightType || !FREIGHT_TYPES.includes(input.freightType as FreightType)) { throw new BadRequestException( `freightType is required and must be one of: ${FREIGHT_TYPES.join(', ')}`, ); } // const containers = input.containers ?? []; const hasContainers = containers.length > 0; const hasCargoType = Boolean(input.cargoTypeId); if (input.freightType === 'BULK') { if (hasContainers) { throw new BadRequestException( 'BULK freight cannot include container lines; use cargoTypeId only', ); } if (!hasCargoType) { throw new BadRequestException('cargoTypeId is required for BULK freight'); } return; } if (hasCargoType) { throw new BadRequestException('cargoTypeId is not allowed for CONTAINER freight'); } if (!hasContainers) { throw new BadRequestException( 'CONTAINER freight requires at least one container line with containerTypeId', ); } for (const line of containers) { if (!line.containerTypeId) { throw new BadRequestException('Each container line must include containerTypeId'); } } }