# Sincronización ATC ↔ R2 ↔ Nextcloud ## Objetivo Sincronizar archivos seleccionados desde buckets R2 hacia Nextcloud DECK, permitiendo descarga selectiva en dispositivos locales (Mac). ## Arquitectura ``` ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ ┌─────────┐ │ R2/S3 │ │ Windmill │ │ Nextcloud │ │ Mac │ │ deck/ │────▶│ flow.tzzr │────▶│ /nextc_ │────▶│ Local │ │ personaldeck│ │ deck.me │ │ deck/sync │ │ Sync │ └─────────────┘ └──────────────┘ └─────────────┘ └─────────┘ │ ▼ ┌──────────────┐ │ PostgreSQL │ │ atc_status │ └──────────────┘ ``` ## Tablas PostgreSQL ### tzzr_storage.buckets Configuración de buckets R2. | bucket_mrf | name | endpoint | |------------|------|----------| | d83032... | deck | R2 Cloudflare | | c1b0e6... | personaldeck | R2 Cloudflare | ### tzzr_storage.atc Catálogo de archivos con metadata. | Campo | Descripción | |-------|-------------| | mrf | Hash único del archivo | | private_mrf | Hash privado | | bucket_mrf | FK a buckets | | roothash | Ruta/estructura del archivo (pendiente) | | ref | Tipo: img, doc, cad, etc. | ### tzzr_storage.atc_status Lista blanca de archivos a sincronizar. | Campo | Descripción | |-------|-------------| | mrf | FK a atc | | status | enable / disable / deleted | | bucket_mrf | FK a buckets | ## Flujo de Sincronización 1. Usuario marca archivo en `atc_status` con `status='enable'` 2. Windmill detecta cambio (trigger/schedule) 3. Script consulta archivos con `status='enable'` 4. Para cada archivo: - Obtiene ruta de `roothash` - Descarga de R2 a `/nextc_deck/sync/{ruta}/` 5. Nextcloud detecta archivos nuevos 6. Mac sincroniza via app Nextcloud ## Windmill - URL: `flow.tzzrdeck.me` - Puerto interno: 8100 - Propósito: Orquestación de workflows ## Pendiente - [ ] Definir formato de `roothash` - [ ] Crear workflow en Windmill - [ ] Configurar trigger (webhook vs schedule) - [ ] Implementar script de sync