diff --git a/controllers/TripController.js b/controllers/TripController.js index 2ff9fe5c0daaa70cd75cc436a0fea168a4dbc05a..9d0493efd9e109edd96e101fda6c3d0262f26b1f 100644 --- a/controllers/TripController.js +++ b/controllers/TripController.js @@ -66,29 +66,38 @@ const addCollaborator = async (req, res) => { try { const { collaboratorEmail } = req.body; - // Verify if the collaboratorEmail corresponds to a valid user - const user = await User.findOne({ email: collaboratorEmail }); - if (!user) { - return res.status(404).json({ message: 'User not found' }); + const collaborator = await User.findOne({ email: collaboratorEmail }); + if (!collaborator) { + return res.status(404).json({ message: '해당 이메일의 사용자를 찾을 수 없습니다.' }); } - const trip = await Trip.findById(req.params.id).populate('creaate_by'); - if (!trip) return res.status(404).json({ message: 'Trip not found' }); + const trip = await Trip.findById(req.params.id).populate('create_by'); + if (!trip) { + return res.status(404).json({ message: '여행을 찾을 수 없습니다.' }); + } - // Check if the user is already a collaborator - if (trip.collaborators.some(collaborator => collaborator.email === collaboratorEmail)) { - return res.status(400).json({ message: 'User is already a collaborator' }); + const isAlreadyCollaborator = trip.collaborators.some( + collab => collab.toString() === collaborator._id.toString() + ); + + if (isAlreadyCollaborator) { + return res.status(400).json({ message: '이미 공동작업자로 등록된 사용자입니다.' }); } - // Check if the email is the creator's email - if (trip.create_by.email === collaboratorEmail) { - return res.status(400).json({ message: 'Creator cannot be added as a collaborator' }); + if (trip.create_by._id.toString() === collaborator._id.toString()) { + return res.status(400).json({ message: '생성자는 공동작업자로 추가할 수 없습니다.' }); } - trip.collaborators.push({ email: collaboratorEmail }); + trip.collaborators.push(collaborator._id); await trip.save(); - res.status(200).json(trip); + + const updatedTrip = await Trip.findById(trip._id) + .populate('create_by') + .populate('collaborators'); + + res.status(200).json(updatedTrip); } catch (err) { + console.error('공동작업자 추가 오류:', err); res.status(500).json({ error: err.message }); } }; diff --git a/models/trips.js b/models/trips.js index 7758ce6f3c88198e4135f8f6a381ec343f206d7d..0cc86fdd0d0a90a4c8fb0f3ecdab0e6d2faf0a25 100644 --- a/models/trips.js +++ b/models/trips.js @@ -27,7 +27,8 @@ const tripSchema = new mongoose.Schema({ location: { type: String, required: true }, create_by: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, collaborators: [{ - email: { type: String, required: true } + type: mongoose.Schema.Types.ObjectId, + ref: 'User' }], plans: { type: Map, // Object 대신 Map 사용