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:

  1. Manual - Para publicaciones creadas manualmente por los usuarios.
  2. AutoGenerated - Para publicaciones generadas automáticamente por procesos del sistema.
  3. 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

Gerardo Ruiz

Gerardo Ruiz

Author

Share: