72 lines
3.3 KiB
JavaScript
72 lines
3.3 KiB
JavaScript
const PersonalUserRepository = require('../../../repositories/user/personal/PersonalUserRepository');
|
|
const { logger } = require('../../../middleware/logger');
|
|
|
|
class PersonalProfileService {
|
|
static async completeProfile(userId, profileData, unitOfWork) {
|
|
logger.info('PersonalProfileService.completeProfile:start', { userId });
|
|
try {
|
|
const required = [
|
|
{ key: 'dateOfBirth', label: 'Date of birth' },
|
|
{ key: 'nationality', label: 'Nationality' },
|
|
{ key: 'address', label: 'Street & house number' },
|
|
{ key: 'zip_code', label: 'Postal code' },
|
|
{ key: 'city', label: 'City' },
|
|
{ key: 'country', label: 'Country' },
|
|
{ key: 'accountHolderName', label: 'Account holder' },
|
|
{ key: 'iban', label: 'IBAN' }
|
|
];
|
|
|
|
for (const field of required) {
|
|
const value = (profileData[field.key] || '').toString().trim();
|
|
if (!value) {
|
|
throw new Error(`${field.label} is required.`);
|
|
}
|
|
}
|
|
|
|
profileData.dateOfBirth = profileData.dateOfBirth.toString().trim();
|
|
profileData.nationality = profileData.nationality.toString().trim();
|
|
profileData.address = profileData.address.toString().trim();
|
|
profileData.zip_code = profileData.zip_code.toString().trim();
|
|
profileData.city = profileData.city.toString().trim();
|
|
profileData.country = profileData.country.toString().trim();
|
|
profileData.accountHolderName = profileData.accountHolderName.toString().trim();
|
|
profileData.iban = profileData.iban.toString().trim();
|
|
|
|
const repo = new PersonalUserRepository(unitOfWork);
|
|
await repo.updateProfileAndMarkCompleted(userId, profileData);
|
|
logger.info('PersonalProfileService.completeProfile:profile_completed', { userId });
|
|
|
|
// Check if all steps are complete and set status to 'pending' if so
|
|
const UserStatusService = require('../../status/UserStatusService');
|
|
await UserStatusService.checkAndSetPendingIfComplete(userId, unitOfWork);
|
|
logger.info('PersonalProfileService.completeProfile:pending_check_complete', { userId });
|
|
logger.info('PersonalProfileService.completeProfile:success', { userId });
|
|
return true;
|
|
} catch (error) {
|
|
logger.error('PersonalProfileService.completeProfile:error', { userId, error: error.message });
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
static async updateBasic(userId, payload, unitOfWork) {
|
|
logger.info('PersonalProfileService.updateBasic:start', { userId });
|
|
const repo = new PersonalUserRepository(unitOfWork);
|
|
const updated = await repo.updateBasicInfo(userId, payload);
|
|
const UserStatusService = require('../../status/UserStatusService');
|
|
await UserStatusService.checkAndSetPendingIfComplete(userId, unitOfWork);
|
|
logger.info('PersonalProfileService.updateBasic:success', { userId });
|
|
return updated;
|
|
}
|
|
|
|
static async updateBank(userId, payload, unitOfWork) {
|
|
logger.info('PersonalProfileService.updateBank:start', { userId });
|
|
const repo = new PersonalUserRepository(unitOfWork);
|
|
const updated = await repo.updateBankInfo(userId, payload);
|
|
const UserStatusService = require('../../status/UserStatusService');
|
|
await UserStatusService.checkAndSetPendingIfComplete(userId, unitOfWork);
|
|
logger.info('PersonalProfileService.updateBank:success', { userId });
|
|
return updated;
|
|
}
|
|
}
|
|
|
|
module.exports = PersonalProfileService; |