> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rocky.global/llms.txt
> Use this file to discover all available pages before exploring further.

# ADMIN ORGANIZER LINKING

# Admin-Organizer Linking Commands

Este documento describe los comandos y servicios disponibles para vincular el usuario administrador con una cuenta organizador en el sistema.

## 🎯 Propósito

El sistema permite vincular el usuario administrador existente (creado por el seed `UsersSeed`) con una cuenta organizador para que pueda gestionar eventos y acceder a funcionalidades específicas de organizadores.

## 🛠️ Comandos Disponibles

### Comando Artisan: `admin:link-organizer`

Comando principal para gestionar la vinculación entre admin y organizador.

#### Sintaxis

```bash theme={null}
php artisan admin:link-organizer {action} [options]
```

#### Acciones Disponibles

##### 1. **Link** - Vincular admin con organizador

```bash theme={null}
# Vincular con nombre por defecto
php artisan admin:link-organizer link

# Vincular con nombre personalizado
php artisan admin:link-organizer link --name="Mi Organizador Personalizado"
```

**Funcionalidad:**

* Busca el usuario admin existente (`a-oceanman@mail.com`)
* Crea un organizador nuevo o reutiliza uno existente
* Asigna la primera tarifa disponible del sistema
* Vincula el admin con el organizador
* Muestra información detallada del proceso

##### 2. **Status** - Verificar estado actual

```bash theme={null}
php artisan admin:link-organizer status
```

**Funcionalidad:**

* Verifica si el admin está vinculado a un organizador
* Muestra información del organizador asociado
* Proporciona detalles del estado de vinculación

##### 3. **Unlink** - Desvincular admin del organizador

```bash theme={null}
php artisan admin:link-organizer unlink
```

**Funcionalidad:**

* Desvincula el admin del organizador actual
* Mantiene el organizador en el sistema
* Limpia la referencia en el usuario admin

## 🌱 Seeder: `AdminOrganizerLinkSeed`

Seeder automático para vincular admin con organizador durante la instalación.

### Uso

```bash theme={null}
# Ejecutar el seeder específico
php artisan db:seed --class=AdminOrganizerLinkSeed

# O incluirlo en DatabaseSeeder.php para ejecución automática
```

### Funcionalidad

* Verifica el estado actual de vinculación
* Ejecuta la vinculación si no está ya vinculado
* Muestra mensajes informativos del proceso
* Previene duplicaciones

## 🔧 Servicio: `AdminOrganizerLinkService`

Servicio interno que maneja toda la lógica de vinculación.

### Métodos Principales

#### `linkAdminWithOrganizer($organizerName = null)`

```php theme={null}
$service = new AdminOrganizerLinkService();
$result = $service->linkAdminWithOrganizer('Mi Organizador');

if ($result['success']) {
    echo "Vinculado exitosamente: " . $result['message'];
    echo "Organizador ID: " . $result['organizer_id'];
}
```

#### `getAdminOrganizerStatus()`

```php theme={null}
$service = new AdminOrganizerLinkService();
$status = $service->getAdminOrganizerStatus();

if ($status['is_linked']) {
    echo "Admin vinculado a organizador ID: " . $status['organizer_id'];
} else {
    echo "Admin no está vinculado a ningún organizador";
}
```

#### `unlinkAdminFromOrganizer()`

```php theme={null}
$service = new AdminOrganizerLinkService();
$result = $service->unlinkAdminFromOrganizer();

if ($result['success']) {
    echo "Desvinculado exitosamente";
}
```

## 📋 Requisitos Previos

### 1. Usuario Admin Existente

* El usuario admin debe existir (creado por `UsersSeed`)
* Email: `a-oceanman@mail.com`
* Password: `oceanman`

### 2. Tarifas Disponibles

* Debe existir al menos una tarifa en el sistema
* Las tarifas se crean automáticamente con `TarifasSeed`

### 3. Base de Datos

* Tabla `users` con campo `organizador_id`
* Tabla `organizadores` con todos los campos requeridos
* Tabla `tarifas` con al menos un registro

## 🔍 Verificación de Estado

### Antes de Vincular

```bash theme={null}
php artisan admin:link-organizer status
```

### Después de Vincular

```bash theme={null}
php artisan admin:link-organizer status
```

### Verificar en Base de Datos

```sql theme={null}
-- Verificar usuario admin
SELECT id, name, email, organizador_id FROM users WHERE email = 'a-oceanman@mail.com';

-- Verificar organizador vinculado
SELECT o.*, t.name as tarifa_name 
FROM organizadores o 
LEFT JOIN tarifas t ON o.tarifas_id = t.id 
WHERE o.id = (SELECT organizador_id FROM users WHERE email = 'a-oceanman@mail.com');
```

## 🚨 Solución de Problemas

### Error: "Admin user not found"

* Verificar que `UsersSeed` se haya ejecutado
* Confirmar que existe el usuario con email `a-oceanman@mail.com`

### Error: "No tarifas available in the system"

* Ejecutar `TarifasSeed` para crear tarifas
* Verificar que existan tarifas activas en la tabla `tarifas`

### Error: "Field 'tarifas\_id' doesn't have a default value"

* Verificar que el modelo `Organizador` tenga `tarifas_id` en `$fillable`
* Confirmar que la migración de `tarifas_id` se haya ejecutado

### Error: "Admin user is already linked"

* El admin ya está vinculado a un organizador
* Usar `status` para verificar el estado actual
* Usar `unlink` si se desea cambiar la vinculación

## 📝 Logs y Auditoría

El servicio registra todas las operaciones en los logs de Laravel:

```php theme={null}
// Ubicación de logs
storage/logs/laravel.log

// Buscar por:
grep "Admin user linked" storage/logs/laravel.log
grep "Admin user unlinked" storage/logs/laravel.log
```

## 🔄 Flujo de Trabajo Recomendado

### Instalación Inicial

1. Ejecutar migraciones: `php artisan migrate`
2. Ejecutar seeds básicos: `php artisan db:seed --class=UsersSeed`
3. Ejecutar seeds de tarifas: `php artisan db:seed --class=TarifasSeed`
4. Vincular admin: `php artisan admin:link-organizer link`

### Verificación Post-Instalación

1. Verificar estado: `php artisan admin:link-organizer status`
2. Probar login con admin en el sistema
3. Confirmar acceso a funcionalidades de organizador

### Mantenimiento

* Usar `status` para verificar vinculación
* Usar `unlink` y `link` para cambiar organizador si es necesario
* Revisar logs periódicamente para auditoría

## 📞 Soporte

Para problemas o dudas sobre la vinculación admin-organizador:

1. Verificar logs en `storage/logs/laravel.log`
2. Ejecutar `php artisan admin:link-organizer status`
3. Revisar este documento para solución de problemas
4. Contactar al equipo de desarrollo si persisten los problemas
