# Changelog

## v2.0.0 — Migración a Laravel 10 / PHP 8.2

Versión **breaking** respecto a 1.x. Pensada para sitios Laravel 10 con PHP ^8.2.

### Requisitos nuevos
- PHP `^8.2`
- Laravel (`illuminate/support`) `^10.0`
- `laravel/ui` `^4.2`
- `spatie/laravel-permission` `^6.3` (antes `~3.6`) — **breaking, ver abajo**
- `spatie/laravel-menu` `^3.9`
- `yajra/laravel-datatables-oracle` `^10.0` (antes `~9.0`)
- `intervention/image` `^2.7` (NO subir a v3, es rewrite)
- `intervention/imagecache` `^2.5`
- `creativeorange/gravatar` `^1.0`
- `sargilla/configuraciones` `^2.0`, `sargilla/toastr` `^2.0|^3.0`, `sargilla/user` `^2.0`

### Removido
- **`jenssegers/date`** — paquete abandonado. Reemplazado por `Carbon` con
  `Carbon::setLocale('es')` configurado en el `boot()` del ServiceProvider.
  El trait `Sargilla\Flatlab4\Traits\DateTranslator` ahora devuelve instancias
  de `Carbon\Carbon` con locale `es`.

### Breaking changes para los sitios consumidores

1. **Seeders**: la carpeta del paquete `database/seeds` se renombró a
   `database/seeders` y los seeders ahora viven bajo el namespace
   `Database\Seeders`. Si tu sitio extiende o referencia los seeders del
   paquete, actualizá los `use` correspondientes:
   ```php
   use Database\Seeders\RolesTableSeeder;
   ```
   `UsersTableSeeder` ahora referencia `App\Models\User` (estándar L8+),
   no `App\User`.

2. **spatie/laravel-permission v6**:
   - Republicá la configuración: `php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="permission-config"`
   - El esquema de la tabla cambió (soporte opcional de `teams`, claves
     `bigInteger` en vez de `integer`, índices nombrados). La migración del
     paquete (`create_permission_tables`) ya está sincronizada con v6 y
     respeta `config('permission.teams')`.
   - Los seeders del paquete ahora pasan `guard_name => 'web'` explícito al
     crear roles/permisos. Si tenías seeders propios, hacé lo mismo.

3. **Rutas (FQCN)**: las rutas del paquete (`routes/menu.php`,
   `routes/permisos.php`) usan ahora la sintaxis `[Controller::class, 'metodo']`.
   Laravel 8+ no auto-prefixea el namespace. Si publicaste estas rutas en
   tu sitio y las modificaste, actualizalas en consecuencia.

4. **`routes/web.php`**: `Route::auth()` fue removido en Laravel 6. Ya no
   se invoca desde el paquete. **El sitio host debe declarar `Auth::routes()`
   por su cuenta** (vía `laravel/ui` o las rutas que correspondan).

5. **Migración `users`**: usa `id()` (bigIncrements) en vez de `increments('id')`.
   Si tu base existente usa `int unsigned`, vas a necesitar una migración
   manual de tipo de columna.

6. **Helpers globales removidos en Laravel 6+**: el código del paquete ya no
   usa `snake_case`, `starts_with`, `str_contains` (helpers globales).
   Reemplazados por `Illuminate\Support\Str::*`. Si tus stubs/extensiones
   los usaban, hacé lo mismo.

7. **Middlewares**: `AdminMiddleware::handle()` y `MenuMiddleware::handle()`
   ahora declaran `(Request $request, Closure $next): mixed`. Los aliases
   `isAdmin` y `gestionaMenus` no cambiaron.

### Sin cambios (API pública preservada)
- Namespace del paquete: `Sargilla\Flatlab4\`
- Facade: `Flatlab4`
- Comandos artisan: `flatlab4:install`, `flatlab4:publish`, `db:create`
- Aliases de middleware: `isAdmin`, `gestionaMenus`
- Tags de publish: `config-flatlab`, `flatlab`, `views-flatlab`
- Preset de UI sigue siendo `php artisan ui flatlab4` (Mix, no Vite).

### Notas pendientes / fuera de scope
- Los **stubs** copiados al sitio host (`stubs/Kernel.php`, `stubs/User.php`,
  `stubs/AppServiceProvider.php`, `stubs/auth/*`, `stubs/app.php`, etc.) están
  pensados para Laravel 5.x y **no fueron actualizados en este release**. Si
  vas a correr `php artisan flatlab4:install` en un proyecto Laravel 10
  fresco, vas a necesitar revisarlos a mano o reemplazarlos por los archivos
  estándar de L10.
- `laravel/ui` v4 sigue soportando `webpack.mix.js` (Mix). Se mantiene Mix
  intencionalmente — no se migró el preset a Vite.
