Saltar a contenido

RF-002 — Sliders: carruseles con slides programables

Estado Implementado, con el filtrado de vigencia no conectado
Tipo Colección propia
Ubicación src/collections/Sliders.ts · slug sliders · src/collections/Sliders/hooks/filterSlides.ts
Depende de RF-000 · destinos — RF-005 · medios — RF-006

Requisito

Administrar carruseles completos como entidad propia, identificados por una clave estable con la que el storefront los solicita; permitir cargar cada slide con imagen de escritorio y móvil, duración en pantalla, destino, botón opcional y ventana de vigencia propia; y programar campañas cargando los slides con anticipación, sin intervención en la fecha de inicio.

Solución adoptada

Modelar el slider como colección de lectura pública con un arreglo de slides embebido. La identificación por key única desacopla al storefront del identificador interno: el consumidor pide home-hero, no un id de base de datos.

flowchart LR
    SF([Storefront]) -->|key: home-hero| S[(sliders)]
    S --> A[slides · arreglo ordenado]
    A --> I[imagen escritorio + móvil]
    A --> D[duración en segundos]
    A --> L[destino y botón]
    A --> V[publishFrom · publishUntil · enabled]
    V -.filtrado previsto<br/>hoy no aplicado en el CMS.-> SF

Modelo de datos

Slider

Campo Tipo Regla
name texto Requerido. Nombre interno, título en el panel
key texto Requerido y único. Identificador de consulta del storefront
description textarea Descripción interna, sin uso público
slides arreglo Mínimo un slide, con etiqueta de fila propia en el panel

Slide

Campo Tipo Regla
enabled checkbox Verdadero por defecto
duration número Segundos en pantalla; 5 por defecto
title texto Requerido
image · mobileImage upload → media Escritorio requerida, móvil opcional
linkConfig grupo Destino principal del slide
primaryCTA grupo Botón opcional: solo texto, solo imagen, o texto e imagen
publishFrom · publishUntil fecha Ventana de vigencia del slide
tags texto Etiquetas separadas por coma, de uso interno
primaryLink grupo [Obsoleto] — oculto, reemplazado por linkConfig

Reglas de negocio

  • Exponer la colección con lectura pública y reservar la escritura al panel.
  • Garantizar la unicidad de la clave: dos sliders no pueden compartir identificador.
  • Definir la vigencia por slide y no por slider, para renovar una campaña sin duplicar el carrusel.
  • Ordenar la exhibición por el orden del arreglo, administrado por arrastre en el panel.

Criterios de aceptación

# Criterio
1 Recuperar un slider por su clave sin autenticación y obtener sus slides ordenados
2 Rechazar el alta de un segundo slider con la misma clave
3 Cargar un slide con imagen móvil y duración propias, y recibirlos en la respuesta
4 Programar un slide con ventana de vigencia futura sin alterar el carrusel activo
5 Exhibir únicamente los slides habilitados y dentro de su ventana — no verificable hoy en el CMS, ver limitaciones

Limitaciones conocidas

  • El filtrado de vigencia está escrito y no conectado. El hook filterActiveSlides —afterRead, con exclusión por enabled, publishFrom y publishUntil, y desactivación por el parámetro filterActive=false— existe, pero la colección no lo importa ni declara hooks. La API devuelve hoy todos los slides y el cumplimiento de la ventana queda a cargo del storefront. Corresponde conectarlo o eliminar el archivo; mientras tanto, el criterio 5 depende del consumidor.
  • Duplicar la definición de enlace: el slide declara su grupo de destino en línea en lugar de reutilizar el campo compartido, lo que explica parte de la divergencia descrita en RF-005.