| | const Conversation = require('../models/Conversation');
|
| | const Message = require('../models/Message');
|
| | const Joi = require('joi');
|
| |
|
| |
|
| | const createConversationSchema = Joi.object({
|
| | title: Joi.string().min(1).max(100).required()
|
| | });
|
| |
|
| | const updateConversationSchema = Joi.object({
|
| | title: Joi.string().min(1).max(100),
|
| | isArchived: Joi.boolean(),
|
| | tags: Joi.array().items(Joi.string().trim())
|
| | });
|
| |
|
| |
|
| | exports.createConversation = async (req, res) => {
|
| | try {
|
| |
|
| | const { error } = createConversationSchema.validate(req.body);
|
| | if (error) {
|
| | return res.status(400).json({ error: error.details[0].message });
|
| | }
|
| |
|
| | const { title } = req.body;
|
| | const userId = req.userId;
|
| |
|
| | const conversation = new Conversation({
|
| | title,
|
| | userId
|
| | });
|
| |
|
| | await conversation.save();
|
| |
|
| | res.status(201).json({
|
| | message: 'Conversation created successfully',
|
| | conversation
|
| | });
|
| | } catch (error) {
|
| | console.error('Create conversation error:', error);
|
| | res.status(500).json({ error: 'Internal server error' });
|
| | }
|
| | };
|
| |
|
| |
|
| | exports.getConversations = async (req, res) => {
|
| | try {
|
| | const { page = 1, limit = 20, search, archived } = req.query;
|
| | const userId = req.userId;
|
| |
|
| |
|
| | const query = { userId };
|
| |
|
| | if (archived !== undefined) {
|
| | query.isArchived = archived === 'true';
|
| | }
|
| |
|
| | if (search) {
|
| | query.title = { $regex: search, $options: 'i' };
|
| | }
|
| |
|
| |
|
| | const conversations = await Conversation.find(query)
|
| | .sort({ lastMessageAt: -1 })
|
| | .limit(limit * 1)
|
| | .skip((page - 1) * limit);
|
| |
|
| | const total = await Conversation.countDocuments(query);
|
| |
|
| | res.json({
|
| | conversations,
|
| | pagination: {
|
| | page: parseInt(page),
|
| | limit: parseInt(limit),
|
| | total,
|
| | pages: Math.ceil(total / limit)
|
| | }
|
| | });
|
| | } catch (error) {
|
| | console.error('Get conversations error:', error);
|
| | res.status(500).json({ error: 'Internal server error' });
|
| | }
|
| | };
|
| |
|
| |
|
| | exports.getConversation = async (req, res) => {
|
| | try {
|
| | const { conversationId } = req.params;
|
| | const userId = req.userId;
|
| |
|
| | const conversation = await Conversation.findOne({
|
| | _id: conversationId,
|
| | userId
|
| | });
|
| |
|
| | if (!conversation) {
|
| | return res.status(404).json({ error: 'Conversation not found' });
|
| | }
|
| |
|
| | res.json({ conversation });
|
| | } catch (error) {
|
| | console.error('Get conversation error:', error);
|
| | res.status(500).json({ error: 'Internal server error' });
|
| | }
|
| | };
|
| |
|
| |
|
| | exports.updateConversation = async (req, res) => {
|
| | try {
|
| |
|
| | const { error } = updateConversationSchema.validate(req.body);
|
| | if (error) {
|
| | return res.status(400).json({ error: error.details[0].message });
|
| | }
|
| |
|
| | const { conversationId } = req.params;
|
| | const userId = req.userId;
|
| | const updates = req.body;
|
| |
|
| | const conversation = await Conversation.findOneAndUpdate(
|
| | { _id: conversationId, userId },
|
| | updates,
|
| | { new: true, runValidators: true }
|
| | );
|
| |
|
| | if (!conversation) {
|
| | return res.status(404).json({ error: 'Conversation not found' });
|
| | }
|
| |
|
| | res.json({
|
| | message: 'Conversation updated successfully',
|
| | conversation
|
| | });
|
| | } catch (error) {
|
| | console.error('Update conversation error:', error);
|
| | res.status(500).json({ error: 'Internal server error' });
|
| | }
|
| | };
|
| |
|
| |
|
| | exports.deleteConversation = async (req, res) => {
|
| | try {
|
| | const { conversationId } = req.params;
|
| | const userId = req.userId;
|
| |
|
| | const conversation = await Conversation.findOneAndDelete({
|
| | _id: conversationId,
|
| | userId
|
| | });
|
| |
|
| | if (!conversation) {
|
| | return res.status(404).json({ error: 'Conversation not found' });
|
| | }
|
| |
|
| |
|
| | await Message.deleteMany({ conversationId });
|
| |
|
| | res.json({ message: 'Conversation deleted successfully' });
|
| | } catch (error) {
|
| | console.error('Delete conversation error:', error);
|
| | res.status(500).json({ error: 'Internal server error' });
|
| | }
|
| | }; |