| Campo | Valor |
|---|
| Handler | admin/handlers/pages.go |
| Ruta base | /admin/pages |
| Modelo | content_pages, blog_posts |
| Estado | Implementado |
Descripción
El módulo CMS permite gestionar páginas de contenido estático y publicaciones de blog dentro del panel de administración. Soporta dos pestañas: Páginas y Blog, con CRUD completo, borradores, y programación de publicación.
Endpoints
Páginas
| Método | Ruta | Acción |
|---|
| GET | /admin/pages | Listar páginas (tab=pages) |
| GET | /admin/pages/new | Formulario de nueva página |
| POST | /admin/pages | Crear página |
| GET | /admin/pages/:id | Editar página |
| PUT | /admin/pages/:id | Actualizar página |
| DELETE | /admin/pages/:id | Eliminar página (soft delete) |
| POST | /admin/pages/:id/publish | Publicar borrador |
| POST | /admin/pages/:id/unpublish | Despublicar |
Blog
| Método | Ruta | Acción |
|---|
| GET | /admin/pages?tab=blog | Listar posts |
| GET | /admin/pages/blog/new | Formulario de nuevo post |
| POST | /admin/pages/blog | Crear post |
| GET | /admin/pages/blog/:id | Editar post |
| PUT | /admin/pages/blog/:id | Actualizar post |
| DELETE | /admin/pages/blog/:id | Eliminar post |
| POST | /admin/pages/blog/:id/publish | Publicar post |
| POST | /admin/pages/blog/:id/schedule | Programar publicación |
Campos
ContentPage
| Campo | Tipo | Descripción |
|---|
id | UUID | Identificador único |
title | string | Título de la página |
slug | string | URL slug (auto-generado del título) |
body_html | text | Contenido HTML |
status | enum | draft, published |
author | string | Email del autor |
menu_order | int | Orden en menús |
meta_title | string | SEO title |
meta_description | string | SEO description |
created_at | timestamp | Fecha de creación |
updated_at | timestamp | Última actualización |
deleted_at | timestamp | Soft delete |
BlogPost
| Campo | Tipo | Descripción |
|---|
id | UUID | Identificador único |
title | string | Título del post |
slug | string | URL slug |
body_html | text | Contenido HTML |
excerpt | string | Extracto para listados |
cover_image_url | string | Imagen de portada |
tags | string[] | Etiquetas del post |
status | enum | draft, published, scheduled |
author | string | Email del autor |
published_at | timestamp | Fecha de publicación |
created_at | timestamp | Fecha de creación |
updated_at | timestamp | Última actualización |
Notas
- Las páginas se ordenan por
menu_order ASC, updated_at DESC
- Los slugs se auto-generan del título si no se proporcionan
- El soft delete usa
deleted_at para evitar perder contenido
- Los tags del blog se parsean de string separado por comas
- La programación de posts usa
published_at para publicación futura