## Mapa de rutas (web) → controlador → vista/JSON

Fuente: `routes/web.php`.

### Públicas
- **GET /** → `view('layouts.inicio')`
- **GET /app** → `AppController@showApp` → `resources/views/app.blade.php` (según nombre de ruta `app.ar`)
- **GET /redes** → `view('apps.redes.redes')` → `resources/views/apps/redes/redes.blade.php`
- **GET /feed** → `FeedController@index` → `resources/views/apps/feed/index.blade.php` (esperable)

### Auth (guest)
- **GET /register** → `AuthController@showLogin` (misma vista que login)
- **POST /register** → `AuthController@register`
- **GET /login** → `AuthController@showLogin`
- **POST /login** → `AuthController@login`

### Usuario autenticado (auth)
- **GET /perfil** → redirect a `profile.show(@username)`
- **GET /@{username}** → `AuthController@showPublicProfile` → `resources/views/profile/show.blade.php` (esperable)
- **GET /editar-perfil** → `AuthController@showEditProfile` → `resources/views/auth/edit-profile.blade.php`
- **PUT /perfil** → `AuthController@updateProfile`
- **POST /perfil/foto/eliminar** → `AuthController@deleteProfilePhoto`
- **PUT /cambiar-contrasena** → `AuthController@changePassword`
- **POST /cerrar-sesion** → `AuthController@logout`

#### Puntos (auth)
- **GET /puntos** → redirect a `profile` (ojo: actualmente redirige a `/perfil`, no a una vista de puntos)
- **GET /puntos/historial** → `PointsController@history` → `resources/views/points/history.blade.php`
- **GET /puntos/logros** → `PointsController@achievements` → `resources/views/points/achievements.blade.php`
- **GET /puntos/guia** → `PointsGuideController@index` → `resources/views/points/guide.blade.php`

### “App” usuario (auth) — citas/galería + endpoints internos
#### Mis citas (CRUD usuario)
- **GET /mis-citas** → `CitaController@index` → `resources/views/citas/index.blade.php`
- **GET /mis-citas/crear** → `CitaController@create` → `resources/views/citas/create.blade.php`
- **POST /mis-citas** → `CitaController@store`
- **GET /mis-citas/{cita}** → `CitaController@show` → `resources/views/citas/show.blade.php`
- **GET /mis-citas/{cita}/editar** → `CitaController@edit` → `resources/views/citas/edit.blade.php`
- **PUT /mis-citas/{cita}** → `CitaController@update`
- **DELETE /mis-citas/{cita}** → `CitaController@destroy`

#### Endpoints internos (auth)
- **GET /citas/mis-citas** → `CitaController@getMisCitas` → JSON (esperable)
- **GET /citas/mis-imagenes-data** → `CitaController@getMisImagenesData` → JSON (esperable)
- **GET /feed/citas/create-form** → `FeedController@createForm` → `resources/views/apps/feed/create-form.blade.php`
- **GET /api/opciones-uñas** → `CitaController@getOpcionesUñas` → JSON (esperable)
- **POST /calcular-descuentos** → `CitaController@calcularDescuentos` → JSON (esperable)

#### Perfil (auth) — endpoints internos para la app
- **GET /perfil/get-data** → `AuthController@getProfileData` → JSON (esperable)
- **POST /perfil/update** → `AuthController@updateProfileAjax`
- **GET /perfil/mi-perfil** → `AuthController@getMiPerfil`
- **GET /perfil/mis-likes** → `AuthController@getMisLikes`
- **GET /perfil/usuario/{username}** → `AuthController@getUserProfile`
- **GET /perfil/usuario/{username}/imagenes** → `AuthController@getUserImages`

#### Mi galería (CRUD usuario)
- **GET /mi-galeria** → `CitaImagenController@index` → `resources/views/cita-imagenes/index.blade.php` (verificar si hay vista específica “user”)
- **GET /mi-galeria/crear** → `CitaImagenController@create` → `resources/views/cita-imagenes/create.blade.php`
- **POST /mi-galeria** → `CitaImagenController@store`
- **GET /mi-galeria/{citaImagen}** → `CitaImagenController@show` → `resources/views/cita-imagenes/show.blade.php`
- **GET /mi-galeria/{citaImagen}/editar** → `CitaImagenController@edit` → `resources/views/cita-imagenes/edit.blade.php`
- **PUT /mi-galeria/{citaImagen}** → `CitaImagenController@update`
- **DELETE /mi-galeria/{citaImagen}** → `CitaImagenController@destroy`

### Admin (auth + admin)
- **GET /dashboard** → `DashboardController@index` → `resources/views/dashboard/index.blade.php`

#### Admin: Citas
- **Resource admin/citas** → `CitaController` → vistas `resources/views/citas/*` (verificar separación admin vs user)
- **PUT /admin/citas/{cita}/estado** → `CitaController@cambiarEstado`

#### Admin: Imágenes
- **Resource cita-imagenes** → `CitaImagenController` → `resources/views/cita-imagenes/*`
- **PUT|POST destacada/quitar/toggle** → `CitaImagenController@marcarDestacada|quitarDestacada|toggleVisibilidad`

#### Admin: Users
- **Resource admin/users** → `UserManagementController` → `resources/views/admin/users/*`
- **PUT /admin/users/{user}/toggle-status** → `UserManagementController@toggleStatus`
- **POST /admin/users/{user}/reset-password** → `UserManagementController@resetPassword`

#### Admin: Levels
- **Resource admin/levels** → `LevelController` → `resources/views/admin/levels/*`
- **PUT toggle / POST reorder / POST reset** → `LevelController@toggleStatus|reorder|resetToDefaults`

#### Admin: Servicios
- **Resource admin/servicios** → `Admin\\ServicioController` → `resources/views/admin/servicios/*`
- **PATCH toggle-status** → `Admin\\ServicioController@toggleStatus`

#### Admin: Promociones
- **Resource admin/promociones** → `Admin\\PromocionController` → `resources/views/admin/promociones/*`
- **PATCH toggle-status** → `Admin\\PromocionController@toggleStatus`

### Likes (auth)
- **POST /likes/cita/{citaId}/toggle** → `LikeController@toggleCitaLike`
- **POST /likes/imagen/{imagenId}/toggle** → `LikeController@toggleImagenLike`

### Auth AJAX
- **POST /auth/login** → `AuthController@loginAjax`
- **POST /auth/register** → `AuthController@registerAjax`
- **POST /auth/logout** → `AuthController@logoutAjax`
- **GET /auth/check** → `AuthController@checkAuth`

## WIP / huérfanos detectados
- **Ruta de prueba sin middleware**: `POST /test/like/{imagenId}` (`name: test.like`).
- **Placeholders**: `GET /perfil/imagenes`, `GET /perfil/edit` redirigen a `/` con “Funcionalidad en desarrollo”.
- **Método potencialmente huérfano**: `CitaController::createForm()` referencia `view('citas.create-form')`, pero **no existe** `resources/views/citas/create-form.blade.php` (sí existe `resources/views/apps/feed/create-form.blade.php` para el feed).
- **Duplicidad de rutas**: existe `backup_citas_perfeccionadas/web.php` con definiciones similares (artefacto no usado).

