validateOnBoardingSignerData function
Valida y normaliza datos del firmante (OnBoarding) y retorna FormData.
Implementation
FormData validateOnBoardingSignerData(Map<String, dynamic> signerData) {
final data = Map<String, dynamic>.from(signerData);
final name = data['name'];
if (name is! String || name.isEmpty) {
throw ApacuanaAPIError(
'El campo "name" es requerido y debe ser una cadena de texto.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
final ref = data['reference'];
if (ref is! String || ref.trim().isEmpty) {
data.remove('reference');
}
final file = data['file'];
// if (file is! MultipartFile) {
// data.remove('file');
// }
final hasRef = data.containsKey('reference');
final hasFile = data.containsKey('file');
if (hasRef && hasFile) {
throw ApacuanaAPIError(
"No se pueden proporcionar 'reference' y 'file' simultáneamente.",
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
if (!hasRef && !hasFile) {
throw ApacuanaAPIError(
"Se debe proporcionar un campo 'reference' o 'file' válido.",
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
const validDocTypes = ['V', 'P', 'E'];
final typedoc = data['typedoc'];
if (typedoc is! String || !validDocTypes.contains(typedoc)) {
throw ApacuanaAPIError(
'El campo "typedoc" es requerido y debe ser uno de: V, P, E.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
final doc = data['doc'];
if (doc is! String || doc.isEmpty) {
throw ApacuanaAPIError(
'El campo "doc" es requerido y debe ser una cadena de texto.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
final signature = data['signature'];
if (signature is! List || signature.isEmpty) {
throw ApacuanaAPIError(
'El campo "signature" es requerido y debe ser un array no vacío.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
for (var i = 0; i < signature.length; i++) {
final sig = signature[i];
if (sig is! Map) {
throw ApacuanaAPIError(
'Cada elemento de "signature" debe ser un objeto.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
final page = sig['page'];
final x = sig['x'];
final y = sig['y'];
if (page is! int || page < 1) {
throw ApacuanaAPIError(
'La página de la firma ${i + 1} debe ser un entero positivo.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
if (x is! num || x < 0 || x > 1) {
throw ApacuanaAPIError(
'La coordenada X de la firma ${i + 1} debe estar entre 0 y 1.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
if (y is! num || y < 0 || y > 1) {
throw ApacuanaAPIError(
'La coordenada Y de la firma ${i + 1} debe estar entre 0 y 1.',
statusCode: 400,
errorCode: 'INVALID_PARAMETER_FORMAT',
);
}
}
// final formData = FormData();
// data.forEach((key, value) {
// if (key == 'signature') {
// formData.fields.add(MapEntry('signature', jsonEncode(value)));
// } else if (key == 'file' && value is MultipartFile) {
// formData.files.add(MapEntry('document', value));
// } else if (value != null) {
// formData.fields.add(MapEntry(key, value.toString()));
// }
// });
final formData = FormData.fromMap({
'name': data['name'],
'typedoc': data['typedoc'],
'doc': data['doc'],
'signature': jsonEncode(data['signature']),
if (data.containsKey('reference')) 'reference': data['reference'],
if (data.containsKey('file')) 'document': data['file'],
});
return formData;
}