Client Attachment Service
Visão Geral
O ClientAttachmentService gerencia anexos de clientes: listar anexos de um cliente, enviar novos anexos (upload) e excluir anexos existentes.
Suporta chamadas paginadas ao endpoint de listagem, upload via FormData e remoção por attachmentId.
Localização: services/client-attachment/client-attachment.service.ts
Endpoints
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /cliente/anexo/cliente/{clientId} | Busca anexos do cliente (paginado) |
| POST | /cliente/anexo/{clientId} | Faz upload de anexo para o cliente |
| DELETE | /cliente/anexo/{attachmentId} | Remove um anexo por ID |
Métodos
fetchRemoteByClientId(clientId)
Busca anexos de um cliente (retorna o content da resposta paginada).
Parâmetros
| Nome | Tipo | Obrigatório |
|---|---|---|
clientId | string | Sim |
Retorno: Promise<ClientAttachment[]>
Exemplo
const attachments = await clientAttachmentService.fetchRemoteByClientId(
"client-123",
);
Erros
| Status | Descrição |
|---|---|
| 5xx | Lança Error: ClientAttachmentService.fetchRemoteByClientId failed: {status} |
uploadAttachment(clientId, formData)
Faz upload de um anexo para o cliente usando FormData.
Parâmetros
| Nome | Tipo | Obrigatório |
|---|---|---|
clientId | string | Sim |
formData | FormData | Sim |
Retorno: Promise<ClientAttachment[]> (array de anexos atualizados)
Exemplo
import { makeNewAttachmentMock } from "@/__mocks__/client-attachment.mock";
const formData = makeNewAttachmentMock();
const attachments = await clientAttachmentService.uploadAttachment("client-123", formData);
Erros
| Status | Descrição |
|---|---|
| 4xx/5xx | Lança Error: ClientAttachmentService.uploadAttachment failed: {status} |
deleteAttachment(attachmentId)
Remove um anexo pelo seu ID.
Parâmetros
| Nome | Tipo | Obrigatório |
|---|---|---|
attachmentId | string | Sim |
Retorno: Promise<void>
Exemplo
await clientAttachmentService.deleteAttachment("a1f9c3d2-4b6e-4f1a-9c2b-0e7d5f8a1234");
Erros
| Status | Descrição |
|---|---|
| 4xx/5xx | Lança Error: ClientAttachmentService.deleteAttachment failed: {status} |
Estruturas de Dados
ClientAttachment
interface ClientAttachment {
id: string;
clientId: string;
organizationId: string;
nome: string;
organizationName: string;
attachmentUrl: string;
attachmentKey: string;
}
Upload helpers / validações
MAX_ATTACHMENT_SIZE_BYTES— 2 MBACCEPTED_MIME_TYPES— tipos aceitos:image/jpeg,image/png,application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,text/csv,application/vnd.ms-excel
Componentes Relacionados
| Componente | Descrição |
|---|---|
apiWithoutAccessToken | Instância Axios sem token de acesso utilizada nas chamadas |
PageResponse<T> | Tipo genérico de resposta paginada da API |
Casos de Uso
Listar anexos de um cliente:
const attachments = await clientAttachmentService.fetchRemoteByClientId("client-123");
console.log(attachments.length);
Enviar um novo anexo (upload):
const formData = makeNewAttachmentMock();
const updated = await clientAttachmentService.uploadAttachment("client-123", formData);
console.log("Anexos após upload:", updated.length);
Remover um anexo:
await clientAttachmentService.deleteAttachment("attachment-123");
console.log("Anexo removido");
Testes
Localização: services/client-attachment/client-attachment.test.ts
| Cenário | Resultado esperado |
|---|---|
fetchRemoteByClientId status 200 | Retorna pageClientAttachmentResponseMock.content |
fetchRemoteByClientId status 500 | Lança Error: ClientAttachmentService.fetchRemoteByClientId failed: 500 |
uploadAttachment status 201 | Retorna array de anexos |
uploadAttachment status 400 | Lança Error: ClientAttachmentService.uploadAttachment failed: 400 |
deleteAttachment status 204 | Resolve sem erro (void) |
deleteAttachment status 404 | Lança Error: ClientAttachmentService.deleteAttachment failed: 404 |
Mocks
Localização: __mocks__/client-attachment.mock.ts
clientAttachmentResponseMock— array deClientAttachmentde exemplopageClientAttachmentResponseMock— objeto paginado comcontente metadadosmakeNewAttachmentMock()— cria umFormDatacom umFilede exemplo e campodescricao
Exemplo de uso em testes:
import { makeNewAttachmentMock, pageClientAttachmentResponseMock } from "@/__mocks__/client-attachment.mock";
const api: any = { post: jest.fn(async () => ({ status: 201, data: pageClientAttachmentResponseMock.content })) };
const service = new ClientAttachmentService({ apiWithoutAccessToken: api });
const newAttachment = makeNewAttachmentMock();
const result = await service.uploadAttachment("client-123", newAttachment);
expect(result).toStrictEqual(pageClientAttachmentResponseMock.content);