From bcf59a201505a905a23fd8ac2d4eb096834eb08f Mon Sep 17 00:00:00 2001 From: Felipe Medeiros Date: Mon, 7 Oct 2024 10:49:51 -0300 Subject: [PATCH] feat: adiciona controlador de chamadas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adiciona o controlador de chamadas para oferecer chamadas falsas. - Adiciona o arquivo `call.controller.ts` com a classe `CallController` que possui o método `offerCall` para oferecer chamadas falsas. - Adiciona o arquivo `call.dto.ts` com as classes `Metadata` e `OfferCallDto` para definir os dados da chamada. - Atualiza o arquivo `sendMessage.dto.ts` removendo a classe `OfferCallDto`. - Atualiza o arquivo `whatsapp.baileys.service.ts` importando a classe `OfferCallDto` corretamente e atualizando o método `offerCall` para receber os parâmetros corretos. - Adiciona o arquivo `call.router.ts` com a classe `CallRouter` para lidar com as rotas relacionadas a chamadas. - Atualiza o arquivo `index.router.ts` para incluir as rotas relacionadas a chamadas. --- src/api/controllers/call.controller.ts | 11 ++++++++ src/api/dto/call.dto.ts | 8 ++++++ src/api/dto/sendMessage.dto.ts | 5 ---- .../whatsapp/whatsapp.baileys.service.ts | 10 +++----- src/api/routes/call.router.ts | 25 +++++++++++++++++++ src/api/routes/index.router.ts | 2 ++ src/api/routes/sendMessage.router.ts | 12 --------- 7 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 src/api/controllers/call.controller.ts create mode 100644 src/api/dto/call.dto.ts create mode 100644 src/api/routes/call.router.ts diff --git a/src/api/controllers/call.controller.ts b/src/api/controllers/call.controller.ts new file mode 100644 index 00000000..abc29804 --- /dev/null +++ b/src/api/controllers/call.controller.ts @@ -0,0 +1,11 @@ +import { OfferCallDto } from '@api/dto/call.dto'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { WAMonitoringService } from '@api/services/monitor.service'; + +export class CallController { + constructor(private readonly waMonitor: WAMonitoringService) {} + + public async offerCall({ instanceName }: InstanceDto, data: OfferCallDto) { + return await this.waMonitor.waInstances[instanceName].offerCall(data); + } +} diff --git a/src/api/dto/call.dto.ts b/src/api/dto/call.dto.ts new file mode 100644 index 00000000..310b3779 --- /dev/null +++ b/src/api/dto/call.dto.ts @@ -0,0 +1,8 @@ +export class Metadata { + number: string; +} + +export class OfferCallDto extends Metadata { + isVideo?: boolean; + callDuration?: number; +} diff --git a/src/api/dto/sendMessage.dto.ts b/src/api/dto/sendMessage.dto.ts index 3dcabbe4..8d3ba1a0 100644 --- a/src/api/dto/sendMessage.dto.ts +++ b/src/api/dto/sendMessage.dto.ts @@ -46,11 +46,6 @@ export class Metadata { encoding?: boolean; } -export class OfferCallDto extends Metadata { - isVideo?: boolean; - callDuration?: number; -} - export class SendTextDto extends Metadata { text: string; } diff --git a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts index 1b84b81e..1bdca049 100644 --- a/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts +++ b/src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts @@ -1,3 +1,4 @@ +import { OfferCallDto } from '@api/dto/call.dto'; import { ArchiveChatDto, BlockUserDto, @@ -32,7 +33,6 @@ import { HandleLabelDto, LabelDto } from '@api/dto/label.dto'; import { ContactMessage, MediaMessage, - OfferCallDto, Options, SendAudioDto, SendContactDto, @@ -1671,14 +1671,12 @@ export class BaileysStartupService extends ChannelStartupService { } } - public async offerCall({ number, callDuration }: OfferCallDto) { + public async offerCall({ number, isVideo, callDuration }: OfferCallDto) { const jid = this.createJid(number); try { - const call = await this.client.offerCall(jid); - if (callDuration) { - setTimeout(() => this.client.terminateCall(call.id, call.to), callDuration * 1000); - } + const call = await this.client.offerCall(jid, isVideo); + setTimeout(() => this.client.terminateCall(call.id, call.to), callDuration * 1000); return call; } catch (error) { diff --git a/src/api/routes/call.router.ts b/src/api/routes/call.router.ts new file mode 100644 index 00000000..f801bd68 --- /dev/null +++ b/src/api/routes/call.router.ts @@ -0,0 +1,25 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { OfferCallDto } from '@api/dto/call.dto'; +import { sendMessageController } from '@api/server.module'; +import { offerCallSchema } from '@validate/validate.schema'; +import { RequestHandler, Router } from 'express'; + +import { HttpStatus } from './index.router'; + +export class CallRouter extends RouterBroker { + constructor(...guards: RequestHandler[]) { + super(); + this.router.post(this.routerPath('offer'), ...guards, async (req, res) => { + const response = await this.dataValidate({ + request: req, + schema: offerCallSchema, + ClassRef: OfferCallDto, + execute: (instance, data) => sendMessageController.offerCall(instance, data), + }); + + return res.status(HttpStatus.CREATED).json(response); + }); + } + + public readonly router: Router = Router(); +} diff --git a/src/api/routes/index.router.ts b/src/api/routes/index.router.ts index 43401725..5587f7b6 100644 --- a/src/api/routes/index.router.ts +++ b/src/api/routes/index.router.ts @@ -11,6 +11,7 @@ import fs from 'fs'; import mime from 'mime'; import path from 'path'; +import { CallRouter } from './call.router'; import { ChatRouter } from './chat.router'; import { GroupRouter } from './group.router'; import { InstanceRouter } from './instance.router'; @@ -79,6 +80,7 @@ router }) .use('/instance', new InstanceRouter(configService, ...guards).router) .use('/message', new MessageRouter(...guards).router) + .use('/call', new CallRouter(...guards).router) .use('/chat', new ChatRouter(...guards).router) .use('/group', new GroupRouter(...guards).router) .use('/template', new TemplateRouter(configService, ...guards).router) diff --git a/src/api/routes/sendMessage.router.ts b/src/api/routes/sendMessage.router.ts index 249e3c04..06f70ad7 100644 --- a/src/api/routes/sendMessage.router.ts +++ b/src/api/routes/sendMessage.router.ts @@ -1,6 +1,5 @@ import { RouterBroker } from '@api/abstract/abstract.router'; import { - OfferCallDto, SendAudioDto, SendButtonDto, SendContactDto, @@ -22,7 +21,6 @@ import { listMessageSchema, locationMessageSchema, mediaMessageSchema, - offerCallSchema, pollMessageSchema, reactionMessageSchema, statusMessageSchema, @@ -168,16 +166,6 @@ export class MessageRouter extends RouterBroker { execute: (instance, data) => sendMessageController.sendButtons(instance, data), }); - return res.status(HttpStatus.CREATED).json(response); - }) - .post(this.routerPath('offerCall'), ...guards, async (req, res) => { - const response = await this.dataValidate({ - request: req, - schema: offerCallSchema, - ClassRef: OfferCallDto, - execute: (instance, data) => sendMessageController.offerCall(instance, data), - }); - return res.status(HttpStatus.CREATED).json(response); }); }