PHP JavaScript

Limpieza de trabajos en cola y widget de IU para Devlog-ist/landing

Introducción

En el proyecto Devlog-ist/landing, que se centra en [Descripción del proyecto, si estuviera disponible], se ha implementado una mejora significativa en la gestión de trabajos en cola y la experiencia del usuario. Esta actualización aborda la necesidad de una limpieza más eficiente de los trabajos en cola y proporciona una interfaz de usuario intuitiva para monitorizar y cancelar estos trabajos.

El Problema

Anteriormente, la gestión de trabajos en cola, especialmente aquellos relacionados con integraciones de terceros como LinkedIn y GitHub, carecía de la centralización y el control necesarios. Esto conducía a:

  1. Acumulación de trabajos obsoletos tras la desconexión de integraciones.
  2. Falta de visibilidad sobre el estado de los trabajos en cola.
  3. Dificultad para cancelar trabajos pendientes, lo que podía resultar en operaciones innecesarias.

La Solución: Servicio centralizado y Widget de Filament

Para abordar estos problemas, se implementaron las siguientes soluciones:

  1. Extracción del servicio QueuedJobService: Se extrajo la lógica de limpieza de trabajos del AccountDeletionService a un servicio centralizado, QueuedJobService. Esto permite una gestión más cohesiva y reutilizable de los trabajos en cola en toda la aplicación.
  2. Cancelación de trabajos al desconectar integraciones: Ahora, cuando un usuario desconecta sus integraciones de LinkedIn o GitHub, los trabajos en cola asociados se cancelan automáticamente. En el caso específico de LinkedIn, los ScheduledPosts pendientes también se marcan como fallidos.
  3. Widget de Filament para la IU: Se añadió un widget de pie de página en la lista de publicaciones de Filament que muestra los trabajos en cola, proporcionando una interfaz para visualizar y cancelar estos trabajos directamente desde la IU.

Aquí hay un ejemplo ilustrativo de cómo podría ser la cancelación de un trabajo en cola:

use App\Services\QueuedJobService;

class AccountController extends Controller
{
    public function disconnectLinkedIn(QueuedJobService $queuedJobService)
    {
        // Lógica para desconectar la cuenta de LinkedIn
        $queuedJobService->cancelJobs('linkedin', auth()->user());

        return redirect('/profile')->with('success', 'LinkedIn desconectado.');
    }
}

En este ejemplo, al desconectar la cuenta de LinkedIn, se utiliza el QueuedJobService para cancelar todos los trabajos asociados con el usuario actual y la integración de LinkedIn.

Resultados

Con esta implementación, se espera:

  • Una reducción significativa en la acumulación de trabajos en cola innecesarios.
  • Una mayor claridad y control sobre los trabajos en cola para los administradores.
  • Una mejor experiencia de usuario al evitar la ejecución de trabajos obsoletos.

Primeros Pasos

  1. Identificar los servicios que generan trabajos en cola.
  2. Utilizar el QueuedJobService para gestionar y cancelar estos trabajos cuando sea necesario.
  3. Integrar widgets de IU para proporcionar visibilidad y control a los administradores.

Idea Clave

La centralización y la automatización en la gestión de trabajos en cola son cruciales para mantener un sistema eficiente y evitar la acumulación de tareas innecesarias. Proporcionar una interfaz de usuario intuitiva para la monitorización y el control mejora significativamente la experiencia del usuario y facilita la administración del sistema.

Limpieza de trabajos en cola y widget de IU para Devlog-ist/landing
Gerardo Ruiz

Gerardo Ruiz

Author

Share: