# Ajustes, servicios y tablas de base de datos de OpenPlatform

> Las claves de configuración que lee OpenPlatform, qué hacen sus servicios en segundo plano y para qué sirve cada tabla del esquema op.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: es
Content-SHA256: fa8e7003fe642c7820e81c68277a8544b0bd58a5efef810de86e0597cfd94179
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

## Los ajustes

OpenPlatform guarda su configuración en la tabla `cl_config` y la carga en el `CONF` de Total.js al arrancar y cada ocho horas (`definitions/init.js`). La pantalla de configuración lee y guarda estas claves (`plugins/setup/schemas/settings.js`):

| Clave | Significado |
|---|---|
| `name`, `icon`, `color` | el nombre, el logo y el color de la plataforma |
| `url` | la dirección pública de la plataforma (sin la `/` final). Cambiarla borra los enlaces de notificación y las sesiones de aplicación abiertas |
| `language` | el idioma por defecto |
| `mail_smtp`, `mail_smtp_options`, `mail_from` | el servidor SMTP, sus opciones (JSON) y el remitente; la pantalla de configuración puede probarlos |
| `$tms`, `secret_tms` | publicar los eventos por TMS y el secreto de esa conexión |
| `allow_token`, `token` | activar la API pública `GET /users/` y su token |
| `newtab` | abrir cada aplicación en una pestaña nueva |
| `sync`, `sync_token` | aceptar el socket `/sync/` de otras instancias, con su token |

El primer arranque (`database.sql`) también genera, dentro de `cl_config`, valores que la pantalla de configuración no edita: el `id` de la instalación, el `secret` de autenticación, el nombre de la `cookie`, la `salt` de las contraseñas, la `saltchecksum` de las sumas de comprobación y el secreto de la conexión TMS. Crea las claves con estos valores por defecto:

| Clave | Por defecto | Significado |
|---|---|---|
| `auth_cookie_expire` | `1 month` | cuánto vive la cookie de sesión |
| `auth_expire` | `5 minutes` | cuánto tiempo se mantiene en memoria el usuario con sesión antes de volver a leerlo |
| `auth_cookie_options` | `{"httponly":true,"security":"lax"}` | las opciones de la cookie de sesión |
| `auth_strict` | `false` | sesiones estrictas |
| `app_session_expire` | `1 day` | cuánto dura una sesión de aplicación |
| `cdn` | `https://cdn.componentator.com/` | la CDN de la interfaz |
| `language` | `eu` | el idioma por defecto |
| `token`, `sync_token` | generado | el token de la API de usuarios y del socket de sincronización (ambas funciones están desactivadas por defecto) |

La clave `servicetoken`, que el endpoint de subida de imágenes compara con su token de consulta, **no** la crea el script y la pantalla de configuración no la edita: existe solo si la añades tú mismo a `cl_config`.

El script también crea el grupo **Admin** y el primer usuario (`info@totaljs.com`, administrador, confirmado) que pertenece a él; consulta [instalarlo](/en/openplatform/install-openplatform/).

## Los servicios en segundo plano

Total.js ejecuta un servicio cada minuto. OpenPlatform lo usa (`definitions/init.js`) para:

- vaciar la caché en memoria de las verificaciones (cada 2 minutos);
- guardar las estadísticas diarias: usuarios en línea, el máximo y el número por dispositivo (cada 3 minutos);
- recargar la configuración desde la base de datos (cada 8 horas);
- borrar las sesiones de aplicación y de plataforma caducadas (cada 12 horas);
- enviar los resúmenes por correo de las notificaciones sin leer (cada 11 minutos, cuando el correo está configurado).

## La base de datos

Todo vive en el esquema `op` de PostgreSQL:

| Tabla | Qué contiene |
|---|---|
| `cl_config` | la configuración (clave, valor, tipo) |
| `tbl_user` | los usuarios: perfil, hash de la contraseña, banderas, contadores y los permisos en caché |
| `tbl_group` | los grupos |
| `tbl_user_group` | qué usuario pertenece a qué grupo |
| `tbl_session` | las sesiones de los usuarios en el portal (dispositivo, dirección, caducidad) |
| `tbl_app` | las aplicaciones: dirección, secretos, banderas y direcciones permitidas |
| `tbl_app_permission` | los permisos que declara cada aplicación |
| `tbl_group_permission` | qué permisos (o solo qué aplicaciones) concede cada grupo |
| `tbl_app_session` | las sesiones de lanzamiento de las aplicaciones y sus tokens derivados |
| `tbl_user_app` | por usuario y aplicación: los enlaces de notificación y si aceptan notificaciones |
| `tbl_notification` | las notificaciones |
| `tbl_visitor` | las estadísticas diarias de visitantes |
| `tbl_feedback` | los comentarios que los usuarios envían desde el portal |

Los archivos con fecha `database-2023-09-15.sql`, `database-2024-03-21.sql`, `database-2024-10-22.sql` y `database-2024-10-30.sql` del repositorio son los cambios del esquema a lo largo del tiempo, y `database.sql` es el script completo que ejecuta el primer arranque. Haz copia de seguridad de este esquema como de cualquier otra base de datos PostgreSQL.
