feat: add storage status check for user documents in getDetailedUserInfo function

This commit is contained in:
seaznCode 2026-01-19 23:31:03 +01:00
parent 5638b98cb8
commit e2a6b215d5

View File

@ -2,7 +2,7 @@ const AdminRepository = require('../../repositories/admin/AdminRepository');
const UserDocumentRepository = require('../../repositories/documents/UserDocumentRepository'); const UserDocumentRepository = require('../../repositories/documents/UserDocumentRepository');
const UserRepository = require('../../repositories/user/UserRepository'); const UserRepository = require('../../repositories/user/UserRepository');
const { s3 } = require('../../utils/exoscaleUploader'); const { s3 } = require('../../utils/exoscaleUploader');
const { GetObjectCommand } = require('@aws-sdk/client-s3'); const { GetObjectCommand, ListObjectsV2Command } = require('@aws-sdk/client-s3');
const { getSignedUrl } = require('@aws-sdk/s3-request-presigner'); const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');
const { DeleteObjectCommand } = require('@aws-sdk/client-s3'); const { DeleteObjectCommand } = require('@aws-sdk/client-s3');
const pidusage = require('pidusage'); const pidusage = require('pidusage');
@ -197,6 +197,34 @@ class AdminService {
}) })
); );
const hasObjects = async (prefix) => {
try {
const res = await s3.send(new ListObjectsV2Command({
Bucket: process.env.EXOSCALE_BUCKET,
Prefix: prefix,
MaxKeys: 1
}));
return !!(res && res.Contents && res.Contents.length);
} catch (e) {
logger.warn('AdminService.getDetailedUserInfo:storage_check_failed', { userId, prefix, error: e && e.message });
return false;
}
};
const userType = (user.user_type || '').toString().toLowerCase();
const idPrefix = userType === 'company' ? `company-id/${userId}/` : `personal-id/${userId}/`;
const contractBase = `contracts/${userType === 'company' ? 'company' : 'personal'}/${userId}/`;
const [idDocumentsPresent, contractPresent, gdprPresent] = await Promise.all([
hasObjects(idPrefix),
hasObjects(`${contractBase}contract/`),
hasObjects(`${contractBase}gdpr/`)
]);
const storageStatus = {
idDocumentsPresent,
contractPresent: contractPresent || gdprPresent
};
logger.info('AdminService.getDetailedUserInfo:success', { userId }); logger.info('AdminService.getDetailedUserInfo:success', { userId });
return { return {
user, user,
@ -206,7 +234,8 @@ class AdminService {
userStatus, userStatus,
documents, documents,
contracts, contracts,
idDocuments: idDocumentsWithUrls idDocuments: idDocumentsWithUrls,
storageStatus
}; };
} catch (error) { } catch (error) {
logger.error('AdminService.getDetailedUserInfo:error', { userId, error: error.message }); logger.error('AdminService.getDetailedUserInfo:error', { userId, error: error.message });