Files
edr-platform/apps/edr-passenger-api/src/modules/system-config/system-config.dto.ts

49 lines
1.9 KiB
TypeScript

import { IsInt, IsOptional, Min, Max } from 'class-validator';
import { Type } from 'class-transformer';
import { ApiPropertyOptional } from '@nestjs/swagger';
/**
* Whitelisted, typed body for `PATCH /config`. Config is persisted as string key/values, but every
* known key is a positive integer (durations, hour windows, throttle limits/TTLs). Values arrive as
* strings from the backoffice form; `@Type(() => Number)` coerces them so the numeric/range checks
* apply (M-3 — the endpoint previously stored any raw string, e.g. `seat_hold_duration_minutes: -1`).
* Unknown keys are stripped by the global whitelisting ValidationPipe.
*/
export class UpdateSystemConfigDto {
@ApiPropertyOptional({ example: 5, description: 'Seat-hold duration in minutes (1..60)' })
@IsOptional() @Type(() => Number) @IsInt() @Min(1) @Max(60)
seat_hold_duration_minutes?: number;
@ApiPropertyOptional({ example: 2 })
@IsOptional() @Type(() => Number) @IsInt() @Min(0)
hold_cutoff_hours_before_departure?: number;
@ApiPropertyOptional({ example: 4 })
@IsOptional() @Type(() => Number) @IsInt() @Min(0)
boarding_window_hours_before_departure?: number;
@ApiPropertyOptional({ example: 5 })
@IsOptional() @Type(() => Number) @IsInt() @Min(1)
throttle_auth_limit?: number;
@ApiPropertyOptional({ example: 60000 })
@IsOptional() @Type(() => Number) @IsInt() @Min(1)
throttle_auth_ttl_ms?: number;
@ApiPropertyOptional({ example: 20 })
@IsOptional() @Type(() => Number) @IsInt() @Min(1)
throttle_strict_limit?: number;
@ApiPropertyOptional({ example: 60000 })
@IsOptional() @Type(() => Number) @IsInt() @Min(1)
throttle_strict_ttl_ms?: number;
@ApiPropertyOptional({ example: 100 })
@IsOptional() @Type(() => Number) @IsInt() @Min(1)
throttle_default_limit?: number;
@ApiPropertyOptional({ example: 60000 })
@IsOptional() @Type(() => Number) @IsInt() @Min(1)
throttle_default_ttl_ms?: number;
}