File size: 2,850 Bytes
f0743f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
const { ToolCall } = require('~/db/models');

/**
 * Create a new tool call
 * @param {IToolCallData} toolCallData - The tool call data
 * @returns {Promise<IToolCallData>} The created tool call document
 */
async function createToolCall(toolCallData) {
  try {
    return await ToolCall.create(toolCallData);
  } catch (error) {
    throw new Error(`Error creating tool call: ${error.message}`);
  }
}

/**
 * Get a tool call by ID
 * @param {string} id - The tool call document ID
 * @returns {Promise<IToolCallData|null>} The tool call document or null if not found
 */
async function getToolCallById(id) {
  try {
    return await ToolCall.findById(id).lean();
  } catch (error) {
    throw new Error(`Error fetching tool call: ${error.message}`);
  }
}

/**
 * Get tool calls by message ID and user
 * @param {string} messageId - The message ID
 * @param {string} userId - The user's ObjectId
 * @returns {Promise<Array>} Array of tool call documents
 */
async function getToolCallsByMessage(messageId, userId) {
  try {
    return await ToolCall.find({ messageId, user: userId }).lean();
  } catch (error) {
    throw new Error(`Error fetching tool calls: ${error.message}`);
  }
}

/**
 * Get tool calls by conversation ID and user
 * @param {string} conversationId - The conversation ID
 * @param {string} userId - The user's ObjectId
 * @returns {Promise<IToolCallData[]>} Array of tool call documents
 */
async function getToolCallsByConvo(conversationId, userId) {
  try {
    return await ToolCall.find({ conversationId, user: userId }).lean();
  } catch (error) {
    throw new Error(`Error fetching tool calls: ${error.message}`);
  }
}

/**
 * Update a tool call
 * @param {string} id - The tool call document ID
 * @param {Partial<IToolCallData>} updateData - The data to update
 * @returns {Promise<IToolCallData|null>} The updated tool call document or null if not found
 */
async function updateToolCall(id, updateData) {
  try {
    return await ToolCall.findByIdAndUpdate(id, updateData, { new: true }).lean();
  } catch (error) {
    throw new Error(`Error updating tool call: ${error.message}`);
  }
}

/**
 * Delete a tool call
 * @param {string} userId - The related user's ObjectId
 * @param {string} [conversationId] - The tool call conversation ID
 * @returns {Promise<{ ok?: number; n?: number; deletedCount?: number }>} The result of the delete operation
 */
async function deleteToolCalls(userId, conversationId) {
  try {
    const query = { user: userId };
    if (conversationId) {
      query.conversationId = conversationId;
    }
    return await ToolCall.deleteMany(query);
  } catch (error) {
    throw new Error(`Error deleting tool call: ${error.message}`);
  }
}

module.exports = {
  createToolCall,
  updateToolCall,
  deleteToolCalls,
  getToolCallById,
  getToolCallsByConvo,
  getToolCallsByMessage,
};