import { Body, Controller, Get, Post, Query } from '@nestjs/common'; import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger'; import { AgentPresenceService } from './agent-presence.service'; @ApiTags('Presenca do agente') @Controller('agent/presence') export class AgentPresenceController { constructor(private readonly agentPresenceService: AgentPresenceService) {} @ApiOperation({ summary: 'Lista presenca dos agentes', description: 'Retorna o estado atual dos agentes para acompanhamento operacional, incluindo disponibilidade e pausas.', }) @Get() listPresence() { return this.agentPresenceService.listPresence(); } @ApiOperation({ summary: 'Consulta presenca do agente logado', description: 'Retorna o status de presenca de um usuario especifico.', }) @ApiQuery({ name: 'userId', required: true, description: 'ID do usuario.' }) @Get('me') getPresence(@Query('userId') userId: string) { return this.agentPresenceService.getPresence(Number(userId)); } @ApiOperation({ summary: 'Coloca agente em pausa', description: 'Marca o agente como pausado para que ele nao receba novos atendimentos enquanto estiver indisponivel.', }) @ApiBody({ schema: { type: 'object', required: ['userId'], properties: { userId: { type: 'number', example: 10 } } } }) @Post('pause') pause(@Body() body: { userId: number }) { return this.agentPresenceService.pause(Number(body.userId)); } @ApiOperation({ summary: 'Retoma disponibilidade do agente', description: 'Remove a pausa do agente e marca o usuario como disponivel novamente.', }) @ApiBody({ schema: { type: 'object', required: ['userId'], properties: { userId: { type: 'number', example: 10 } } } }) @Post('resume') resume(@Body() body: { userId: number }) { return this.agentPresenceService.resume(Number(body.userId)); } @ApiOperation({ summary: 'Marca agente como offline', description: 'Atualiza a presenca do agente para offline, usado em saida do painel ou encerramento de expediente.', }) @ApiBody({ schema: { type: 'object', required: ['userId'], properties: { userId: { type: 'number', example: 10 } } } }) @Post('offline') offline(@Body() body: { userId: number }) { return this.agentPresenceService.offline(Number(body.userId)); } }