From f01bcbdf398ecd9ed2df718848464eac81db8769 Mon Sep 17 00:00:00 2001 From: Jaybe Date: Thu, 24 Apr 2025 13:48:53 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/middleware/requireFeature.js | 2 +- backend/models/Event.js | 12 ------------ backend/models/EventParticipant.js | 1 + backend/models/Member.js | 13 ++++++++----- backend/routes/clubRoutes.js | 6 +++--- frontend/src/App.vue | 1 + frontend/src/components/AppHeader.vue | 1 + frontend/src/views/club/EventCalendar.vue | 1 + frontend/src/views/club/EventManagement.vue | 2 ++ 9 files changed, 18 insertions(+), 21 deletions(-) diff --git a/backend/middleware/requireFeature.js b/backend/middleware/requireFeature.js index 2d70e30..4e321d7 100644 --- a/backend/middleware/requireFeature.js +++ b/backend/middleware/requireFeature.js @@ -4,7 +4,7 @@ const { clubHasFeature } = require('../utils/featureAccess'); function requireFeature(featureCode) { return async function(req, res, next) { try { - const clubId = req.clubId || (req.user && req.user.clubId); + const clubId = req.clubId || req.body.clubId || req.params.clubId; if (!clubId) { return res.status(400).json({ error: '클럽 정보가 필요합니다.' }); } diff --git a/backend/models/Event.js b/backend/models/Event.js index 7454477..3b807d8 100644 --- a/backend/models/Event.js +++ b/backend/models/Event.js @@ -97,16 +97,4 @@ Event.associate = (models) => { }); }; -Event.associate = (models) => { - Event.belongsTo(models.Club, { - foreignKey: 'clubId' - }); - Event.hasMany(models.EventParticipant, { - foreignKey: 'eventId' - }); - Event.hasMany(models.EventScore, { - foreignKey: 'eventId' - }); -}; - module.exports = Event; diff --git a/backend/models/EventParticipant.js b/backend/models/EventParticipant.js index a5e4d8c..c9fbd2a 100644 --- a/backend/models/EventParticipant.js +++ b/backend/models/EventParticipant.js @@ -69,6 +69,7 @@ EventParticipant.associate = (models) => { EventParticipant.hasMany(models.EventScore, { foreignKey: 'participantId' }); + EventParticipant.belongsTo(models.Member, { foreignKey: 'memberId' }); }; module.exports = EventParticipant; diff --git a/backend/models/Member.js b/backend/models/Member.js index bea71f2..a637a9d 100644 --- a/backend/models/Member.js +++ b/backend/models/Member.js @@ -75,11 +75,14 @@ const Member = sequelize.define('Member', { tableName: 'Members', timestamps: true }); +Member.associate = (models) => { + // User와의 관계 설정 + Member.belongsTo(User, {foreignKey: 'userId'}); -// User와의 관계 설정 -Member.belongsTo(User, {foreignKey: 'userId'}); - -// Club과의 관계 설정 -Member.belongsTo(Club, {foreignKey: 'clubId'}); + // Club과의 관계 설정 + Member.belongsTo(Club, {foreignKey: 'clubId'}); + // EventParticipant와의 관계 설정 + Member.hasMany(models.EventParticipant, { foreignKey: 'memberId' }); +}; module.exports = Member; diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index 390a3a5..2a57178 100644 --- a/backend/routes/clubRoutes.js +++ b/backend/routes/clubRoutes.js @@ -22,7 +22,7 @@ router.delete('/', authenticateJWT, clubController.deleteClub); router.post('/user', authenticateJWT, clubController.getUserClubs); // 클럽 회원 통계 조회 -router.post('/members/stats', authenticateJWT, requireFeature('statistics'), clubController.getMemberStats); +router.post('/members/stats', authenticateJWT, clubController.getMemberStats); // 클럽 회원 목록 조회 router.post('/members', authenticateJWT, clubController.getClubMembers); @@ -46,10 +46,10 @@ router.post('/meetings/last', authenticateJWT, clubController.getLastMeeting); router.post('/meetings/recent', authenticateJWT, clubController.getRecentMeetings); // 점수 통계 조회 -router.post('/scores/stats', authenticateJWT, requireFeature('statistics'), clubController.getScoreStats); +router.post('/scores/stats', authenticateJWT, clubController.getScoreStats); // 상위 회원 목록 조회 -router.post('/members/top', authenticateJWT, requireFeature('statistics'), clubController.getTopMembers); +router.post('/members/top', authenticateJWT, clubController.getTopMembers); // 새 클럽 생성 router.post('/create', authenticateJWT, clubController.createClub); diff --git a/frontend/src/App.vue b/frontend/src/App.vue index b7a8b1d..c2d123f 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -173,6 +173,7 @@ const fetchClubs = async () => { // 첫 번째 클럽의 memberType을 localStorage에 저장 if (clubs.value.length > 0) { localStorage.setItem('userClubRole', clubs.value[0].memberType || ''); + localStorage.setItem('clubId', clubs.value[0].id); } } catch (error) { console.error('클럽 목록 로드 실패:', error); diff --git a/frontend/src/components/AppHeader.vue b/frontend/src/components/AppHeader.vue index 0e20682..d044645 100644 --- a/frontend/src/components/AppHeader.vue +++ b/frontend/src/components/AppHeader.vue @@ -91,6 +91,7 @@ const userAvatar = computed(() => user.value?.avatar || ''); // 로그아웃 const logout = () => { + user.value = null; localStorage.removeItem('token'); localStorage.removeItem('clubId'); localStorage.removeItem('userRole'); diff --git a/frontend/src/views/club/EventCalendar.vue b/frontend/src/views/club/EventCalendar.vue index 02cbd45..d722bd6 100644 --- a/frontend/src/views/club/EventCalendar.vue +++ b/frontend/src/views/club/EventCalendar.vue @@ -65,6 +65,7 @@ const fetchEvents = async () => { loading.value = true; try { const eventData = await eventService.getEvents(clubId.value); + console.log('eventData', eventData); events.value = eventData.map(event => ({ id: event.id, title: event.title, diff --git a/frontend/src/views/club/EventManagement.vue b/frontend/src/views/club/EventManagement.vue index 6f06211..6396516 100644 --- a/frontend/src/views/club/EventManagement.vue +++ b/frontend/src/views/club/EventManagement.vue @@ -105,6 +105,7 @@