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>')