Implementación del Campo "generation_source" en Posts: Un Enfoque Estructurado
Introducción
Recientemente, hemos abordado la necesidad de identificar la fuente de generación de publicaciones en nuestra aplicación. Esto se volvió imprescindible para entender mejor la procedencia del contenido, ya sea manual, auto-generado o mediante un prompt. A continuación, exploraremos cómo se llevó a cabo esta implementación y las decisiones técnicas que se tomaron a lo largo del proceso.
Desarrollo
Para resolver este problema, se creó un nuevo campo en la base de datos llamado generation_source, que se asoció a la tabla de posts. Esto nos permitirá categorizar los posts según su fuente de generación. Presentamos un enum llamado PostGenerationSource que ofrece tres casos posibles:
- Manual - Para publicaciones creadas manualmente por los usuarios.
- AutoGenerated - Para publicaciones generadas automáticamente por procesos del sistema.
- Prompt - Para publicaciones generadas utilizando instrucciones específicas dadas por el usuario.
Este es el código del archivo PostGenerationSource.php donde implementamos el enum:
<?php
declare(strict_types=1);
namespace App\Enums;
use Filament\Support\Contracts\HasLabel;
enum PostGenerationSource: string implements HasLabel
{
case Manual = 'manual';
case AutoGenerated = 'auto_generated';
case Prompt = 'prompt';
public function getLabel(): string
{
return match ($this) {
self::Manual => __('post_generation_source.manual'),
self::AutoGenerated => __('post_generation_source.auto_generated'),
self::Prompt => __('post_generation_source.prompt'),
};
}
public function color(): string
{
return match ($this) {
self::Manual => 'primary',
self::AutoGenerated => 'success',
self::Prompt => 'warning',
};
}
}
Migración de Base de Datos
Se creó una migración para agregar el nuevo campo a la tabla de posts. Esto se realizó utilizando el siguiente código en el archivo de migración:
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->string('generation_source', 20)->nullable()->after('language');
});
}
public function down(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('generation_source');
});
}
};
Ajustes en Modelos y Recursos
Modificamos el modelo Post para incluir el nuevo campo generation_source y ajustamos los recursos para facilitar su uso en la interfaz. Aquí se muestra cómo se actualizaron las propiedades del modelo:
class Post extends TenantModel
{
// Otras propiedades...
* @property PostGenerationSource|null $generation_source
// Otras propiedades...
}
Adicionalmente, se realizó una actualización de las interfaces de administración de la aplicación para permitir la visualización y filtrado por este nuevo campo, asegurando que los administradores puedan gestionar eficazmente los posts según su origen.
Resultados
La implementación del campo generation_source ha permitido a los usuarios tener una mayor visibilidad sobre cómo se generó cada post. Esta información es crucial para determinar las mejores prácticas y métricas relacionadas con el contenido generado.
Estos cambios no solo mejoraron la categorización del contenido, sino que también facilitaron un mejor manejo de las publicaciones en el sistema, dejando claro el origen del contenido y permitiendo un mejor análisis posterior.
Lecciones Aprendidas
A lo largo de este proceso, se destacó la importancia de tener una estructura clara desde el inicio del proyecto. Cada elemento introducido, como el nuevo campo y las enums, ayuda a la aplicación a escalar y adaptarse a nuevas necesidades sin comprometer el rendimiento. La claridad en la categorización también proporciona una significativa ventaja en la gestión de contenido en el futuro.
Generated with Devlog.ist