> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/docs.facephi-pt-br/sdks/backend-sdk/backend1n/release_notes/4.5.0_release_notes.md).

# 4.5.0

Nesta versão, foi adicionado suporte para bancos de dados PostgreSQL. Também foi adicionada autenticação JWT opcional, configurável a partir de `config.json` ou por meio de variáveis de ambiente `FACEPHI_BACKEND1N_REST_*`.

**Não há mudanças de contrato** nos endpoints. O suporte anterior ao MongoDB também não foi alterado. A decisão sobre qual tecnologia de BD o serviço usará será tomada na inicialização do serviço, a partir da string de conexão:

```bash
# Prefixos aceitos do MongoDB.
# mongodb://
# mongodb+srv://
export DATABASE_CONNECT_STRING=mongodb://user:pass@localhost:32902/?directConnection=true&serverSelectionTimeoutMS=5000

# Prefixos aceitos do PostgreSQL.
# postgres://
# postgresql://
export DATABASE_CONNECT_STRING=postgresql://user:pass@localhost:32903/db_backend
```

## Sobre os bancos de dados

No caso do MongoDB, o próprio serviço criará um banco de dados denominado `db-backend`, se ainda não existir. Nela serão armazenadas duas coleções:

* `media` para armazenar imagens.
* `patterns` para armazenar padrões biométricos.

O caso do PostgreSQL difere ligeiramente. Um banco de dados com o nome `db_backend` deve ter sido criada previamente pelo administrador do sistema. O PostgreSQL dificulta a criação de bancos de dados a partir do próprio cliente. Um exemplo dos comandos prévios que o administrador deveria executar seria:

```bash
sudo -u postgres psql -c "CREATE ROLE backend1n WITH LOGIN PASSWORD 'backend1n';"
sudo -u postgres psql -c "CREATE DATABASE db_backend OWNER backend1n;"
sudo -u postgres psql -d db_backend -c "GRANT ALL ON SCHEMA public TO backend1n;"
```

Dentro da BD PostgreSQL, o serviço criará duas tabelas, assim como acontecia com MongoDB:

* `media` para armazenar imagens.
* `patterns` para armazenar padrões biométricos.

> **Importante:** As strings de conexão devem incluir as informações de usuário/senha ou qualquer informação adicional que permita ao serviço acesso com permissões de leitura/escrita.

## Adicionado

* Autenticação JWT opcional, configurável a partir de `config.json` ou por meio de variáveis de ambiente `FACEPHI_BACKEND1N_REST_*`.
* Suporte para bancos de dados `PostgreSQL`.
* Cobertura de testes de integração para endpoints públicos e protegidos quando a autenticação JWT está habilitada.
* Cobertura de testes de integração para os backends MongoDB e PostgreSQL.
