# Definições, serviços e tabelas da base de dados do OpenPlatform

> As chaves de configuração que o OpenPlatform lê, o que fazem os seus serviços em segundo plano e para que serve cada tabela do esquema op.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: pt
Content-SHA256: 1a21511bb39748c89c87fe97fcb51175bc001681302098b28cc983735efc1974
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

## As definições

O OpenPlatform guarda a sua configuração na tabela `cl_config` e carrega-a no `CONF` do Total.js ao arrancar e a cada oito horas (`definitions/init.js`). O ecrã de configuração lê e guarda estas chaves (`plugins/setup/schemas/settings.js`):

| Chave | Significado |
|---|---|
| `name`, `icon`, `color` | o nome, o logótipo e a cor da plataforma |
| `url` | o endereço público da plataforma (sem a `/` final). Alterá-lo limpa as ligações de notificação e as sessões de aplicação abertas |
| `language` | o idioma predefinido |
| `mail_smtp`, `mail_smtp_options`, `mail_from` | o servidor SMTP, as suas opções (JSON) e o remetente; o ecrã de configuração pode testá-los |
| `$tms`, `secret_tms` | publicar os eventos por TMS, e o segredo dessa ligação |
| `allow_token`, `token` | ativar a API pública `GET /users/` e o seu token |
| `newtab` | abrir cada aplicação num novo separador |
| `sync`, `sync_token` | aceitar o socket `/sync/` de outras instâncias, com o seu token |

O primeiro arranque (`database.sql`) também gera, dentro de `cl_config`, valores que o ecrã de configuração não edita: o `id` da instalação, o `secret` de autenticação, o nome do `cookie`, o `salt` das palavras-passe, o `saltchecksum` das somas de verificação e o segredo da ligação TMS. Cria as chaves com estes valores predefinidos:

| Chave | Predefinição | Significado |
|---|---|---|
| `auth_cookie_expire` | `1 month` | quanto tempo vive o cookie de sessão |
| `auth_expire` | `5 minutes` | quanto tempo o utilizador com sessão iniciada é mantido em memória antes de ser lido de novo |
| `auth_cookie_options` | `{"httponly":true,"security":"lax"}` | as opções do cookie de sessão |
| `auth_strict` | `false` | sessões estritas |
| `app_session_expire` | `1 day` | quanto dura uma sessão de aplicação |
| `cdn` | `https://cdn.componentator.com/` | a CDN da interface |
| `language` | `eu` | o idioma predefinido |
| `token`, `sync_token` | gerado | o token da API de utilizadores e do socket de sincronização (ambas as funcionalidades estão desligadas por predefinição) |

A chave `servicetoken`, que o endpoint de carregamento de imagens compara com o seu token de consulta, **não** é criada pelo script e o ecrã de configuração não a edita: só existe se a acrescentar você mesmo a `cl_config`.

O script cria também o grupo **Admin** e o primeiro utilizador (`info@totaljs.com`, administrador, confirmado) que lhe pertence; veja [instalá-lo](/en/openplatform/install-openplatform/).

## Os serviços em segundo plano

O Total.js executa um serviço a cada minuto. O OpenPlatform usa-o (`definitions/init.js`) para:

- limpar a cache em memória das verificações (a cada 2 minutos);
- guardar as estatísticas diárias: utilizadores online, o máximo e o número por dispositivo (a cada 3 minutos);
- recarregar a configuração a partir da base de dados (a cada 8 horas);
- apagar as sessões de aplicação e de plataforma expiradas (a cada 12 horas);
- enviar os resumos por e-mail das notificações por ler (a cada 11 minutos, quando o correio está configurado).

## A base de dados

Tudo vive no esquema PostgreSQL `op`:

| Tabela | O que contém |
|---|---|
| `cl_config` | a configuração (chave, valor, tipo) |
| `tbl_user` | os utilizadores: perfil, hash da palavra-passe, indicadores, contadores e as permissões em cache |
| `tbl_group` | os grupos |
| `tbl_user_group` | que utilizador pertence a que grupo |
| `tbl_session` | as sessões dos utilizadores no portal (dispositivo, endereço, validade) |
| `tbl_app` | as aplicações: endereço, segredos, indicadores e endereços permitidos |
| `tbl_app_permission` | as permissões que cada aplicação declara |
| `tbl_group_permission` | que permissões (ou apenas que aplicações) cada grupo concede |
| `tbl_app_session` | as sessões de lançamento das aplicações e os seus tokens derivados |
| `tbl_user_app` | por utilizador e aplicação: as ligações de notificação e se aceitam notificações |
| `tbl_notification` | as notificações |
| `tbl_visitor` | as estatísticas diárias de visitantes |
| `tbl_feedback` | os comentários que os utilizadores enviam a partir do portal |

Os ficheiros com data `database-2023-09-15.sql`, `database-2024-03-21.sql`, `database-2024-10-22.sql` e `database-2024-10-30.sql` do repositório são as alterações do esquema ao longo do tempo, e `database.sql` é o script completo que o primeiro arranque executa. Faça cópia de segurança deste esquema como de qualquer outra base de dados PostgreSQL.
