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.