Saltar al contenido principal

Publicaciones Guardadas y Colecciones — Referencia Técnica

← Volver a Publicaciones Guardadas y Colecciones

Dónde vive esto

Backend

Frontend

Checklist de implementación técnica

  • savePost / unsavePost — resolvers conectados; el ícono de marcador de PostCard.tsx es un interruptor realmente funcional
  • myCollections / collectionPosts — conectadas; utilizadas por SavedCollectionsSection.tsx bajo la pestaña Guardado. Ya no existe una query que devuelva todas las colecciones a la vez (mySavedPosts fue eliminada); la interfaz profundiza en una colección a la vez.
  • createCollection / deleteCollection — conectadas; utilizadas por SavedCollectionsSection.tsx / SaveToCollectionModal.tsx
  • updateCollection (renombrar) — conectada; handleRename de SavedCollectionsSection.tsx la llama desde la vista de detalle de la colección
  • toggleCollectionPrivacy — conectada; handleTogglePrivacy de SavedCollectionsSection.tsx (la etiqueta Pública/Privada en la vista de detalle de la colección)
  • movePostToCollection — conectada; handleMovePost de SavedCollectionsSection.tsx (pasar el cursor sobre una publicación → "Mover" → elegir destino)
  • publicCollections — conectada; DiscoverCollectionsPage.tsx en /settings/discover-collections

Colecciones (SavedCollection)

CampoDescripción
nameNombre de la colección
descriptionDescripción opcional
isPublicVisible para otros usuarios
isDefaultColección "Guardado" creada automáticamente que recibe cada usuario en su primer guardado. deleteCollection rechaza eliminarla (aplicado en el backend); SavedCollectionsSection.tsx también oculta los controles de renombrar/privacidad/eliminar para ella en la interfaz. El frontend la muestra bajo una etiqueta localizada (collections.defaultName) en lugar de su name original
postCountNúmero de publicaciones guardadas

myCollections devuelve todas las colecciones propiedad del usuario autenticado, incluyendo postCount para renderizar el conteo de miniaturas de la cuadrícula. También crea de forma diferida la colección predeterminada del usuario primero, de modo que siempre esté presente incluso antes de su primer guardado. publicCollections devuelve un feed navegable de colecciones públicas de cualquier usuario.

createCollection crea una nueva colección con nombre. updateCollection cambia el nombre o la descripción. deleteCollection la elimina y deja de guardar todas las publicaciones dentro de ella (las publicaciones no se eliminan); rechaza eliminar la colección predeterminada (isDefault). toggleCollectionPrivacy alterna entre pública y privada en una sola llamada.

query MyCollections { myCollections { id name description isPublic isDefault postCount } }
query PublicCollections($limit: Int) { publicCollections(limit: $limit) { id name user { username } } }

mutation CreateCollection($input: SavedCollectionCreateInput!) { createCollection(input: $input) { id name } }
mutation UpdateCollection($collectionId: ID!, $input: SavedCollectionUpdateInput!) {
updateCollection(collectionId: $collectionId, input: $input) { id name }
}
mutation DeleteCollection($collectionId: ID!) { deleteCollection(collectionId: $collectionId) }
mutation ToggleCollectionPrivacy($collectionId: ID!) { toggleCollectionPrivacy(collectionId: $collectionId) { isPublic } }

Publicaciones guardadas (SavedPost)

collectionPosts devuelve las publicaciones guardadas de una colección específica (collectionId es obligatorio). Ya no existe una única query que devuelva las publicaciones guardadas de todas las colecciones a la vez — el frontend enumera las colecciones mediante myCollections y profundiza en una a través de collectionPosts por colección.

isPostSaved es una verificación booleana ligera — úsala para renderizar el estado del ícono de marcador en una tarjeta de publicación. savedPostsCount devuelve un solo entero para la fila de estadísticas del perfil.

savePost guarda una publicación, opcionalmente dentro de una colección. Si se omite collectionId: volver a guardar una publicación ya guardada la deja sin cambios en su colección actual, mientras que un guardado completamente nuevo se coloca en la colección predeterminada ("Guardado") creada automáticamente para el usuario — ya no existe un estado sin colección/"Sin clasificar". unsavePost la elimina de la colección en la que se encuentre. movePostToCollection cambia a qué colección pertenece una publicación previamente guardada.

query CollectionPosts($collectionId: ID!, $limit: Int, $offset: Int) {
collectionPosts(collectionId: $collectionId, limit: $limit, offset: $offset) {
id
post { id text media { mediaUrl } }
collection { name }
createdAt
}
}

query IsPostSaved($postId: ID!) { isPostSaved(postId: $postId) }
query SavedPostsCount { savedPostsCount }

mutation SavePost($postId: ID!, $collectionId: ID) { savePost(postId: $postId, collectionId: $collectionId) { id } }
mutation UnsavePost($postId: ID!) { unsavePost(postId: $postId) }
mutation MovePostToCollection($postId: ID!, $collectionId: ID!) {
movePostToCollection(postId: $postId, collectionId: $collectionId) { id collection { name } }
}

Flujo típico

  1. El usuario toca "Guardar" en una publicación
  2. SaveToCollectionModal se abre como un selector de colección (con la opción de crear una nueva colección al momento); la colección predeterminada "Guardado" del usuario es una de las opciones
  3. La publicación aparece en los resultados de collectionPosts de esa colección, visible bajo la pestaña Guardado de ProfilePage.tsx o en Settings → Saved
  4. Las colecciones públicas se pueden explorar mediante Settings → Discover collections, que enlaza cada resultado al perfil de su propietario