project push
This commit is contained in:
parent
12ef55e756
commit
2399a31aac
31 changed files with 20580 additions and 0 deletions
237
src/controllers/chatController.js
Normal file
237
src/controllers/chatController.js
Normal file
|
|
@ -0,0 +1,237 @@
|
|||
const { sessions } = require('../sessions')
|
||||
const { sendErrorResponse } = require('../utils')
|
||||
|
||||
/**
|
||||
* @function
|
||||
* @async
|
||||
* @name getClassInfo
|
||||
* @description Gets information about a chat using the chatId and sessionId
|
||||
* @param {Object} req - Request object
|
||||
* @param {Object} res - Response object
|
||||
* @param {string} req.body.chatId - The ID of the chat to get information for
|
||||
* @param {string} req.params.sessionId - The ID of the session to use
|
||||
* @returns {Object} - Returns a JSON object with the success status and chat information
|
||||
* @throws {Error} - Throws an error if chat is not found or if there is a server error
|
||||
*/
|
||||
const getClassInfo = async (req, res) => {
|
||||
try {
|
||||
const { chatId } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
res.json({ success: true, chat })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears all messages in a chat.
|
||||
*
|
||||
* @function
|
||||
* @async
|
||||
* @param {Object} req - The request object.
|
||||
* @param {Object} res - The response object.
|
||||
* @param {string} req.params.sessionId - The ID of the session.
|
||||
* @param {string} req.body.chatId - The ID of the chat to clear messages from.
|
||||
* @throws {Error} If the chat is not found or there is an internal server error.
|
||||
* @returns {Object} The success status and the cleared messages.
|
||||
*/
|
||||
const clearMessages = async (req, res) => {
|
||||
try {
|
||||
const { chatId } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
const clearMessages = await chat.clearMessages()
|
||||
res.json({ success: true, clearMessages })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops typing or recording in chat immediately.
|
||||
*
|
||||
* @function
|
||||
* @async
|
||||
* @param {Object} req - Request object.
|
||||
* @param {Object} res - Response object.
|
||||
* @param {string} req.body.chatId - ID of the chat to clear the state for.
|
||||
* @param {string} req.params.sessionId - ID of the session the chat belongs to.
|
||||
* @returns {Promise<void>} - A Promise that resolves with a JSON object containing a success flag and the result of clearing the state.
|
||||
* @throws {Error} - If there was an error while clearing the state.
|
||||
*/
|
||||
const clearState = async (req, res) => {
|
||||
try {
|
||||
const { chatId } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
const clearState = await chat.clearState()
|
||||
res.json({ success: true, clearState })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a chat.
|
||||
*
|
||||
* @async
|
||||
* @function
|
||||
* @param {Object} req - The request object.
|
||||
* @param {Object} res - The response object.
|
||||
* @param {string} req.params.sessionId - The session ID.
|
||||
* @param {string} req.body.chatId - The ID of the chat to be deleted.
|
||||
* @returns {Object} A JSON response indicating whether the chat was deleted successfully.
|
||||
* @throws {Object} If there is an error while deleting the chat, an error response is sent with a status code of 500.
|
||||
* @throws {Object} If the chat is not found, an error response is sent with a status code of 404.
|
||||
*/
|
||||
const deleteChat = async (req, res) => {
|
||||
try {
|
||||
const { chatId } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
const deleteChat = await chat.delete()
|
||||
res.json({ success: true, deleteChat })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches messages from a specified chat.
|
||||
*
|
||||
* @function
|
||||
* @async
|
||||
*
|
||||
* @param {Object} req - The request object containing sessionId, chatId, and searchOptions.
|
||||
* @param {string} req.params.sessionId - The ID of the session associated with the chat.
|
||||
* @param {Object} req.body - The body of the request containing chatId and searchOptions.
|
||||
* @param {string} req.body.chatId - The ID of the chat from which to fetch messages.
|
||||
* @param {Object} req.body.searchOptions - The search options to use when fetching messages.
|
||||
*
|
||||
* @param {Object} res - The response object to send the fetched messages.
|
||||
* @returns {Promise<Object>} A JSON object containing the success status and fetched messages.
|
||||
*
|
||||
* @throws {Error} If the chat is not found or there is an error fetching messages.
|
||||
*/
|
||||
const fetchMessages = async (req, res) => {
|
||||
try {
|
||||
/*
|
||||
#swagger.requestBody = {
|
||||
required: true,
|
||||
schema: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
chatId: {
|
||||
type: 'string',
|
||||
description: 'Unique whatsApp identifier for the given Chat (either group or personnal)',
|
||||
example: '6281288888888@c.us'
|
||||
},
|
||||
searchOptions: {
|
||||
type: 'object',
|
||||
description: 'Search options for fetching messages',
|
||||
example: '{}'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
const { chatId, searchOptions } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
const messages = await chat.fetchMessages(searchOptions)
|
||||
res.json({ success: true, messages })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the contact for a chat
|
||||
* @async
|
||||
* @function
|
||||
* @param {Object} req - The HTTP request object
|
||||
* @param {Object} res - The HTTP response object
|
||||
* @param {string} req.params.sessionId - The ID of the current session
|
||||
* @param {string} req.body.chatId - The ID of the chat to get the contact for
|
||||
* @returns {Promise<void>} - Promise that resolves with the chat's contact information
|
||||
* @throws {Error} - Throws an error if chat is not found or if there is an error getting the contact information
|
||||
*/
|
||||
const getContact = async (req, res) => {
|
||||
try {
|
||||
const { chatId } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
const contact = await chat.getContact()
|
||||
res.json({ success: true, contact })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a recording state to a WhatsApp chat.
|
||||
* @async
|
||||
* @function
|
||||
* @param {object} req - The request object.
|
||||
* @param {object} res - The response object.
|
||||
* @param {string} req.params.sessionId - The session ID.
|
||||
* @param {object} req.body - The request body.
|
||||
* @param {string} req.body.chatId - The ID of the chat to send the recording state to.
|
||||
* @returns {object} - An object containing a success message and the result of the sendStateRecording method.
|
||||
* @throws {object} - An error object containing a status code and error message if an error occurs.
|
||||
*/
|
||||
const sendStateRecording = async (req, res) => {
|
||||
try {
|
||||
const { chatId } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
const sendStateRecording = await chat.sendStateRecording()
|
||||
res.json({ success: true, sendStateRecording })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a typing state to a WhatsApp chat.
|
||||
* @async
|
||||
* @function
|
||||
* @param {object} req - The request object.
|
||||
* @param {object} res - The response object.
|
||||
* @param {string} req.params.sessionId - The session ID.
|
||||
* @param {object} req.body - The request body.
|
||||
* @param {string} req.body.chatId - The ID of the chat to send the typing state to.
|
||||
* @returns {object} - An object containing a success message and the result of the sendStateTyping method.
|
||||
* @throws {object} - An error object containing a status code and error message if an error occurs.
|
||||
*/
|
||||
const sendStateTyping = async (req, res) => {
|
||||
try {
|
||||
const { chatId } = req.body
|
||||
const client = sessions.get(req.params.sessionId)
|
||||
const chat = await client.getChatById(chatId)
|
||||
if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') }
|
||||
const sendStateTyping = await chat.sendStateTyping()
|
||||
res.json({ success: true, sendStateTyping })
|
||||
} catch (error) {
|
||||
sendErrorResponse(res, 500, error.message)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getClassInfo,
|
||||
clearMessages,
|
||||
clearState,
|
||||
deleteChat,
|
||||
fetchMessages,
|
||||
getContact,
|
||||
sendStateRecording,
|
||||
sendStateTyping
|
||||
}
|
||||
Loading…
Reference in a new issue