omnichannel-backend/src/modules/admin/agent-presence.controller.ts

59 lines
2.3 KiB
TypeScript
Raw Normal View History

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));
}
}