# Servidor REST utilizando node.js com suporte ao Firebird

## Log de anotações

Decidi começar os estudos com o framework Loopback devido a este artigo dos programadores do Loopback, tendencioso, eu sei (https://strongloop.com/strongblog/compare-express-restify-hapi-loopback/).

Eu estava pensando em começar com Express ou Restify, mas o Loopback me pareceu mais robusto e como mais opções. Com menos trabalho para definir os endpoints da API.

Fiz o tutorial do Getting Started do site do Loopback. Muito fácil. http://loopback.io/getting-started/

Vou procurar agora como conectar no firebird.

Aparentemente para utilizar bancos de dados não suportados o caminho é usar o loopback-datasource-juggler.
https://www.npmjs.com/package/loopback-datasource-juggler

E com ele o loopback-connector-firebird.
https://www.npmjs.com/package/loopback-connector-firebird

E não consegui fazer funcionar depois de algumas horas.

Não encontrei de forma clara como configurar um Model apontar para uma tabela para o Datasource que criei para o firebird.

Depois tentei apenas usar o node-firebird para ver se funcionava e acho que caí num bug que fecha o node ao tentar fazer um select nome from pessoa num dos bancos do Gestor que eu tenho local.

Acho que o primeiro passo é entender o node-firebird para depois tentar fazer ele funcionar dentro do Loopback.

Aparentemente para mysql o Loopback faz tudo automático, mas não tenho o mysql instalado agora.

Consegui fazer funcionar, reinstalando tudo com calma e na ordem certa.

É tudo case sensitive, então o nome do model precisa bater com o nome da tabela (perdi um tempão nisso).

O campo ID pode ser trocado o nome usando a propriedade correta na definição do model. Muito bom.

A definição dos atributos do model é um json bem simples. Fácil de ser gerado a partir do dicionário de dados.

Tudo funcionou. Exceto que o banco do Gestor precisa de login para funcionar a auditoria.

Creio que preciso criar um conector próprio do Gestor, utilizando o do firebird.

A ideia seria criar um pool por usuário logado.

E usar a authentication-key que veio no header do REST com o force login do Gestor.

Teria que mudar o force login pra usar uma authentication-key.

Teria que incluir no cadastro de usuário a authentication-key para comparar.

Ou criar o campo e deixar cada usuário se virar.

Ou criar uma forma de _liberar acesso pela REST API_ que descobre o authentication-key e armazena por conta.

## Passo a passo - Como fazer um exemplo

Comecei meu teste instalando o nodejs localmente.

```
choco install nodejs -y
```

Fecha e abre o powershell pra pegar o novo path.

```
npm install -g loopback-cli
```

Cria uma pasta para armazenar o projeto, de dentro dela utiliza o lb para criar um novo projeto loopback

```md d:\teste\loopbacktest\
set-location d:\teste\loopbacktest\
lb
```

Nome da aplicação respondi gestor.

Pasta só dei enter, ele assumiu gestor.

Versão usei a 3.x (current).

Tipo de aplicação empty-server.

```
cd gestor
lb model
```

Nome do modelo preenchi com PESSOA

Classe base PersistedModel

Expor como REST Yes

Plural customizado utilizei pessoa

Modelo comum

Incluí duas propriedades ID_PESSOA number e NOME string ambas obrigatórias.

Alterei a configuração do model manualmente para ligar o "Id": true na propriedade ID_PESSOA.

Também alterei manualmente pro PESSOA model usar o datasource firebird.

Para criar o datasource firebird usei os seguintes comandos na pasta gestor.

```
lb datasource
firebird
other
loopback-connector-firebird
instalar yes
```