업로드

This commit is contained in:
익희 김 2024-12-23 06:14:53 +09:00
parent 79c3e81f05
commit 648ba24525
3 changed files with 132 additions and 18 deletions

View File

@ -34,24 +34,6 @@ mongoose
app.use(cors());
app.use(bodyParser.json());
// Socket.IO 이벤트 처리
io.on('connection', (socket) => {
console.log(`클라이언트 연결됨: ${socket.id}`);
// 클라이언트로부터 메시지 수신
socket.on('message', (data) => {
console.log('받은 메시지:', data);
// 연결된 모든 클라이언트에게 메시지 브로드캐스트
io.emit('message', data);
});
// 클라이언트 연결 종료 처리
socket.on('disconnect', () => {
console.log(`클라이언트 연결 해제: ${socket.id}`);
});
});
// Routes
const homeRoutes = require('./routes/home');
const authRoutes = require('./routes/auth');
@ -75,6 +57,9 @@ const shopRoutes = require('./routes/shop');
const payment = require('./routes/payment');
const currency = require('./routes/currencies');
const compaign = require('./routes/compaign');
const chatRoutes = require('./routes/chat');
const ChatMessage = require('./models/ChatMessage');
app.use('/v1', homeRoutes);
app.use('/v1', authRoutes);
@ -98,6 +83,87 @@ app.use('/v1', shopRoutes);
app.use('/v1', payment);
app.use('/v1', currency);
app.use('/v1', compaign);
app.use('/v1/chat', chatRoutes);
// io.on('connection', (socket) => {
// console.log(`클라이언트 연결됨: ${socket.id}`);
// // 클라이언트로부터 메시지 수신
// socket.on('message', async (data) => {
// console.log('받은 메시지:', data);
// // MongoDB에 메시지 저장
// const newMessage = new ChatMessage({
// username: data.username,
// message: data.message,
// });
// try {
// await newMessage.save();
// // 연결된 모든 클라이언트에게 메시지 브로드캐스트
// io.emit('message', newMessage);
// } catch (error) {
// console.error('메시지 저장 중 오류:', error);
// }
// });
// // 클라이언트 연결 종료 처리
// socket.on('disconnect', () => {
// console.log(`클라이언트 연결 해제: ${socket.id}`);
// });
// });
io.on('connection', (socket) => {
console.log(`클라이언트 연결됨: ${socket.id}`);
// 사용자 방 참여
socket.on('join', (email) => {
console.log(`${email} joined room: ${email}`);
socket.join(email); // 사용자를 이메일 기반으로 방에 참여시킴
});
// 클라이언트로부터 메시지 수신
socket.on('message', async (data) => {
const { username, message, targetEmail } = data;
console.log(`받은 메시지: ${message} (보낸 사람: ${username}, 대상: ${targetEmail || '모든 관리자'})`);
// MongoDB에 메시지 저장
const newMessage = new ChatMessage({
username,
message,
timestamp: new Date(),
});
try {
await newMessage.save();
// 메시지 대상에 따라 브로드캐스트
if (targetEmail) {
// 특정 대상에게만 전송
io.to(targetEmail).emit('message', { username, message, timestamp: new Date() });
} else {
// 관리자에게 전송 (관리자 방은 'admin')
io.to('admin').emit('message', { username, message, timestamp: new Date() });
}
} catch (error) {
console.error('메시지 저장 중 오류:', error);
}
});
// 관리자 방 참여 (관리자는 'admin' 방에 참가)
socket.on('joinAdmin', () => {
console.log(`관리자가 방에 참여함: ${socket.id}`);
socket.join('admin'); // 관리자는 'admin' 방에 참여
});
// 클라이언트 연결 종료 처리
socket.on('disconnect', () => {
console.log(`클라이언트 연결 해제: ${socket.id}`);
});
});
// GET API
app.get('/v1', (req, res) => {

View File

@ -0,0 +1,9 @@
const mongoose = require('mongoose');
const ChatMessageSchema = new mongoose.Schema({
username: { type: String, required: true },
message: { type: String, required: true },
timestamp: { type: Date, default: Date.now },
});
module.exports = mongoose.model('ChatMessage', ChatMessageSchema);

39
src/routes/chat.js Normal file
View File

@ -0,0 +1,39 @@
const express = require('express');
const ChatMessage = require('../models/ChatMessage');
const router = express.Router();
router.get('/messages', async (req, res) => {
try {
const { email } = req.query;
if (!email) {
return res.status(400).json({ success: false, message: 'Email parameter is required.' });
}
// 이메일 배열로 필터링
const emailArray = email.split(',');
const messages = await ChatMessage.find({ username: { $in: emailArray } }).sort({ timestamp: 1 });
res.json(messages);
} catch (error) {
res.status(500).json({ success: false, message: error.message });
}
});
// Fetch all chat messages for admin
router.get('/admin/messages', async (req, res) => {
try {
// 모든 메시지를 timestamp 순으로 정렬하여 가져오기
const messages = await ChatMessage.find().sort({ timestamp: 1 });
res.json(messages);
} catch (error) {
res.status(500).json({ success: false, message: error.message });
}
});
module.exports = router;