[![](https://data.jsdelivr.com/v1/package/npm/@labtime/avamec-api-bridge-cliente/badge)](https://www.jsdelivr.com/package/npm/@labtime/avamec-api-bridge-cliente)

# Bridge REST API
Bridge REST API foi desenvolvida para fornecer uma interface de comunicação entre o módulo e a plataforma AVAMEC.

A API foi desenvolvida utilizando o [TypeScript](https://www.typescriptlang.org/) e o [Post Message](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) que permite a comunicação entre domínios diferentes de forma segura. 

# Diagrama de comunicação
![Diagrama](http://git.labtime.ufg.br/ava-secadi/api-cliente/raw/3e059b892b81564d2f529d5e9914502b5f44f7d4/diagram.png)

# Incluindo API no conteúdo
Esta API está sendo publicada diretamente no NPM.

Para utilizá-la, instale-a em seu projeto utilizando o npm:
```node
npm i @labtime/avamec-api-bridge-cliente
```
E inclua o arquivo .js em sua página:

```html
<script src="node_modules/@labtime/avamec-api-bridge-cliente/dist/bridge-rest-api.bundle.js"></script>
```

É possível também apontar diretamente para um CDN, no caso o [jsDelivr.net](jsDelivr.net)
```html
<script src="https://cdn.jsdelivr.net/npm/@labtime/avamec-api-bridge-cliente@latest/dist/bridge-rest-api.bundle.js"></script>
```                                                                                                                                          

# Instanciando objeto BridgeRestApi
Para utilizar os métodos da API é necessário instanciar um objeto conforme abaixo:
```javascript
var API = new BridgeRestApi();
```

# Obtendo e salvando informações
Para invocar algum método fornecido pela API, você deve utilizar a constante chamada 'API' e efetuar a chamada do método que deseja. Por exemplo:
```javascript
 onClick="API.salvarUltimaPaginaAcessada('http://labtime.ufg.br');"
```
Você pode consultar a tabela que descreve os métodos e informações disponibilizadas pela API.

# Obtendo retorno dos métodos
Todos os retornos das funções disponibilizadas pela API são obtidas através de eventos. Para obter o retorno é necessário criar um EventListener para escutar o evento de retorno de cada método invocado, por exemplo:

```javascript
 // Adicionando listener
window.addEventListener("evUltimaPaginaAcessada", receberEvUltimaPaginaAcessada, false);
function receberEvUltimaPaginaAcessada(evento){
	console.log(evento.detail);
}
```
Você pode obter as informações de resposta dentro do atributo **detail** do evento. É retornado um json, no qual possui a seguinte estrutura:

**status**
O status de retorno da requisição poderá ter o valor 200 que indica sucesso, 412 que indica falha na pré condição, ou 500 caso haja erro interno no servidor.

**data**
A data é o valor de retorno, por exemplo se for solicitado a última página acessada salva no servidor, será retornado uma string referenciando a URL.

Você pode consultar a tabela de métodos que descreve os eventos de retorno de cada método.

# Métodos
| Nome |  Parâmetros | Evento de Retorno|Descrição |
| ------ | ------ | ------ | ------ |
| obterDadosCurso() |  | evObtemDadosCurso | Obtem informações do curso |
| registrarDadosGenericos(chave, valor) | chave, valor | evObtemRegistraDadosGenericos | |
| obterDadosGenericos(chave)| chave | evObtemDadosGenericos | |
| registrarUltimaPaginaAcessada(identificadorUnidade, urlUltimaPaginaAcessada) | identificadorUnidade, URLAcessada (opcional) | evObtemRegistraUltimaPaginaAcessada | |
| obterUltimaPaginaAcessada() |  | evObtemUltimaPaginaAcessada | |
| obterConfiguracaoConclusaoUnidade(identificadorUnidade) | identificadorUnidade | evObtemDadosConfiguracaoConclusaoUnidade | |
| obterSeExisteProximaUnidade(identificadorUnidade) | identificadorUnidade | evObtemSeExisteProximaUnidade | |
| obterSeExisteUnidadeAnterior(identificadorUnidade) | identificadorUnidade | evObtemSeExisteUnidadeAnterior | |
| obterProximaUnidade(identificadorUnidade) | identificadorUnidade | evObtemProximaUnidade | |
| obterUnidadeAnterior(identificadorUnidade) | identificadorUnidade | evObtemUnidadeAnterior | |
| obterUnidade(identificadorUnidade) | identificadorUnidade | evObtemUnidade | Obtem unidade a ser navegada. |
| obterTipoAcessoUnidade(identificadorUnidade) | identificadorUnidade | evObtemTipoAcessoUnidade | Obter tipo de acesso do cursista à unidade. |
| registrarPorcentagemConclusaoUnidade(identificadorUnidade, porcentagem)| identificadorUnidade, porcentagem | evRegistraPorcentagemConclusaoUnidade | |
| obterPorcentagemConclusaoUnidade(identificadorUnidade) | identificadorUnidade | evObtemPorcentagemConclusaoUnidade | Obtem informações de conclusão da unidade |
| obterConfiguracaoAtividade(identificadorAtividade) | identificadorAtividade | evObtemConfiguracaoAtividade | |
| registrarRespostaAtividade(atividade) | atividade | evRegistraRespostaAtividade | |
| registrarRespostaAtividadeArquivo(identificadorAtividade, file) | identificadorAtividade, file | evObtemDadosRespostaAtividadeArquivo | |
| obterRespostaAtividade(identificadorAtividade)| identificadorAtividade | evObtemDadosRespostaAtividade | |
| obterComentariosAtividade(identificadorUnidade) | identificadorUnidade | evObtemComentariosAtividade | |
| obterDadosConclusaoUnidade(identificadorUnidade) | identificadorUnidade | evObtemDadosConclusaoUnidade | |
| obterDadosConclusaoCurso() |  | evObtemDadosDadosConclusaoCurso | |
| obterStatusContraste() |  | evObtemStatusContraste | |
| obterTamanhoFonteSistema() |  | evObtemTamanhoFonteSistema | Obtem tamanho da fonte atual do sistema. |
| obterAncoraIrParaConteudo() |  | evObtemAncoraIrParaConteudo | Obtem evento para ir para ancora do conteúdo. |
| obterIdentificadorUsuarioLogado() |  | evObtemIdentificadorUsuarioLogado | Obtém identificador criptografado do usuário autenticado. |
