Carregando
const API_URL = '/api/v1';
const TOKEN = 'seu-token-aqui';
async function listPeople(page = 1) {
const response = await fetch(`${API_URL}/people?page=${page}`, {
headers: {
'Authorization': `${TOKEN}`
}
});
const data = await response.json();
console.log('Pessoas:', data.data);
console.log('Tem mais:', data.pagination.hasMore);
return data;
}
listPeople();async function createPerson(personData) {
const response = await fetch(`${API_URL}/people`, {
method: 'POST',
headers: {
'Authorization': `${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(personData)
});
return await response.json();
}
// Exemplo com apenas campos obrigatórios
const newPerson = {
name: 'João Silva',
cpf: '123.456.789-01', // Aceita formatação
birthdate: '15-05-1990', // Formato DD-MM-YYYY
city: 'São Paulo',
uf: 'SP',
type: 'humano',
cnpj: '12.345.678/0001-90' // Aceita formatação
};
const result = await createPerson(newPerson);
console.log('Criado:', result);// Exemplo com TODOS os campos disponíveis
const personComplete = {
// Campos obrigatórios
name: 'Maria Santos Oliveira',
cpf: '987.654.321-00',
birthdate: '20-03-1985',
city: 'Rio de Janeiro',
uf: 'RJ',
type: 'humano',
cnpj: '12.345.678/0001-90',
// Contato
email: 'maria.santos@example.com',
phone: '(21) 98765-4321',
// Profissional
role: 'Gerente de Operações',
salary: 8500,
internalId: 'EMP-2024-001',
contractStartDate: '01-03-2019',
// Status e observações
status: 'ativo',
sex: 'feminino',
cid: 'M79.3',
details: 'Colaboradora com mais de 5 anos de empresa',
// Endereço completo
address: {
street: 'Avenida Atlântica',
number: '1500',
complement: 'Apto 301',
neighborhood: 'Copacabana',
city: 'Rio de Janeiro',
state: 'RJ',
postalCode: '22021-000'
}
};
const result = await createPerson(personComplete);
console.log('Pessoa completa criada:', result);async function createMultiplePeople(peopleArray) {
const response = await fetch(`${API_URL}/people`, {
method: 'POST',
headers: {
'Authorization': `${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(peopleArray)
});
return await response.json();
}
const people = [
{
name: 'Fernanda Lima Santos',
cpf: '567.890.123-45',
birthdate: '15-09-1992',
city: 'Belo Horizonte',
uf: 'MG',
type: 'humano',
cnpj: '12.345.678/0001-90',
email: 'fernanda.lima@example.com',
phone: '(31) 99123-4567',
role: 'Designer UX/UI',
salary: 6000,
status: 'ativo'
},
{
name: 'Paulo Ricardo Ferreira',
cpf: '678.901.234-56',
birthdate: '10-07-1987',
city: 'Salvador',
uf: 'BA',
type: 'remoto',
cnpj: '12.345.678/0001-90',
email: 'paulo.ferreira@example.com',
phone: '(71) 98888-7777',
role: 'Engenheiro de Software',
salary: 9500,
contractStartDate: '15-01-2023'
}
];
const result = await createMultiplePeople(people);
console.log(`Inseridos: ${result.summary.totalInserted}`);
console.log(`Atualizados: ${result.summary.totalUpdated}`);// Envia apenas pessoas ativas, as ausentes são marcadas como removidas
async function syncPeople(activePeople) {
const response = await fetch(`${API_URL}/people?removeAbsent=true`, {
method: 'POST',
headers: {
'Authorization': `${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(activePeople)
});
return await response.json();
}
// Exemplo: sistema externo tem 2 pessoas ativas
const activePeople = [
{
name: 'João Silva',
cpf: '123.456.789-01',
birthdate: '15-05-1990',
city: 'São Paulo',
uf: 'SP',
type: 'humano',
cnpj: '12.345.678/0001-90',
status: 'ativo'
},
{
name: 'Ana Paula',
cpf: '234.567.890-12',
birthdate: '22-08-1988',
city: 'São Paulo',
uf: 'SP',
type: 'humano',
cnpj: '12.345.678/0001-90',
status: 'ativo'
}
];
const result = await syncPeople(activePeople);
console.log(`Removidos: ${result.summary.totalRemoved}`);async function createWithErrorHandling(peopleData) {
try {
const response = await fetch(`${API_URL}/people`, {
method: 'POST',
headers: {
'Authorization': `${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(peopleData)
});
const result = await response.json();
if (!result.success) {
// Tratar erros de validação
if (result.validationErrors) {
result.validationErrors.forEach(error => {
console.error(`Erro no índice ${error.index}:`);
error.errors.forEach(e => {
console.error(` - ${e.field}: ${e.message}`);
});
});
}
throw new Error(result.error);
}
return result;
} catch (error) {
console.error('Erro ao criar pessoas:', error.message);
throw error;
}
}
// Exemplo com dados inválidos
const invalidData = [
{
name: 'João',
cpf: '111.111.111-11', // CPF inválido
birthdate: '15-05-1990',
city: 'São Paulo',
uf: 'SP',
type: 'humano',
cnpj: '12.345.678/0001-90'
}
];
await createWithErrorHandling(invalidData);class PeopleAPI {
constructor(baseURL, token) {
this.baseURL = baseURL;
this.token = token;
}
async request(endpoint, options = {}) {
const response = await fetch(`${this.baseURL}${endpoint}`, {
...options,
headers: {
'Authorization': `${this.token}`,
'Content-Type': 'application/json',
...options.headers
}
});
const data = await response.json();
if (!response.ok) throw new Error(data.error);
return data;
}
list(page = 1, filters = {}) {
const params = new URLSearchParams({ page, ...filters });
return this.request(`/people?${params}`);
}
create(data, removeAbsent = false) {
const url = removeAbsent ? '/people?removeAbsent=true' : '/people';
return this.request(url, {
method: 'POST',
body: JSON.stringify(data)
});
}
createComplete(personData) {
// Helper para criar pessoa com todos os campos
const complete = {
// Obrigatórios
name: personData.name,
cpf: personData.cpf,
birthdate: personData.birthdate,
city: personData.city,
uf: personData.uf,
type: personData.type,
cnpj: personData.cnpj,
// Opcionais
...(personData.email && { email: personData.email }),
...(personData.phone && { phone: personData.phone }),
...(personData.role && { role: personData.role }),
...(personData.salary && { salary: personData.salary }),
...(personData.status && { status: personData.status }),
...(personData.sex && { sex: personData.sex }),
...(personData.cid && { cid: personData.cid }),
...(personData.details && { details: personData.details }),
...(personData.internalId && { internalId: personData.internalId }),
...(personData.contractStartDate && { contractStartDate: personData.contractStartDate }),
...(personData.address && { address: personData.address })
};
return this.create(complete);
}
sync(activePeople) {
// Sincronização automática com removeAbsent
return this.create(activePeople, true);
}
deleteRemoved() {
return this.request('/people', { method: 'DELETE' });
}
}
// Exemplos de uso
const api = new PeopleAPI('/api/v1', 'seu-token');
// Listar com filtros
const active = await api.list(1, { status: 'ativo', type: 'humano' });
// Criar pessoa completa
await api.createComplete({
name: 'João Silva',
cpf: '123.456.789-01',
birthdate: '15-05-1990',
city: 'São Paulo',
uf: 'SP',
type: 'humano',
cnpj: '12.345.678/0001-90',
email: 'joao@example.com',
phone: '(11) 99999-9999',
role: 'Desenvolvedor',
salary: 8000
});
// Sincronizar pessoas ativas
await api.sync([/* pessoas ativas */]);