import { DomainConflictError } from '../../../common/errors/domain-conflict.error';
type ImportInput = Record<string, any>;
function object(input: unknown, code: string): asserts input is ImportInput {
if (!input || typeof input !== 'object' || Array.isArray(input)) throw new DomainConflictError(code);
}
function text(value: unknown, max: number, code: string): asserts value is string {
if (typeof value !== 'string' || value.trim().length === 0 || value.length > max) throw new DomainConflictError(code);
}
function scope(input: unknown, code: string): asserts input is ImportInput {
object(input, code);
text(input.organizationId, 200, code);
text(input.locationId, 200, code);
}
function record(value: unknown, code: string): void {
if (value === undefined || value === null) return;
if (!value || typeof value !== 'object' || Array.isArray(value) || Object.keys(value).length > 100) throw new DomainConflictError(code);
try {
const serialized = JSON.stringify(value);
if (typeof serialized !== 'string' || serialized.length > 200_000) throw new DomainConflictError(code);
} catch {
throw new DomainConflictError(code);
}
}
export function assertImportCreateInput(input: unknown): asserts input is ImportInput {
const code = 'imports.input_invalid';
scope(input, code);
text(input.importType, 100, code);
text(input.fileAssetId, 200, code);
record(input.mapping, code);
record(input.options, code);
if (input.userId !== undefined && input.userId !== null) text(input.userId, 200, code);
}
export function assertImportJobInput(input: unknown): asserts input is ImportInput {
const code = 'imports.input_invalid';
scope(input, code);
text(input.id ?? input.importJobId, 200, code);
}
export function assertImportConfirmationInput(input: unknown): asserts input is ImportInput {
assertImportJobInput(input);
if (input.userId !== undefined && input.userId !== null) text(input.userId, 200, 'imports.input_invalid');
}
