54 lines
2.2 KiB
JavaScript
54 lines
2.2 KiB
JavaScript
const UnitOfWork = require('../../database/UnitOfWork');
|
|
const EmailVerificationRepository = require('../../repositories/email/EmailVerificationRepository');
|
|
const EmailVerificationService = require('../../services/email/EmailVerificationService');
|
|
const { logger } = require('../../middleware/logger');
|
|
|
|
class EmailVerificationController {
|
|
static async sendVerificationEmail(req, res) {
|
|
const userId = req.user.userId;
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const emailVerificationRepo = new EmailVerificationRepository(unitOfWork);
|
|
const userRecord = await emailVerificationRepo.getUserBasic(userId);
|
|
if (!userRecord) {
|
|
await unitOfWork.rollback();
|
|
logger.warn(`User not found for email verification: ${userId}`);
|
|
return res.status(404).json({ success: false, message: 'User not found' });
|
|
}
|
|
await EmailVerificationService.sendVerificationEmail(userRecord, unitOfWork);
|
|
await unitOfWork.commit();
|
|
logger.info(`Verification email sent to user ${userId}`);
|
|
res.json({ success: true, message: 'Verification email sent' });
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
logger.error('Error sending verification email:', error);
|
|
res.status(400).json({ success: false, message: error.message });
|
|
}
|
|
}
|
|
|
|
static async verifyEmailCode(req, res) {
|
|
const userId = req.user.userId;
|
|
const { code } = req.body;
|
|
const unitOfWork = new UnitOfWork();
|
|
await unitOfWork.start();
|
|
try {
|
|
const result = await EmailVerificationService.verifyCode(userId, code, unitOfWork);
|
|
await unitOfWork.commit();
|
|
if (result.success) {
|
|
logger.info(`Email verified for user ${userId}`);
|
|
return res.json({ success: true });
|
|
} else {
|
|
logger.warn(`Failed email verification for user ${userId}: ${result.error}`);
|
|
return res.status(400).json({ success: false, error: result.error });
|
|
}
|
|
} catch (error) {
|
|
await unitOfWork.rollback(error);
|
|
logger.error('Error verifying email code:', error);
|
|
res.status(400).json({ success: false, error: error.message });
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = EmailVerificationController;
|