diff --git a/models/chatRooms.js b/models/chatRooms.js new file mode 100644 index 0000000000000000000000000000000000000000..ca68c3941a49d64f8abd4806c399793c03590301 --- /dev/null +++ b/models/chatRooms.js @@ -0,0 +1,21 @@ +const mongoose = require('mongoose'); + +// MongoDB 채팅방 스키마 수정 (현재 참가 중인 유저 목록 추가) +const chatRoomsSchema = new mongoose.Schema({ + chatRoomId: { type: String, required: true, unique: true }, + messages: [{ + sender: String, + message: String, + timestamp: Date, + type: { type: String, default: 'message' } // 기본값은 'message', 다른 값으로 'join', 'leave' 가능 + }], + participants: [{ type: String }], + lastReadAt: { type: Map, of: Date }, // 각 참가자의 마지막 읽은 메시지 시간 기록 + lastReadLogId: { type: Map, of: String }, // 각 참가자의 마지막으로 읽은 logID 기록 + isOnline: { type: Map, of: Boolean } // 각 참가자의 온라인 상태 +}, { collection: 'chatrooms' }); + +// 모델이 이미 정의되어 있는 경우 재정의하지 않음 +const ChatRooms = mongoose.models.ChatRooms || mongoose.model('ChatRooms', chatRoomsSchema); + +module.exports = ChatRooms; \ No newline at end of file diff --git a/models/meeting.js b/models/meeting.js index 7944e355fef21458c8550ce46bbb6eeb7e3cbc46..14c50b58aa78c52bd14340c678778a49a8d1c994 100644 --- a/models/meeting.js +++ b/models/meeting.js @@ -1,10 +1,15 @@ // models/Meeting.js const { DataTypes } = require('sequelize'); -const sequelize = require('../config/sequelize'); +const { sequelize } = require('../config/sequelize'); const User = require('./User'); const Meeting = sequelize.define('Meeting', { + id: { + type: DataTypes.BIGINT, + primaryKey: true, + autoIncrement: true, + }, title: { type: DataTypes.STRING, allowNull: false, @@ -30,12 +35,34 @@ const Meeting = sequelize.define('Meeting', { type: DataTypes.ENUM('OPEN', 'CLOSE'), allowNull: false, }, + created_by: { + type: DataTypes.BIGINT, + allowNull: false, + references: { + model: 'Users', + key: 'id', + }, + }, + chatRoomId: { // 새로운 필드 추가 + type: DataTypes.STRING, + allowNull: false, + }, }, { tableName: 'Meetings', timestamps: false, }); -Meeting.belongsTo(User, { foreignKey: 'created_by', as: 'creator' }); -User.hasMany(Meeting, { foreignKey: 'created_by', as: 'meetings' }); -module.exports = Meeting; +// 연관 관계 설정 +Meeting.associate = (models) => { + Meeting.belongsTo(models.User, { + foreignKey: 'created_by', // FK 설정 + as: 'creator', // 별칭 + }); + Meeting.hasMany(models.MeetingParticipant, { + foreignKey: 'meeting_id', + as: 'participants', + }); +}; + +module.exports = Meeting; \ No newline at end of file diff --git a/models/meetingParticipant.js b/models/meetingParticipant.js index 716a4420b9c9205398cd8d426b0e7ef4c349fad0..15c93c13aa7e6721fb250422333bcd772ffc0f1c 100644 --- a/models/meetingParticipant.js +++ b/models/meetingParticipant.js @@ -1,19 +1,32 @@ // models/MeetingParticipant.js const { DataTypes } = require('sequelize'); -const sequelize = require('../config/sequelize'); -const Meeting = require('./Meeting'); -const User = require('./User'); +const { sequelize } = require('../config/sequelize'); -const MeetingParticipant = sequelize.define('MeetingParticipant', {}, { +const MeetingParticipant = sequelize.define('MeetingParticipant', { + meeting_id: { + type: DataTypes.BIGINT, + allowNull: false + }, + user_id: { + type: DataTypes.BIGINT, + allowNull: false + } +}, { tableName: 'MeetingParticipants', timestamps: false, }); -MeetingParticipant.belongsTo(Meeting, { foreignKey: 'meeting_id', as: 'meeting' }); -Meeting.hasMany(MeetingParticipant, { foreignKey: 'meeting_id', as: 'participants' }); +MeetingParticipant.associate = (models) => { + MeetingParticipant.belongsTo(models.Meeting, { + foreignKey: 'meeting_id', + as: 'meeting' + }); -MeetingParticipant.belongsTo(User, { foreignKey: 'user_id', as: 'user' }); -User.hasMany(MeetingParticipant, { foreignKey: 'user_id', as: 'meetingParticipations' }); + MeetingParticipant.belongsTo(models.User, { + foreignKey: 'user_id', + as: 'participantUser' + }); +}; module.exports = MeetingParticipant; diff --git a/models/user.js b/models/user.js index fbf92c144d9a6de814321390a784bc4c66c5d2eb..cb14b0bc547c79ac88535d4d88c4a4331e6d113a 100644 --- a/models/user.js +++ b/models/user.js @@ -1,9 +1,14 @@ // models/User.js const { DataTypes } = require('sequelize'); -const sequelize = require('../config/sequelize'); // sequelize 인스턴스 경로에 맞게 수정하세요. +const { sequelize } = require('../config/sequelize'); const User = sequelize.define('User', { + id: { + type: DataTypes.BIGINT, // 수정: id 필드를 BIGINT로 설정 + autoIncrement: true, + primaryKey: true, + }, name: { type: DataTypes.STRING, // VARCHAR allowNull: false, @@ -21,4 +26,17 @@ const User = sequelize.define('User', { timestamps: true, // createdAt과 updatedAt 자동 관리 }); +User.associate = (models) => { + User.hasMany(models.Meeting, { + foreignKey: 'created_by', + as: 'createdMeetings', + }); + + User.hasMany(models.MeetingParticipant, { + foreignKey: 'user_id', + as: 'userMeetingParticipations', + }); +}; + + module.exports = User;