75 lines
3.1 KiB
JavaScript
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; |