CentralBackend/services/CompanyUserService.js
2025-09-07 12:44:01 +02:00

75 lines
3.1 KiB
JavaScript

const CompanyUserRepository = require('../repositories/CompanyUserRepository');
const UserStatusService = require('./UserStatusService');
const UnitOfWork = require('../repositories/UnitOfWork');
const CompanyUser = require('../models/CompanyUser');
const MailService = require('./MailService');
const { logger } = require('../middleware/logger');
class CompanyUserService {
static async createCompanyUser({ companyEmail, password, companyName, companyPhone, contactPersonName, contactPersonPhone }) {
logger.info('CompanyUserService.createCompanyUser:start', { companyEmail, companyName });
console.log('📝 CompanyUserService: Creating company user...');
console.log('📋 Data to be saved:', { companyEmail, companyName, companyPhone, contactPersonName });
const unitOfWork = new UnitOfWork();
await unitOfWork.start();
// Register repositories
unitOfWork.registerRepository('companyUser', new CompanyUserRepository(unitOfWork));
try {
const companyRepo = unitOfWork.getRepository('companyUser');
const newCompany = await companyRepo.create({
companyEmail,
password,
companyName,
companyPhone,
contactPersonName,
contactPersonPhone
});
logger.info('CompanyUserService.createCompanyUser:company_created', { companyId: newCompany.id });
// Initialize user status
await UserStatusService.initializeUserStatus(newCompany.id, 'company', unitOfWork, 'inactive');
logger.info('CompanyUserService.createCompanyUser:user_status_initialized', { companyId: newCompany.id });
// Send registration email to the new company user
await MailService.sendRegistrationEmail({
email: newCompany.email,
userType: 'company',
companyName: newCompany.companyName
});
logger.info('CompanyUserService.createCompanyUser:registration_email_sent', { companyEmail });
await unitOfWork.commit();
logger.info('CompanyUserService.createCompanyUser:success', { companyId: newCompany.id });
return newCompany;
} catch (error) {
logger.error('CompanyUserService.createCompanyUser:error', { companyEmail, error: error.message });
await unitOfWork.rollback(error);
console.error('💥 CompanyUserService: Error creating company user:', error);
throw error;
}
}
static async findCompanyUserByEmail(email) {
logger.info('CompanyUserService.findCompanyUserByEmail:start', { email });
const unitOfWork = new UnitOfWork();
await unitOfWork.start();
unitOfWork.registerRepository('companyUser', new CompanyUserRepository(unitOfWork));
try {
const companyRepo = unitOfWork.getRepository('companyUser');
const user = await companyRepo.findByEmail(email);
await unitOfWork.commit();
logger.info('CompanyUserService.findCompanyUserByEmail:success', { email, found: !!user });
return user;
} catch (error) {
logger.error('CompanyUserService.findCompanyUserByEmail:error', { email, error: error.message });
await unitOfWork.rollback(error);
throw error;
}
}
}
module.exports = CompanyUserService;