업로드
This commit is contained in:
parent
79c3e81f05
commit
648ba24525
102
src/index.js
102
src/index.js
@ -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) => {
|
||||
|
9
src/models/ChatMessage.js
Normal file
9
src/models/ChatMessage.js
Normal 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
39
src/routes/chat.js
Normal 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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user