omnichannel-backend/src/modules/admin/customer-contacts.controller.ts
Rafael Lopes ee966d3306
Some checks are pending
Deploy Dev / deploy (push) Waiting to run
DOCS: Adicionado Swagger para documentação de rotas da API
2026-05-28 13:37:53 -03:00

78 lines
2.7 KiB
TypeScript

import { Body, Controller, Get, Param, Put } from '@nestjs/common';
import { ApiBody, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger';
import { CustomerContactsService } from './customer-contacts.service';
interface SaveContactBody {
phone?: string | null;
whatsappPhone?: string | null;
callSmsPhone?: string | null;
email?: string | null;
name?: string | null;
company?: string | null;
note?: string | null;
userId?: number | null;
}
@ApiTags('Contatos')
@Controller('contacts')
export class CustomerContactsController {
constructor(private readonly customerContactsService: CustomerContactsService) {}
@ApiOperation({
summary: 'Lista contatos',
description: 'Retorna a agenda de contatos usada para atendimento, abertura ativa e consulta rapida no chat.',
})
@ApiResponse({ status: 200, description: 'Lista de contatos retornada.' })
@Get()
listContacts() {
return this.customerContactsService.listContacts();
}
@ApiOperation({
summary: 'Consulta contato por chat',
description: 'Busca os dados salvos de um contato usando o identificador da conversa.',
})
@ApiParam({ name: 'chatId', description: 'Identificador codificado do chat.' })
@Get(':chatId')
getContact(@Param('chatId') chatId: string) {
return this.customerContactsService.getContact(decodeURIComponent(chatId));
}
@ApiOperation({
summary: 'Salva contato',
description: 'Cria ou atualiza dados do contato associados ao chat, incluindo telefone, email, etiqueta de identificacao e observacao.',
})
@ApiParam({ name: 'chatId', description: 'Identificador codificado do chat.' })
@ApiBody({
schema: {
type: 'object',
properties: {
phone: { type: 'string', nullable: true, example: '5511999999999' },
whatsappPhone: { type: 'string', nullable: true, example: '5511999999999' },
callSmsPhone: { type: 'string', nullable: true, example: '5511988888888' },
email: { type: 'string', nullable: true, example: 'cliente@empresa.com' },
name: { type: 'string', nullable: true, example: 'Tony Silva' },
company: { type: 'string', nullable: true, example: 'Departamento de RH' },
note: { type: 'string', nullable: true, example: 'Contato prefere WhatsApp.' },
userId: { type: 'number', nullable: true, example: 10 },
},
},
})
@Put(':chatId')
saveContact(
@Param('chatId') chatId: string,
@Body() body: SaveContactBody,
) {
return this.customerContactsService.saveContact({
chatId: decodeURIComponent(chatId),
phone: body.whatsappPhone || body.phone,
callSmsPhone: body.callSmsPhone,
email: body.email,
name: body.name,
company: body.company,
note: body.note,
userId: body.userId,
});
}
}