# Tresipunt Manager

Sistema de gestión centralizado para la administración de licencias, productos y recursos de plugins de Moodle. Proporciona una API REST completa y un panel de administración web para gestionar sitios, clientes, productos, tokens de licencia y recursos asociados.

## 📋 Características Principales

- **Gestión de Licencias**: Sistema completo de tokens de licencia con validación, expiración y límites de uso
- **Gestión de Productos**: Administración de plugins con versionado y compatibilidad
- **Gestión de Sitios**: Registro y sincronización de sitios Moodle
- **Gestión de Clientes**: Administración de clientes y sus asociaciones
- **Recursos por Versión**: 
  - Archivos SCSS y JavaScript versionados
  - Configuraciones YAML (Setups)
  - Features (funcionalidades documentadas)
  - Tutoriales (vídeos de YouTube/Vimeo)
  - Recursos (archivos y enlaces externos)
- **API REST**: Endpoint único con múltiples acciones para integración con plugins
- **Panel de Administración**: Interfaz web moderna construida con Livewire 3 y Tailwind CSS
- **Sistema de Permisos**: Roles y permisos basados en Spatie Laravel Permission

## 🛠️ Requisitos del Sistema

- **PHP**: >= 8.2
- **Composer**: Última versión
- **Node.js**: >= 18.x y npm
- **Base de datos**: MySQL/MariaDB
- **Extensiones PHP requeridas**:
  - BCMath
  - Ctype
  - cURL
  - DOM
  - Fileinfo
  - JSON
  - Mbstring
  - OpenSSL
  - PCRE
  - PDO
  - Tokenizer
  - XML

## 🚀 Instalación Local

### Instalación con Laragon (Windows)

Si estás usando **Laragon** como entorno de desarrollo local, sigue estos pasos específicos:

1. **Asegúrate de que Laragon esté ejecutándose** con Apache/Nginx y MySQL activos.

2. **Clona el repositorio** en la carpeta `www` de Laragon:

```bash
cd C:\laragon\www
git clone git@bitbucket.org:tresipunt/tresipunt-manager.git tresipunt-manager
cd tresipunt-manager
```

3. **Configura el archivo `.env`** con las credenciales por defecto de Laragon:

```env
APP_NAME="Tresipunt Manager"
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://tresipunt-manager.test

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tresipunt_manager
DB_USERNAME=root
DB_PASSWORD=
```

4. **Crea la base de datos** desde HeidiSQL (incluido en Laragon) o desde la terminal:

```sql
CREATE DATABASE tresipunt_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

5. **Continúa con los pasos 2-12** de la instalación estándar (instalar dependencias, migraciones, etc.).

6. **Accede a la aplicación** usando el dominio virtual de Laragon:

```
http://tresipunt-manager.test
```

**Nota**: Laragon crea automáticamente dominios virtuales basados en el nombre de la carpeta del proyecto. Si prefieres usar otro dominio, puedes configurarlo en Laragon.

---

### Instalación Estándar

### 1. Clonar el Repositorio

```bash
git clone git@bitbucket.org:tresipunt/tresipunt-manager.git tresipunt-manager
cd tresipunt-manager
```

### 2. Instalar Dependencias de PHP

```bash
composer install
```

### 3. Configurar Variables de Entorno

Crea un archivo `.env` basándote en la configuración estándar de Laravel:

```bash
cp .env.example .env
```

Si no existe `.env.example`, crea el archivo `.env` con la siguiente configuración mínima:

```env
APP_NAME="Tresipunt Manager"
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=http://localhost:8000
APP_LOCALE=es
APP_FALLBACK_LOCALE=es
APP_FAKER_LOCALE=es_ES

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tresipunt_manager
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=database
SESSION_LIFETIME=120
CACHE_STORE=database

MEMCACHED_HOST=127.0.0.1

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

VITE_APP_NAME="${APP_NAME}"
```

### 4. Generar Clave de Aplicación

```bash
php artisan key:generate
```

### 5. Configurar Base de Datos

1. Crea una base de datos MySQL/MariaDB:

```sql
CREATE DATABASE tresipunt_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

2. Configura el archivo `.env` con las credenciales de tu base de datos:

```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tresipunt_manager
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_contraseña
```

### 6. Ejecutar Migraciones y Seeders

```bash
php artisan migrate --force
php artisan db:seed
```

Esto creará las tablas necesarias y poblará la base de datos con datos iniciales (roles, permisos, tipos, etc.).

### 7. Crear Enlace Simbólico de Storage

```bash
php artisan storage:link
```

Esto permite que los archivos subidos sean accesibles públicamente.

### 8. Instalar Dependencias de Node.js

```bash
npm install
```

### 9. Compilar Assets Frontend

Para desarrollo:

```bash
npm run dev
```

Para producción:

```bash
npm run build
```

### 10. Crear Usuario Administrador

Ejecuta el siguiente comando para crear un usuario administrador:

```bash
php artisan tinker
```

Luego en la consola de Tinker:

```php
$user = \App\Models\User::create([
    'name' => 'Administrador',
    'email' => 'admin@example.com',
    'password' => bcrypt('password'),
    'email_verified_at' => now(),
]);

$user->assignRole('Admin');
```

### 11. Iniciar el Servidor de Desarrollo

En una terminal, inicia el servidor de Laravel:

