From 1d8ee6e159814be52d26355b89b960b254697a2a Mon Sep 17 00:00:00 2001 From: TaprootFreak <142087526+TaprootFreak@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:04:33 +0100 Subject: [PATCH 1/3] feat: export all IdentDoc files in user data download Add selectAll option to file download config and include IdentDoc images (PNG/JPEG) alongside the IdentReport PDF in folder 02_Identifikationsdokument. --- src/config/config.ts | 7 ++++ .../models/user-data/user-data.service.ts | 32 +++++++++++-------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/config/config.ts b/src/config/config.ts index 7095825298..ab17f096f3 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,12 @@ 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, + }, ], }, { 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..47bd7f1a12 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,7 @@ 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 +417,23 @@ 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 }); + } } } } From 19272a7095568d46ad16719156e3474173e44e61 Mon Sep 17 00:00:00 2001 From: TaprootFreak <142087526+TaprootFreak@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:05:30 +0100 Subject: [PATCH 2/3] fix: suppress false FileMissing error when no IdentDoc images exist --- src/config/config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config/config.ts b/src/config/config.ts index ab17f096f3..f05bd76b6e 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -315,6 +315,7 @@ export class Configuration { prefixes: (userData: UserData) => [`user/${userData.id}/Identification`], fileTypes: [ContentType.PNG, ContentType.JPEG, ContentType.JPG], selectAll: true, + handleFileNotFound: () => true, }, ], }, From 3a42abdf92cfddaae487eadcb828e6dffbcd157d Mon Sep 17 00:00:00 2001 From: TaprootFreak <142087526+TaprootFreak@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:09:56 +0100 Subject: [PATCH 3/3] fix: prettier formatting --- .../user/models/user-data/user-data.service.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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 47bd7f1a12..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, selectAll } 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))) @@ -429,7 +437,9 @@ export class UserDataService { selectedFile.type, selectedFile.name, ); - const filePath = `${userDataId}-${fileNameFn?.(selectedFile) ?? name}.${selectedFile.name.split('.').pop()}`; + 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 });