업로드
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(cors());
|
||||||
app.use(bodyParser.json());
|
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
|
// Routes
|
||||||
const homeRoutes = require('./routes/home');
|
const homeRoutes = require('./routes/home');
|
||||||
const authRoutes = require('./routes/auth');
|
const authRoutes = require('./routes/auth');
|
||||||
@ -75,6 +57,9 @@ const shopRoutes = require('./routes/shop');
|
|||||||
const payment = require('./routes/payment');
|
const payment = require('./routes/payment');
|
||||||
const currency = require('./routes/currencies');
|
const currency = require('./routes/currencies');
|
||||||
const compaign = require('./routes/compaign');
|
const compaign = require('./routes/compaign');
|
||||||
|
const chatRoutes = require('./routes/chat');
|
||||||
|
const ChatMessage = require('./models/ChatMessage');
|
||||||
|
|
||||||
|
|
||||||
app.use('/v1', homeRoutes);
|
app.use('/v1', homeRoutes);
|
||||||
app.use('/v1', authRoutes);
|
app.use('/v1', authRoutes);
|
||||||
@ -98,6 +83,87 @@ app.use('/v1', shopRoutes);
|
|||||||
app.use('/v1', payment);
|
app.use('/v1', payment);
|
||||||
app.use('/v1', currency);
|
app.use('/v1', currency);
|
||||||
app.use('/v1', compaign);
|
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
|
// GET API
|
||||||
app.get('/v1', (req, res) => {
|
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