114 lines
2.4 KiB
JavaScript
114 lines
2.4 KiB
JavaScript
// src/controllers/user.controller.js
|
|
// 사용자 컨트롤러
|
|
|
|
const { User, UsageLog } = require('../models');
|
|
const logger = require('../config/logger.config');
|
|
|
|
/**
|
|
* 내 정보 조회
|
|
*/
|
|
exports.getMe = async (req, res, next) => {
|
|
try {
|
|
const user = await User.findByPk(req.user.userId);
|
|
if (!user) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: {
|
|
code: 'USER_NOT_FOUND',
|
|
message: '사용자를 찾을 수 없습니다.',
|
|
},
|
|
});
|
|
}
|
|
|
|
// 이번 달 사용량 조회
|
|
const now = new Date();
|
|
const monthlyUsage = await UsageLog.getMonthlyTotalByUser(
|
|
user.id,
|
|
now.getFullYear(),
|
|
now.getMonth() + 1
|
|
);
|
|
|
|
return res.json({
|
|
success: true,
|
|
data: {
|
|
...user.toSafeJSON(),
|
|
usage: {
|
|
monthly: monthlyUsage,
|
|
limit: user.monthlyTokenLimit,
|
|
remaining: Math.max(0, user.monthlyTokenLimit - monthlyUsage.totalTokens),
|
|
},
|
|
},
|
|
});
|
|
} catch (error) {
|
|
return next(error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 내 정보 수정
|
|
*/
|
|
exports.updateMe = async (req, res, next) => {
|
|
try {
|
|
const { name, password } = req.body;
|
|
|
|
const user = await User.findByPk(req.user.userId);
|
|
if (!user) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: {
|
|
code: 'USER_NOT_FOUND',
|
|
message: '사용자를 찾을 수 없습니다.',
|
|
},
|
|
});
|
|
}
|
|
|
|
// 업데이트할 필드만 설정
|
|
if (name) user.name = name;
|
|
if (password) user.password = password;
|
|
|
|
await user.save();
|
|
|
|
logger.info(`사용자 정보 수정: ${user.email}`);
|
|
|
|
return res.json({
|
|
success: true,
|
|
data: user.toSafeJSON(),
|
|
});
|
|
} catch (error) {
|
|
return next(error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 계정 삭제
|
|
*/
|
|
exports.deleteMe = async (req, res, next) => {
|
|
try {
|
|
const user = await User.findByPk(req.user.userId);
|
|
if (!user) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: {
|
|
code: 'USER_NOT_FOUND',
|
|
message: '사용자를 찾을 수 없습니다.',
|
|
},
|
|
});
|
|
}
|
|
|
|
// 소프트 삭제 (상태 변경)
|
|
user.status = 'inactive';
|
|
await user.save();
|
|
|
|
logger.info(`사용자 계정 삭제: ${user.email}`);
|
|
|
|
return res.json({
|
|
success: true,
|
|
data: {
|
|
message: '계정이 삭제되었습니다.',
|
|
},
|
|
});
|
|
} catch (error) {
|
|
return next(error);
|
|
}
|
|
};
|