diff --git a/src/config/config.ts b/src/config/config.ts index 7095825298..f05bd76b6e 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -284,6 +284,7 @@ export class Configuration { filter?: (file: KycFileBlob, userData: UserData) => boolean; sort?: (a: KycFileBlob, b: KycFileBlob) => KycFileBlob; handleFileNotFound?: (zip: JSZip, userData: UserData) => any | false; + selectAll?: boolean; }[]; }[] = [ { @@ -309,6 +310,13 @@ export class Configuration { ], fileTypes: [ContentType.PDF], }, + { + name: (file: KycFileBlob) => `IdentDoc_${file.name.split('/').pop()?.split('.')[0] ?? 'unknown'}`, + prefixes: (userData: UserData) => [`user/${userData.id}/Identification`], + fileTypes: [ContentType.PNG, ContentType.JPEG, ContentType.JPG], + selectAll: true, + handleFileNotFound: () => true, + }, ], }, { diff --git a/src/subdomains/generic/user/models/user-data/user-data.service.ts b/src/subdomains/generic/user/models/user-data/user-data.service.ts index 1f06812044..41bf1cc383 100644 --- a/src/subdomains/generic/user/models/user-data/user-data.service.ts +++ b/src/subdomains/generic/user/models/user-data/user-data.service.ts @@ -399,7 +399,15 @@ export class UserDataService { continue; } - for (const { name: fileNameFn, fileTypes, prefixes, filter, handleFileNotFound, sort } of fileConfig) { + for (const { + name: fileNameFn, + fileTypes, + prefixes, + filter, + handleFileNotFound, + sort, + selectAll, + } of fileConfig) { const files = allFiles .filter((f) => prefixes(userData).some((p) => f.path.startsWith(p))) .filter((f) => !fileTypes || fileTypes.some((t) => f.contentType.startsWith(t))) @@ -417,19 +425,25 @@ export class UserDataService { if (checkOnly) continue; - const selectedFile = files.reduce((l, c) => (sort ? sort(l, c) : l.updated > c.updated ? l : c)); - - try { - const fileData = await this.documentService.downloadFile( - selectedFile.category, - userDataId, - selectedFile.type, - selectedFile.name, - ); - const filePath = `${userDataId}-${fileNameFn?.(selectedFile) ?? name}.${selectedFile.name.split('.').pop()}`; - subFolder.file(filePath, fileData.data); - } catch { - errors.push({ userDataId, errorType: 'DownloadFailed', folder: folderName, details: selectedFile.name }); + const selectedFiles = selectAll + ? files + : [files.reduce((l, c) => (sort ? sort(l, c) : l.updated > c.updated ? l : c))]; + + for (const selectedFile of selectedFiles) { + try { + const fileData = await this.documentService.downloadFile( + selectedFile.category, + userDataId, + selectedFile.type, + selectedFile.name, + ); + const filePath = `${userDataId}-${fileNameFn?.(selectedFile) ?? name}.${selectedFile.name + .split('.') + .pop()}`; + subFolder.file(filePath, fileData.data); + } catch { + errors.push({ userDataId, errorType: 'DownloadFailed', folder: folderName, details: selectedFile.name }); + } } } }