69 lines
1.5 KiB
TypeScript
69 lines
1.5 KiB
TypeScript
/**
|
|
* Booking Export DTO
|
|
*
|
|
* Defines export format options
|
|
*/
|
|
|
|
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
|
import { IsEnum, IsOptional, IsArray, IsString } from 'class-validator';
|
|
|
|
export enum ExportFormat {
|
|
CSV = 'csv',
|
|
EXCEL = 'excel',
|
|
JSON = 'json',
|
|
}
|
|
|
|
export enum ExportField {
|
|
BOOKING_NUMBER = 'bookingNumber',
|
|
STATUS = 'status',
|
|
CREATED_AT = 'createdAt',
|
|
CARRIER = 'carrier',
|
|
ORIGIN = 'origin',
|
|
DESTINATION = 'destination',
|
|
ETD = 'etd',
|
|
ETA = 'eta',
|
|
SHIPPER = 'shipper',
|
|
CONSIGNEE = 'consignee',
|
|
CONTAINER_TYPE = 'containerType',
|
|
CONTAINER_COUNT = 'containerCount',
|
|
TOTAL_TEUS = 'totalTEUs',
|
|
PRICE = 'price',
|
|
}
|
|
|
|
export class BookingExportDto {
|
|
@ApiProperty({
|
|
description: 'Export format',
|
|
enum: ExportFormat,
|
|
example: ExportFormat.CSV,
|
|
})
|
|
@IsEnum(ExportFormat)
|
|
format: ExportFormat;
|
|
|
|
@ApiPropertyOptional({
|
|
description: 'Fields to include in export (if omitted, all fields included)',
|
|
enum: ExportField,
|
|
isArray: true,
|
|
example: [
|
|
ExportField.BOOKING_NUMBER,
|
|
ExportField.STATUS,
|
|
ExportField.CARRIER,
|
|
ExportField.ORIGIN,
|
|
ExportField.DESTINATION,
|
|
],
|
|
})
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsEnum(ExportField, { each: true })
|
|
fields?: ExportField[];
|
|
|
|
@ApiPropertyOptional({
|
|
description: 'Booking IDs to export (if omitted, exports filtered bookings)',
|
|
isArray: true,
|
|
example: ['550e8400-e29b-41d4-a716-446655440000'],
|
|
})
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsString({ each: true })
|
|
bookingIds?: string[];
|
|
}
|