Skip to content

Anexando arquivos a um Contrato

TIP

Para uma explicação detalhada sobre como fazer upload de arquivos via GraphQL, incluindo melhores práticas e tratamento de erros, consulte nosso Guia de Upload de Arquivos com GraphQL.

Para anexar um arquivo a um contrato, utilizamos a mutation Contract_uploadContractAttachments. Essa mutation recebe como parâmetro um arquivo do tipo Upload e retorna um ContractFile.

Para enviar o arquivo, é necessário utilizar o FormData do JavaScript ou alguma biblioteca que faça o envio de arquivos.

É necessário passar o header Apollo-Require-Preflight com o valor true para que a requisição seja feita com sucesso.

graphql
mutation UploadContractAttachments($attachments: [Upload!]!, $contractId: ID!) {
  Contract_uploadContractAttachments(input: {
    attachments: $attachments,
    contractId: $contractId
  }) {
    id
    fileName
    fileExtension
    sender {
      id
      name
    }
  }
}
js
async function attachFileToContract(file, contractId) {
  const formData = new FormData();
  formData.append(
    'operations',
    JSON.stringify({
      variables: {
        attachments: [null],
        contractId: contractId
      },
      query: `
        mutation UploadContractAttachments($attachments: [Upload!]!, $contractId: ID!) {
          Contract_uploadContractAttachments(input: {
            attachments: $attachments,
            contractId: $contractId
          }) {
            id
            fileName
            fileExtension
            sender {
              id
              name
            }
          }
        }
      `
    })
  );

  const map = `["variables.attachments.0"]`;
  formData.append('map', map);
  formData.append('0', file);

  const response = await fetch('https://core-api.linte.com/graphql', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Apollo-Require-Preflight': 'true',
      'key': '<seu-token>'
    },
    body: formData
  });

  const result = await response.json();
  console.log(result);
}
python
import requests
import json

def attach_file_to_contract(file_path, contract_id):
    # Preparar o arquivo
    files = {
        '0': ('document.pdf', open(file_path, 'rb'), 'application/pdf')
    }
    
    # Preparar a operação GraphQL
    operations = {
        'variables': {
            'attachments': [None],
            'contractId': contract_id
        },
        'query': '''
            mutation UploadContractAttachments($attachments: [Upload!]!, $contractId: ID!) {
              Contract_uploadContractAttachments(input: {
                attachments: $attachments,
                contractId: $contractId
              }) {
                id
                fileName
                fileExtension
                sender {
                  id
                  name
                }
              }
            }
        '''
    }
    
    # Preparar o mapeamento
    map = {
        '0': ['variables.attachments.0']
    }
    
    # Enviar a requisição
    response = requests.post(
        'https://core-api.linte.com/graphql',
        headers={
            'Content-Type': 'application/json',
            'Apollo-Require-Preflight': 'true',
            'key': '<seu-token>'
        },
        data={
            'operations': json.dumps(operations),
            'map': json.dumps(map)
        },
        files=files
    )
    
    print(response.json())

if __name__ == '__main__':
    attach_file_to_contract('caminho/para/seu/arquivo.pdf', '<id-do-contrato>')