```bash
php artisan serve
```

En otra terminal (opcional), inicia Vite para desarrollo con hot-reload:

```bash
npm run dev
```

O usa el comando combinado que inicia todo:

```bash
composer run dev
```

Este comando inicia simultáneamente:
- Servidor Laravel (`php artisan serve`)
- Queue worker (`php artisan queue:listen`)
- Pail (logs en tiempo real) (`php artisan pail`)
- Vite dev server (`npm run dev`)

### 12. Acceder a la Aplicación

Abre tu navegador y visita:

```
http://localhost:8000
```

Inicia sesión con las credenciales del usuario administrador creado anteriormente.

## 📁 Estructura del Proyecto

```
tresipunt-manager/
├── app/
│   ├── Http/
│   │   ├── Controllers/      # Controladores de la API
│   │   └── Middleware/        # Middleware personalizado
│   ├── Livewire/             # Componentes Livewire
│   │   ├── Clients/          # Gestión de clientes
│   │   ├── Dashboard/        # Panel principal
│   │   ├── Features/         # Gestión de features
│   │   ├── LicenseTokens/     # Gestión de tokens
│   │   ├── Products/         # Gestión de productos
│   │   ├── Resources/        # Gestión de recursos
│   │   ├── Scss/             # Gestión de archivos SCSS
│   │   ├── ScssCdn/          # Gestión de bundles SCSS CDN
│   │   ├── Setups/           # Gestión de configuraciones
│   │   ├── Environments/     # Gestión de entornos
│   │   ├── Tutorials/        # Gestión de tutoriales
│   │   └── Users/            # Gestión de usuarios
│   ├── Models/               # Modelos Eloquent
│   ├── Services/             # Servicios de negocio
│   └── Providers/            # Service Providers
├── database/
│   ├── migrations/           # Migraciones de base de datos
│   └── seeders/              # Seeders para datos iniciales
├── resources/
│   ├── css/                  # Estilos CSS
│   ├── js/                   # JavaScript
│   └── views/                # Vistas Blade/Livewire
├── routes/
│   ├── api.php               # Rutas de la API
│   └── web.php               # Rutas web
├── storage/                  # Archivos subidos y logs
└── public/                   # Punto de entrada público
```

## 🔧 Comandos Útiles

### Setup Inicial Completo

```bash
composer run setup
```

Este comando ejecuta automáticamente:
- `composer install`
- Copia `.env.example` a `.env` (si no existe)
- Genera la clave de aplicación
- Ejecuta las migraciones
- Instala dependencias de npm
- Compila los assets

### Desarrollo

```bash
composer run dev
```

Inicia todos los servicios necesarios para desarrollo.

### Testing

```bash
composer run test
# o
php artisan test
```

### Limpiar Caché

```bash
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
```

### Optimizar para Producción

```bash
php artisan config:cache
php artisan route:cache
php artisan view:cache
composer install --optimize-autoloader --no-dev
npm run build
```

## 📚 Documentación Adicional

### Manuales Principales

- **[MANUAL_FUNCIONAL.md](MANUAL_FUNCIONAL.md)**: Manual operativo completo para usuarios y perfiles funcionales. Incluye guías paso a paso para gestionar usuarios, roles, sitios, productos, tokens, contenido y setups.
- **[MANUAL_TECNICO.md](MANUAL_TECNICO.md)**: Manual técnico completo para desarrolladores. Incluye instalación, arquitectura, API, endpoints y despliegue.

### Documentación de API

- **[API_DOCUMENTATION.md](API_DOCUMENTATION.md)**: Documentación completa de la API REST con todos los endpoints, parámetros y respuestas.
- **[API_USER_GUIDE.md](API_USER_GUIDE.md)**: Guía de usuario para desarrolladores que integran la API desde plugins de Moodle.

## 🔐 Seguridad

- Los tokens de licencia se validan en cada petición a la API
- Implementación de rate limiting por token
- Validación de hosts vinculados a tokens
- Sanitización de contenido HTML con HTMLPurifier
- Sistema de roles y permisos con Spatie Laravel Permission

## 🌐 API

La API está disponible en `/api/v1/` y requiere autenticación mediante Bearer Token.

**Endpoint principal**: `POST /api/v1/`

**Acciones disponibles**:
- `sync`: Sincronizar información del sitio
- `licence`: Verificar licencia de un plugin
- `products`: Obtener todos los productos activos del sitio
- `scss`: Obtener archivos SCSS
- `scss-cdn`: Obtener archivos SCSS CDN
- `js`: Obtener archivos JavaScript
- `setup`: Obtener configuración YAML
- `features`: Obtener features publicadas
- `tutorials`: Obtener tutoriales publicados
- `resources`: Obtener recursos publicados
- `data`: Enviar datos de telemetría
- `plugins`: Enviar información de plugins instalados

Para más detalles, consulta [API_DOCUMENTATION.md](API_DOCUMENTATION.md).

## 🧪 Testing

El proyecto incluye tests con PHPUnit. Para ejecutarlos:

```bash
php artisan test
```

## 📝 Licencia

Este proyecto es software propietario. Todos los derechos reservados.

## 👥 Soporte

Para soporte técnico o consultas, contacta con el equipo de desarrollo.

---

**Última actualización**: 2025-01-XX
