fix: agregar atributo requerido 'tipo' en posts

- Añade campo 'tipo' al SCHEMA_MAP de posts (whitelist de extractCleanData)
- Agrega selector 'Tipo de Contenido' en PublicationLayout (Noticia/Evento/Aviso/Clasificado/Blog)
- Agrega fallback server-side en entities.ts: si 'tipo' no llega, se asigna 'noticia' por defecto
- Soluciona AppwriteException: Missing required attribute 'tipo' al crear publicaciones
This commit is contained in:
Carlos (Almeira) 2026-06-20 22:04:46 -05:00
parent 7e41c48dc1
commit 155546f90e
3 changed files with 27 additions and 0 deletions

View File

@ -57,6 +57,16 @@ function extractCleanData(entity: string, formData: FormData): Record<string, an
data[key] = strVal;
}
// Asegurar atributo requerido "tipo" para la colección media
if (entity === 'media' && !data.tipo) {
data.tipo = 'imagen';
}
// Asegurar atributo requerido "tipo" para la colección posts
if (entity === 'posts' && !data.tipo) {
data.tipo = 'noticia';
}
return data;
}

View File

@ -382,6 +382,22 @@ export const PublicationLayout: React.FC<PublicationLayoutProps> = ({
required
/>
{/* Tipo de Contenido */}
<FieldWrapper label="Tipo de Contenido" required error={validationErrors.tipo}>
<select
name="tipo"
defaultValue={initialData?.tipo || 'noticia'}
required
className={inputClass}
>
<option value="noticia">Noticia</option>
<option value="evento">Evento</option>
<option value="aviso">Aviso</option>
<option value="clasificado">Clasificado</option>
<option value="blog">Blog</option>
</select>
</FieldWrapper>
{/* Estado */}
<FieldWrapper label="Estado" required error={validationErrors.estado}>
<select

View File

@ -16,6 +16,7 @@ export const SCHEMA_MAP: Record<string, FieldDefinition[]> = {
posts: [
{ name: 'titulo', label: 'Título', type: 'text', required: true, section: 'Datos Básicos', gridSize: 12 },
{ name: 'slug', label: 'URL Amigable (Slug)', type: 'text', required: true, section: 'Metadatos', gridSize: 6 },
{ name: 'tipo', label: 'Tipo', type: 'select', options: ['noticia', 'evento', 'aviso', 'clasificado', 'blog'], required: true, section: 'Metadatos', gridSize: 6 },
{ name: 'tipo_publicacion_id', label: 'Tipo de Publicación', type: 'relation', relationCollection: 'publication_types', relationLabel: 'descripcion', required: true, section: 'Metadatos', gridSize: 6 },
{ name: 'estado', label: 'Estado', type: 'select', options: ['borrador', 'pendiente', 'publicado', 'archivado'], required: true, section: 'Configuración', gridSize: 4 },
{ name: 'fecha_publicacion', label: 'Fecha de Publicación', type: 'date', required: true, section: 'Configuración', gridSize: 4 },