시드 생성

This commit is contained in:
2025-04-24 12:01:51 +09:00
parent beac42d60c
commit 7fa99e6988
42 changed files with 938 additions and 1170 deletions
+4 -57
View File
@@ -1239,10 +1239,8 @@ router.get('/clubs/:id', async (req, res) => {
},
{
model: ClubFeature,
as: 'features',
include: [{
model: Feature,
as: 'feature',
attributes: ['id', 'name', 'code', 'description']
}]
},
@@ -1280,12 +1278,13 @@ router.get('/clubs/:id', async (req, res) => {
delete response.ClubSubscriptions;
// 기능 정보 포맷팅
const formattedFeatures = response.features.map(feature => ({
...feature.feature,
const formattedFeatures = response.ClubFeatures.map(feature => ({
...feature.Feature,
enabled: feature.enabled,
expiryDate: feature.expiryDate
}));
response.features = formattedFeatures;
delete response.ClubFeatures;
res.json(response);
await logActivity(req.user.id, 'VIEW_CLUB', `클럽 ${id}의 정보를 조회했습니다.`);
@@ -1299,59 +1298,7 @@ router.get('/clubs/:id', async (req, res) => {
router.post('/clubs', authenticateJWT, clubController.createClub);
// 클럽 수정
router.put('/clubs/:id', async (req, res) => {
try {
const { id } = req.params;
const { name, description, ownerEmail, location } = req.body;
// 클럽 존재 여부 확인
const club = await Club.findByPk(id);
if (!club) {
return res.status(404).json({ message: '클럽을 찾을 수 없습니다.' });
}
// 새 모임장 정보 확인
const newOwner = await User.findOne({ where: { email: ownerEmail } });
if (!newOwner) {
return res.status(404).json({ message: '모임장으로 지정할 사용자를 찾을 수 없습니다.' });
}
// 트랜잭션 시작
const t = await sequelize.transaction();
try {
// 클럽 정보 업데이트
await club.update({
name,
description,
location,
ownerId: newOwner.id
}, { transaction: t });
// 활동 로그 기록
await logActivity(req.user.id, 'UPDATE_CLUB', `클럽 "${name}"의 정보를 수정했습니다.`);
await t.commit();
// 업데이트된 클럽 정보 조회
const updatedClub = await Club.findByPk(id, {
include: [{
model: User,
as: 'owner',
attributes: ['id', 'name', 'email']
}]
});
res.json(updatedClub);
} catch (error) {
await t.rollback();
throw error;
}
} catch (error) {
console.error('클럽 수정 중 오류:', error);
res.status(500).json({ message: '클럽 수정 중 오류가 발생했습니다.' });
}
});
router.put('/clubs/:id', authenticateJWT, clubController.updateClub);
// 클럽 기능 관리
router.put('/clubs/:id/features', async (req, res) => {
+6 -4
View File
@@ -3,6 +3,8 @@ const router = express.Router();
const jwt = require('jsonwebtoken');
const clubController = require('../controllers/clubController');
const { authenticateJWT } = require('../middleware/authMiddleware');
const requireFeature = require('../middleware/requireFeature');
// 모든 클럽 조회
router.get('/', clubController.getAllClubs);
@@ -20,7 +22,7 @@ router.delete('/', authenticateJWT, clubController.deleteClub);
router.post('/user', authenticateJWT, clubController.getUserClubs);
// 클럽 회원 통계 조회
router.post('/members/stats', authenticateJWT, clubController.getMemberStats);
router.post('/members/stats', authenticateJWT, requireFeature('statistics'), clubController.getMemberStats);
// 클럽 회원 목록 조회
router.post('/members', authenticateJWT, clubController.getClubMembers);
@@ -44,16 +46,16 @@ router.post('/meetings/last', authenticateJWT, clubController.getLastMeeting);
router.post('/meetings/recent', authenticateJWT, clubController.getRecentMeetings);
// 점수 통계 조회
router.post('/scores/stats', authenticateJWT, clubController.getScoreStats);
router.post('/scores/stats', authenticateJWT, requireFeature('statistics'), clubController.getScoreStats);
// 상위 회원 목록 조회
router.post('/members/top', authenticateJWT, clubController.getTopMembers);
router.post('/members/top', authenticateJWT, requireFeature('statistics'), clubController.getTopMembers);
// 새 클럽 생성
router.post('/create', authenticateJWT, clubController.createClub);
// 클럽 통계 조회
router.post('/statistics', authenticateJWT, clubController.getStatistics);
router.post('/statistics', authenticateJWT, requireFeature('statistics'), clubController.getStatistics);
// 클럽 기능 관리
router.put('/features', authenticateJWT, clubController.manageClubFeatures);
+16 -15
View File
@@ -2,28 +2,29 @@ const express = require('express');
const router = express.Router();
const eventController = require('../controllers/eventController');
const { authenticateJWT } = require('../middleware/authMiddleware');
const requireFeature = require('../middleware/requireFeature');
// 이벤트 기본 CRUD
router.post('/', authenticateJWT, eventController.getAllEvents);
router.get('/:id', authenticateJWT, eventController.getEventById);
router.post('/create', authenticateJWT, eventController.createEvent);
router.put('/:id', authenticateJWT, eventController.updateEvent);
router.delete('/:id', authenticateJWT, eventController.deleteEvent);
router.post('/', authenticateJWT, requireFeature('event_management'), eventController.getAllEvents);
router.get('/:id', authenticateJWT, requireFeature('event_management'), eventController.getEventById);
router.post('/create', authenticateJWT, requireFeature('event_management'), eventController.createEvent);
router.put('/:id', authenticateJWT, requireFeature('event_management'), eventController.updateEvent);
router.delete('/:id', authenticateJWT, requireFeature('event_management'), eventController.deleteEvent);
// 이벤트 참가자 관리
router.post('/:id/participants/list', authenticateJWT, eventController.getEventParticipants);
router.post('/:id/participants', authenticateJWT, eventController.addEventParticipant);
router.put('/:id/participants', authenticateJWT, eventController.updateEventParticipant);
router.delete('/:id/participants', authenticateJWT, eventController.deleteEventParticipant);
router.post('/:id/participants/list', authenticateJWT, requireFeature('event_management'), eventController.getEventParticipants);
router.post('/:id/participants', authenticateJWT, requireFeature('event_management'), eventController.addEventParticipant);
router.put('/:id/participants', authenticateJWT, requireFeature('event_management'), eventController.updateEventParticipant);
router.delete('/:id/participants', authenticateJWT, requireFeature('event_management'), eventController.deleteEventParticipant);
// 이벤트 점수 관리
router.get('/:id/scores', authenticateJWT, eventController.getEventScores);
router.post('/:id/scores', authenticateJWT, eventController.addEventScore);
router.put('/:id/scores/:scoreId', authenticateJWT, eventController.updateEventScore);
router.delete('/:id/scores/:scoreId', authenticateJWT, eventController.deleteEventScore);
router.delete('/:id/participants/:participantId/scores', authenticateJWT, eventController.deleteParticipantScores);
router.get('/:id/scores', authenticateJWT, requireFeature('event_management'), eventController.getEventScores);
router.post('/:id/scores', authenticateJWT, requireFeature('event_management'), eventController.addEventScore);
router.put('/:id/scores/:scoreId', authenticateJWT, requireFeature('event_management'), eventController.updateEventScore);
router.delete('/:id/scores/:scoreId', authenticateJWT, requireFeature('event_management'), eventController.deleteEventScore);
router.delete('/:id/participants/:participantId/scores', authenticateJWT, requireFeature('event_management'), eventController.deleteParticipantScores);
// 사용자별 이벤트 관리
router.get('/user/events', authenticateJWT, eventController.getUserEvents);
router.get('/user/events', authenticateJWT, requireFeature('event_management'), eventController.getUserEvents);
module.exports = router;
+1
View File
@@ -3,6 +3,7 @@ const router = express.Router();
const featureController = require('../controllers/featureController');
const { authenticateJWT } = require('../middleware/authMiddleware');
// 기본 기능 관리
router.get('/', authenticateJWT, featureController.getFeatures);
+1
View File
@@ -5,6 +5,7 @@
const express = require('express');
const router = express.Router();
const { authenticateJWT } = require('../middleware/authMiddleware');
const menuController = require('../controllers/menuController');
// 사용자의 접근 가능한 메뉴 목록 조회