feat: add storage status check for user documents in getDetailedUserInfo function
This commit is contained in:
parent
5638b98cb8
commit
e2a6b215d5
@ -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 });
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user