// 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); } };