Saltearse al contenido

Los datos

Trece tablas. El centro es items —el archivo— y todo lo demás cuelga de cuentas, que es lo que este sistema sabe hablar.

El diagrama

es origen de

es destino de

tiene permiso sobre

va por

origen

destino

tiene

se publica como

sale en

mide

mide

CUENTAS

uuid

id

PK

text

plataforma

instagram facebook mastodon linkedin web telegram rss

text

rol

lectura escritura ambos

text

handle

text

id_remoto

el id en SU red

bytea

credenciales_cifradas

AES-256-GCM

jsonb

config

grifo, via, instancia...

text

salud

ok sin_credenciales error_auth degradada

bool

activa_lectura

bool

activa_escritura

timestamptz

retirada_en

baja logica

ITEMS

uuid

id

PK

uuid

cuenta_origen_id

FK

text

id_remoto

text

permalink

obligatorio si regimen es sin permiso

text

caption

text_array

tags

text

autor

text

regimen

consentido | atribucion_sin_permiso

text

archivo_ruta

donde estan los bytes

bigint

archivo_bytes

text

archivo_estado

pendiente descargando listo fallido purgado sin_medios

timestamptz

publicado_en_origen

EMISIONES

uuid

id

PK

uuid

item_id

FK

uuid

cuenta_destino_id

FK

text

estado

int

ronda

text

aprobado_por

quien lo miro

timestamptz

aprobado_en

text

id_remoto_publicado

timestamptz

publicada_en

bool

detener

CONSENTIMIENTOS

uuid

id

PK

uuid

cuenta_id

FK

text

otorgado_por

una persona, con nombre

timestamptz

otorgado_en

timestamptz

revocado_en

text

alcance

uuid_array

cuentas_destino

por CUENTA, no por red

text

evidencia

CURSORES

uuid

cuenta_id

PK

text

tipo

poll | backfill

text

cursor

bool

agotado

RUTAS

uuid

id

PK

uuid

origen_id

FK

uuid

destino_id

FK

text

clave

UK

identidad estable e inmutable

jsonb

condicion

el filtro

bool

activa

bool

auto_publica

ITEM_MEDIOS

uuid

id

PK

uuid

item_id

FK

int

indice

text

archivo_ruta

text

archivo_sha256

text

archivo_estado

EMISION_PARTES

uuid

id

PK

uuid

emision_id

FK

int

indice

int

partes_total

numeric

desde_seg

numeric

hasta_seg

text

url_remota

METRICAS

uuid

id

PK

uuid

item_id

FK

uuid

emision_id

FK

text

lado

origen | destino

int

likes

int

alcance

Cuatro tablas más no cuelgan de nada y por eso quedan fuera del diagrama: ajustes (clave/valor, incluido el freno general), alertas (los avisos y si se entregaron), latidos (qué worker late y cuándo) y metricas_diarias (el resumen por día).

Las restricciones que son guardas

Estas no son validaciones de forma: son reglas del proyecto sostenidas por la base, donde no dependen de que un programador se acuerde.

RestricciónQué impide
items_atribucion_obligatoriaQue un ítem atribucion_sin_permiso exista sin enlace al original. La atribución no es una convención: es un CHECK.
items_regimen_checkUn régimen inventado. Sólo consentido o atribucion_sin_permiso.
cuentas_rol_plataforma_coherenteDeclarar que se publica en Instagram (no se puede) o que se lee de LinkedIn (no hay cliente). Espeja la tabla de plataformas del código.
consentimientos_destino_no_vacioUn permiso que nombra una lista vacía de destinos: se leería como «permiso otorgado» y no habilitaría nada.
rutas_clave_unica + trigger de inmutabilidadQue la identidad de un flujo cambie. Sin eso, cada renombre entraría como flujo nuevo al importar.
UNIQUE (item_id, cuenta_destino_id, ronda)Publicar dos veces lo mismo en el mismo destino. Es lo que hace idempotente a «diseminar».

¿Por qué cuentas_destino es un arreglo de UUID y no un texto con la red?

Porque el permiso es por cuenta, no por red. Con dos cuentas de Mastodon, un permiso de alcance mastodon habilitaba las dos, y no había forma de consentir una y no la otra. La versión anterior guardaba 'mastodon' y era exactamente esa la falla: más ancha que lo que la persona afirmó.

Por qué el archivo guarda bytes y no URLs

Guardar los bytes

post nuevo

se guarda la URL

se bajan los bytes AHORA

archivo_estado: listo

sirve para siempre,

y para republicar

Guardar sólo el enlace

post nuevo

se guarda la URL del CDN

a los 2 días: 403

archivo de links muertos

archivo_estado tiene seis valores y dos de ellos no sanan solos:

EstadoSignifica¿Se arregla solo?
pendienteTodavía no se bajóSí, el descargador lo toma
descargandoEn eso está
listoLos bytes están
sin_mediosUn post de sólo texto: no hay nada que bajar— (no es una falta)
fallidoLa bajada fallóNo. El descargador sólo toma pendiente/descargando
purgadoSe liberó el disco a propósitoNo. Hay que volver a traerlo

sin_medios existe para no mentir. Un post de texto no tiene archivo, y marcarlo pendiente lo dejaría para siempre en la cola del descargador, contando como trabajo que nunca se hace. No es una falta: es que no hay nada que faltar.