const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); const http = require('http'); const socketIo = require('socket.io'); const adminRoutes = require('./routes/adminRoutes'); const authRoutes = require('./routes/authRoutes'); const eventRoutes = require('./routes/eventRoutes'); const clubRoutes = require('./routes/clubRoutes'); const userRoutes = require('./routes/userRoutes'); const notificationRoutes = require('./routes/notificationRoutes'); const menuRoutes = require('./routes/menuRoutes'); const subscriptionRoutes = require('./routes/subscriptionRoutes'); const featureRoutes = require('./routes/featureRoutes'); const { sequelize, syncModels } = require('./models'); const app = express(); const server = http.createServer(app); const io = socketIo(server, { cors: { origin: '*', methods: ['GET', 'POST'] } }); app.use(cors()); app.use(bodyParser.json()); // Socket.IO 연결 처리 io.on('connection', (socket) => { console.log('새로운 클라이언트 연결:', socket.id); // 사용자 인증 및 알림 룸 참여 socket.on('authenticate', (userData) => { if (userData && userData.id) { socket.join(`user:${userData.id}`); console.log(`사용자 ${userData.id}가 알림 룸에 참여했습니다.`); } }); // 연결 해제 처리 socket.on('disconnect', () => { console.log('클라이언트 연결 해제:', socket.id); }); }); // 전역 Socket.IO 인스턴스 설정 app.set('io', io); // 데이터베이스 연결 및 모델 동기화 실행 sequelize.authenticate() .then(() => { console.log('데이터베이스에 연결되었습니다.'); return syncModels(); }) .then(() => { console.log('데이터베이스 모델이 동기화되었습니다.'); }) .catch(err => { console.error('데이터베이스 연결 또는 모델 동기화 오류:', err); }); // Routes 설정 app.use('/api/auth', authRoutes); app.use('/api/admin', adminRoutes); app.use('/api/club', clubRoutes); app.use('/api/club/events', eventRoutes); app.use('/api/features', featureRoutes); app.use('/api/subscriptions', subscriptionRoutes); app.use('/api/users', userRoutes); app.use('/api/notifications', notificationRoutes); app.use('/api/menus', menuRoutes); // 루트 경로 핸들러 app.get('/', (req, res) => { res.json({ message: '볼링 클럽 매니저 API 서버에 오신 것을 환영합니다!' }); }); // 서버 시작 const PORT = process.env.PORT || 3030; server.listen(PORT, () => { console.log(`서버가 포트 ${PORT}에서 실행 중입니다.`); }); module.exports = app;