“Dê o seu melhor...”!
O Desafio foi feito como parte do processo seletivo do LinkAPI para a vaga de Desenvolvedor Backend Pleno. Consiste em construir uma integração entre os sistemas do Bling e da Pipedrive. A integração deve buscar as oportunidades com status igual a ganho(won) no Pipedrive e inseri-las como pedido no Bling. Foi requerido ainda criar uma collection no banco de dados MongoDB agregando as oportunidades inseridas no Bling por dia e valor total. Foi construído um endpoint para trazer os dados consolidados da collection do MongoDB.
A API possui 2 endpoints com 2 métodos pra cada(GET e POST), descritos abaixo:
- Method: GET
- Endpoint:
http://localhost/deals
- Function: Busca na API do Bling e retorna todas os pedidos de venda cadastrados.
A resposta dessa requisição é devolvida com a seguinte estrutura:
[
{
"pedido": {
"desconto": "0,00",
"observacoes": "",
"observacaointerna": "",
"data": "2020-06-29",
"numero": "22",
"numeroOrdemCompra": "",
"vendedor": "",
"valorfrete": "0.00",
"totalprodutos": "13750.00",
"totalvenda": "13750.00",
"situacao": "Em aberto",
"tipoIntegracao": "Api",
"cliente": {
"id": "8630135825",
"nome": "Organization 2",
"cnpj": "",
"ie": null,
"rg": "",
"endereco": "",
"numero": "",
"complemento": "",
"cidade": "",
"bairro": "",
"cep": "",
"uf": "",
"email": "",
"celular": "",
"fone": ""
},
"itens": [
{
"item": {
"codigo": null,
"descricao": "Celular Xiaomi",
"quantidade": "10.0000",
"valorunidade": "1000.0000000000",
"precocusto": null,
"descontoItem": "0.00",
"un": "Un",
"pesoBruto": null,
"largura": null,
"altura": null,
"profundidade": null,
"descricaoDetalhada": "",
"unidadeMedida": "m",
"gtin": null
}
},
{
"item": {
"codigo": null,
"descricao": "Câmera GoPro",
"quantidade": "5.0000",
"valorunidade": "750.0000000000",
"precocusto": null,
"descontoItem": "0.00",
"un": "Un",
"pesoBruto": null,
"largura": null,
"altura": null,
"profundidade": null,
"descricaoDetalhada": "",
"unidadeMedida": "m",
"gtin": null
}
}
],
"parcelas": [
{
"parcela": {
"idLancamento": 0,
"valor": "13750.00",
"dataVencimento": "2009-09-01 00:00:00",
"obs": "",
"destino": 1,
"forma_pagamento": {
"id": 1073121,
"descricao": "Conta a receber/pagar",
"codigoFiscal": 15
}
}
}
]
}
},
]
- Method: POST
- Endpoint:
http://localhost/deals
- Function: Acessa a API do Bling e insere novos pedidos na plataforma de acordo com os dados vindos do Pipedrive.
A resposta dessa requisição será { "message": "pedidos adicionados" }
se os pedidos forem adicionados com sucesso no Bling e uma mensagem de erro caso contrário.
- Method: GET
- Endpoint:
http://localhost/mongo
- Function: Busca todas as oportunidades cadastradas no banco de dados Mongo.
A resposta dessa requisição é devolvida com a seguinte estrutura:
[
{
"_id": "5efb35deb671fa2be8a1d790",
"client": "Organization 2",
"date": "2020-06-29T00:00:00.000Z",
"total_value": 13750,
"createdAt": "2020-06-30T12:53:50.591Z",
"__v": 0
},
{
"_id": "5efb35deb671fa2be8a1d791",
"client": "Organization 1",
"date": "2020-06-29T00:00:00.000Z",
"total_value": 13500,
"createdAt": "2020-06-30T12:53:50.594Z",
"__v": 0
}
]
- Method: POST
- Endpoint:
http://localhost/mongo
- Function: Insere novas oportunidades no banco de dados Mongo de acordo com o retorno da busca na API do Bling.
A resposta dessa requisição é devolvida com a seguinte estrutura:
{
"status": "success",
"message": "Oportunidades inseridas no banco de dados."
}
ou
{
"status": "success",
"message": "Nenhuma oportunidade nova no Bling"
}
As variáveis de ambiente e configuração estão presentes no arquivo ".env" na raiz do projeto.
VARIÁVEIS
-
API_KEY_PIPEDRIVE
: é a sua chave de API para poder acessar a API do Pipedrive. Entre no site, cadastre-se e lá você deve gerar essa chave. Com ela em mãos, é só informar neste campo no arquivo ".env". -
BASE_URL_PIPEDRIVE
: é a URL base da API do Pipedrive para buscar oportunidades. -
API_KEY_BLING
: é a sua chave de API para poder acessar a API do Bling. Entre no site, cadastre-se e lá você deve gerar essa chave. Com ela em mãos, é só informar neste campo no arquivo ".env". -
BASE_URL_GET_BLING
: é a URL base da API do Bling para buscar os pedidos. -
BASE_URL_POST_BLING
: é a URL base da API do Bling para a API inserir pedidos.
OBS!!!
: Para rodar a aplicação na sua máquina, garanta que tenha instalados na mesma o Docker e Docker Compose.
A aplicação rodará na porta 3333 e o banco de dados Mongo na porta 27017.
- Clone/Baixe este repositório na sua máquina;
- Abrir o terminal na raiz da pasta e rodar "docker-compose up --build" para criar o contâiner do projeto;
- Pronto, seu servidor backend está no ar e pronto pra ser acessado no endereço "http://localhost:3333".
Utilize os endpoints informados acima para fazer as operações.
NodeJS
TypeScript
Express
Eslint
Prettier
Mocha
Chai
Instanbul
Axios
Docker
MongoDB
URL Encode