Cómo Leer este Inventario
Este inventario distingue tres capas por cada ruta:
- Registrada — presente en la tabla de enrutamiento (
routes/web.php, routes/api.php, routes/auth.php, routes/settings.php, routes/ally/web.php, routes/ally/auth.php).
- Alcanzable — efectivamente acepta una petición dado su stack de middleware y el cableado del controlador.
- Segura — cuenta con una capa de autenticación y/o autorización apropiada para lo que hace.
Desajustes notables entre estas capas:
POST /lineas, PUT /lineas/{linea}, DELETE /lineas/{linea} están registradas por Route::apiResource('lineas', ...) en routes/web.php pero el controlador (app/Http/Controllers/Market/LineaController.php) solamente implementa index y show. Las tres rutas de escritura se resuelven a métodos inexistentes y fallarán en tiempo de ejecución — registradas pero no funcionales.
GET /carrito, POST /carrito, PUT /carrito/{carrito}, DELETE /carrito/{carrito}, DELETE /carrito/clear, y las tres rutas de lista-deseos están registradas como públicas (sin middleware auth), pero los métodos del controlador leen auth()->user() y fallan para llamadores no autenticados. Están registradas pero no son alcanzables para invitados.
POST /marcas, PUT /marcas/{marca}, DELETE /marcas/{marca} en routes/web.php ejecutan crear/actualizar/eliminar contra el catálogo sin ningún tipo de autenticación. Esta es una superficie real y explotable de escritura sin autenticación, no una teórica.
GET /up lo provee el chequeo de salud del framework de Laravel (declarado vía health: '/up' en bootstrap/app.php), además del GET /health definido en routes/web.php.
Conteo de rutas: 139 rutas registradas en total. Restando GET /up, GET /health, el redirect desde /settings, y el fallback quedan 135 endpoints de aplicación.
Rutas Públicas (Sin Autenticación)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /health | closure (response('ok',200)) | — | — |
| GET | / | DashboardController@index | consultar_cupo_cliente | home |
| GET | /productos | ProductoController@index | — | productos.index |
| GET | /productos/{producto} | ProductoController@show | — | productos.show |
| GET | /marcas | MarcaController@index | — | marcas.index |
| GET | /marcas/{marca} | MarcaController@show | — | marcas.show |
| POST | /marcas | MarcaController@store | — | marcas.store |
| PUT | /marcas/{marca} | MarcaController@update | — | marcas.update |
| DELETE | /marcas/{marca} | MarcaController@destroy | — | marcas.destroy |
| GET | /lineas | LineaController@index | — | lineas.index |
| GET | /lineas/{linea} | LineaController@show | — | lineas.show |
| POST | /lineas | LineaController@store | — | lineas.store |
| PUT | /lineas/{linea} | LineaController@update | — | lineas.update |
| DELETE | /lineas/{linea} | LineaController@destroy | — | lineas.destroy |
| GET | /lista-deseos | ListaDeseoController@index | — | lista-deseos.index |
| POST | /lista-deseos | ListaDeseoController@store | — | lista-deseos.store |
| DELETE | /lista-deseos/{lista_deseo} | ListaDeseoController@destroy | — | lista-deseos.destroy |
| DELETE | /carrito/clear | CarritoController@clear | — | carrito.clear |
| GET | /carrito | CarritoController@index | — | carrito.index |
| POST | /carrito | CarritoController@store | — | carrito.store |
| PUT | /carrito/{carrito} | CarritoController@update | — | carrito.update |
| DELETE | /carrito/{carrito} | CarritoController@destroy | — | carrito.destroy |
| GET | /resultados | ProductoController@search | — | productos.search |
| GET | /consultar-cupo | — | — | consultar-cupo.view |
| POST | /consultar-cupo | ConsultarCupoController@store | — | consultar-cupo.store |
| POST | /contacto | ContactoController@store | — | contacto.store |
| GET | /simulador-cuotas | — (Inertia) | — | simulador.view |
Nota: /simulador-cuotas está definida dentro del grupo de middleware auth pero usa ->withoutMiddleware('auth'), por lo que no es verdaderamente pública pero es funcionalmente accesible sin autenticación.
Rutas de Auth de Cliente (Guard: web, middleware guest)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /registro | RegisteredUserController@create | guest | register |
| POST | /register | RegisteredUserController@store | guest | register.store |
| POST | /login | AuthenticatedSessionController@store | guest | login.store |
| POST | /forgot-password | PasswordResetLinkController@store | guest | password.email |
| GET | /reset-password/{token} | NewPasswordController@create | guest | password.reset |
| POST | /reset-password | NewPasswordController@store | guest | password.store |
Rutas de Auth de Cliente (Guard: web, middleware auth)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /verificar-correo | EmailVerificationPromptController | auth:web | verification.notice |
| GET | /verify-email/{id}/{hash} | VerifyEmailController | auth:web, signed, throttle:6,1 | verification.verify |
| POST | /email/verification-notification | EmailVerificationNotificationController@store | auth:web, throttle:6,1 | verification.send |
| GET | /confirm-password | ConfirmablePasswordController@show | auth:web | password.confirm |
| POST | /confirm-password | ConfirmablePasswordController@store | auth:web | — |
| POST | /logout | AuthenticatedSessionController@destroy | auth:web | logout |
Rutas Autenticadas de Cliente (Guard: web)
Perfil de Usuario y Registro
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /usuario/perfil | UserController@renderCliente | auth, verified | user.perfil |
| GET | /usuario/completar-registro | CompletarRegistroController@render | auth, verified | user.completar-registro.render |
| POST | /usuario/completar-registro | CompletarRegistroController@store | auth | user.completar-registro.store |
| PUT | /usuario/telefono | UserController@updatePhone | auth | user.phone.update |
| PUT | /usuario/password | UserController@updatePassword | auth | user.password.update |
Flujo de Aprobación de Crédito (/usuario/cupo/*)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /usuario/cupo/verificar-limite-intentos | VerificarLimiteIntentosController@index | auth | user.aprobar-cupo.verificar-limite-intentos |
| GET | /usuario/cupo/legal-check | AprobarCupoController@legalCheck | auth, check_intentos_limite_diarios | user.aprobar-cupo.legal-check |
| GET | /usuario/cupo/identity-validation | AprobarCupoController@identityValidation | auth, check_intentos_limite_diarios | user.aprobar-cupo.identity-validation |
| GET | /usuario/cupo/identity-validation-generate-otp | AprobarCupoController@identityValidationGenerateOTPCode | auth, check_intentos_limite_diarios | user.aprobar-cupo.identity-validation-generate-otp |
| POST | /usuario/cupo/identity-validation-verify-otp | AprobarCupoController@identityValidationVerifyOTPCode | auth, check_intentos_limite_diarios | user.aprobar-cupo.identity-validation-verify-otp |
| GET | /usuario/cupo/identity-validation-generate-questions | AprobarCupoController@identityValidationGenerateQuestions | auth, check_intentos_limite_diarios | user.aprobar-cupo.identity-validation-generate-questions |
| POST | /usuario/cupo/identity-validation-verify-questions | AprobarCupoController@identityValidationVerifyQuestions | auth, check_intentos_limite_diarios | user.aprobar-cupo.identity-validation-verify-questions |
| GET | /usuario/cupo/hdc-validation | AprobarCupoController@hdcValidation | auth, check_intentos_limite_diarios | user.aprobar-cupo.hdc-validation |
| GET | /usuario/cupo/aprobar | AprobarCupoController@aprobarCupo | auth | user.aprobar-cupo.obtener-cupo |
Compras y Adquisiciones
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /lista-deseos/vista | — (Inertia) | auth | lista-deseos.view |
| GET | /checkout | — (Inertia) | auth, cliente_registro_completo, verificar_cliente_presenta_mora | checkout.view |
| GET | /mis-compras | OrdenCompraController@index | auth | cliente.compras.index |
| GET | /mis-compras/{id} | OrdenCompraController@show | auth | cliente.compras.show |
| POST | /mis-compras | MarketVentaController@store | auth | cliente.compras.store |
| POST | /mis-compras/procesar-carrito | MarketVentaController@procesarCarrito | auth | cliente.compras.procesar-carrito |
| GET | /mis-compras/{ventaId}/detalles | MarketVentaController@detalles | auth | cliente.compras.detalles |
Configuración
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| REDIRECT | /settings | /settings/profile | auth:web | — |
| GET | /settings/profile | ProfileController@edit | auth:web | profile.edit |
| PATCH | /settings/profile | ProfileController@update | auth:web | profile.update |
| DELETE | /settings/profile | ProfileController@destroy | auth:web | profile.destroy |
| GET | /settings/password | PasswordController@edit | auth:web | password.edit |
| PUT | /settings/password | PasswordController@update | auth:web | password.update |
| GET | /settings/appearance | — (Inertia) | auth:web | appearance |
Rutas de Aliado/Partner (Guard: app)
Ally Auth (guest:app)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/ingresar | AuthenticatedSessionController@loginForm | guest:app | login |
| POST | /aliados/login | AuthenticatedSessionController@login | guest:app | aliado.login |
| GET | /aliados/postulacion/ | PostulacionController@create | guest:app | aliado-postulacion.create |
| POST | /aliados/postulacion/ | PostulacionController@store | guest:app | aliado-postulacion.store |
| GET | /aliados/forgot-password | PasswordResetLinkController@create | guest:app | aliado.password.request |
| POST | /aliados/forgot-password | PasswordResetLinkController@store | guest:app | aliado.password.email |
| GET | /aliados/reset-password/{token} | NewPasswordController@create | guest:app | aliado.password.reset |
| POST | /aliados/reset-password | NewPasswordController@store | guest:app | aliado.password.store |
Ally Autenticado (auth:app)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| POST | /aliados/logout | AuthenticatedSessionController@logout | auth:app | aliado.logout |
| GET | /aliados/postulacion/{postulacion}/registro | RegisteredUserController@index | auth:app, signed | aliado-postulacion.register |
| POST | /aliados/postulacion/registro | RegisteredUserController@store | auth:app | aliado-postulacion.register.store |
Dashboard del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/ | DashboardController@index | auth:app | aliado.dashboard |
| GET | /aliados/dashboard/resumen | DashboardController@resumen | auth:app | aliado.dashboard.resumen |
| GET | /aliados/dashboard/rendimiento | DashboardController@rendimiento | auth:app | aliado.dashboard.rendimiento |
Descargas del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/productos/download-mock | DownloadProductoMockController@index | auth:app | aliado.productos.download |
| GET | /aliados/marcas/download | DownloadMarcaController@index | auth:app | aliado.marcas.download |
| GET | /aliados/lineas/download | DownloadLineaController@index | auth:app | aliado.lineas.download |
Gestión de Postulaciones del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/postulacion/revision | PostulacionController@revision | auth:app | aliado.postulacion.revision |
| GET | /aliados/postulacion/list | PostulacionController@list | auth:app | aliado.postulacion.index |
| PUT | /aliados/postulacion/{postulacion} | PostulacionController@update | auth:app | aliado.postulacion.update |
| POST | /aliados/postulacion/{postulacion}/action/{action} | PostulacionController@action | auth:app | aliado.postulacion.action |
Gestión de Productos del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/productos/ | ProductoController@render | auth:app | aliado.productos.render |
| GET | /aliados/productos/revision | ProductoController@revision | auth:app | aliado.productos.revision |
| GET | /aliados/productos/{producto}/preview | ProductoController@preview | auth:app | aliado.productos.show |
| POST | /aliados/productos | ProductoController@store | auth:app | aliado.productos.store |
| PUT | /aliados/productos/{producto} | ProductoController@update | auth:app | aliado.productos.update |
| DELETE | /aliados/productos/{producto} | ProductoController@destroy | auth:app | aliado.productos.destroy |
| POST | /aliados/productos/masivos | ProductoController@massiveStore | auth:app | aliado.productos.carga-masiva |
Gestión de Marcas del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/marcas/listado | MarcaController@render | auth:app | aliado.marcas.render |
| POST | /aliados/marcas | MarcaController@store | auth:app | aliado.marcas.store |
| PUT | /aliados/marcas/{marca} | MarcaController@update | auth:app | aliado.marcas.update |
| DELETE | /aliados/marcas/{marca} | MarcaController@destroy | auth:app | aliado.marcas.destroy |
Gestión de Empresas del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/empresas | EmpresaController@index | auth:app | aliado.empresas.index |
| GET | /aliados/empresas/listado | EmpresaController@render | auth:app | aliado.empresas.render |
| PUT | /aliados/empresas/{empresa} | EmpresaController@update | auth:app | aliado.empresas.update |
| DELETE | /aliados/empresas/{empresa} | EmpresaController@destroy | auth:app | aliado.empresas.destroy |
Gestión de Sucursales del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/sucursales | SucursalController@index | auth:app | aliado.sucursales.index |
| GET | /aliados/sucursales/listado | SucursalController@render | auth:app | aliado.sucursales.render |
| POST | /aliados/sucursales | SucursalController@store | auth:app | aliado.sucursales.store |
| PUT | /aliados/sucursales/{sucursal} | SucursalController@update | auth:app | aliado.sucursales.update |
| DELETE | /aliados/sucursales/{sucursal} | SucursalController@destroy | auth:app | aliado.sucursales.destroy |
Nota de bug: La ruta DELETE /aliados/sucursales/{sucursal} existe debido a un bug de código: la definición del resource usa except('show', 'delete') pero 'delete' no es un nombre de método válido para resource — debería ser except('show', 'destroy'). Como resultado, la ruta destroy no se excluye y queda registrada.
Gestión de Empleados del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/empleados | EmpleadoController@index | auth:app | aliado.empleados.index |
| GET | /aliados/empleados/listado | EmpleadoController@render | auth:app | aliado.empleados.render |
| POST | /aliados/empleados | EmpleadoController@store | auth:app | aliado.empleados.store |
| PUT | /aliados/empleados/{empleado} | EmpleadoController@update | auth:app | aliado.empleados.update |
| DELETE | /aliados/empleados/{empleado} | EmpleadoController@destroy | auth:app | aliado.empleados.destroy |
Gestión de Usuarios del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/usuarios | UserController@index | auth:app | aliado.usuarios.index |
| GET | /aliados/usuarios/listado | UserController@render | auth:app | aliado.usuarios.render |
| GET | /aliados/usuarios/{usuario} | UserController@show | auth:app | aliado.usuarios.show |
| POST | /aliados/usuarios/admin/crear | RegisteredUserController@storeAdmin | auth:app | aliado.usuarios.admin.store |
| POST | /aliados/usuarios/{id}/resend-verification | UserController@resendVerification | auth:app | aliado.usuarios.resend-verification |
| PUT | /aliados/usuarios/{usuario} | UserController@update | auth:app | aliado.usuarios.update |
| DELETE | /aliados/usuarios/{usuario} | UserController@destroy | auth:app | aliado.usuarios.destroy |
Ventas del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/ventas/crear | VentaController@create | auth:app | aliado.ventas.create |
| GET | /aliados/ventas/listado | VentaController@render | auth:app | aliado.ventas.render |
| GET | /aliados/ventas/usuario/{userId} | VentaController@ventasPorUsuario | auth:app | aliado.ventas.por-usuario |
| GET | /aliados/ventas/{ventaId}/detalles | VentaController@detalles | auth:app | aliado.ventas.detalles |
| GET | /aliados/ventas/estadisticas | VentaController@stats | auth:app | aliado.ventas.estadisticas |
| GET | /aliados/ventas/reporte-comercial | VentaReporteComercialController@index | auth:app | aliado.ventas.reporte-comercial |
| GET | /aliados/ventas | VentaController@index | auth:app | aliado.ventas.index |
| POST | /aliados/ventas | VentaController@store | auth:app | aliado.ventas.store |
| GET | /aliados/ventas/{venta} | VentaController@show | auth:app | aliado.ventas.show |
| PUT | /aliados/ventas/{venta} | VentaController@update | auth:app | aliado.ventas.update |
| DELETE | /aliados/ventas/{venta} | VentaController@destroy | auth:app | aliado.ventas.destroy |
Pedidos del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/pedidos/listado | VentaController@pedidos | auth:app | aliado.pedidos.render |
Búsqueda de Clientes del Aliado
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /aliados/clientes/search | ClienteController@search | auth:app | aliado.clientes.search |
| GET | /aliados/clientes/{clienteId}/presenta-mora | ClienteController@presentaMora | auth:app | aliado.clientes.presenta-mora |
Rutas API (Prefijo: /api)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| POST | /api/error-logs | ErrorLogController@store | api | api.error-logs.store |
| GET | /api/v1/datacredito/historial | DataCreditoController@consultarHistorial | api | api.datacredito.historial |
| POST | /api/v1/webhooks/certicamara | CerticamaraController | api | api.webhooks.certicamara |
Otras Rutas (Health Check, Fallback)
| Método | URI | Controller@method | Middleware | Nombre |
|---|
| GET | /up | — (Laravel built-in, bootstrap/app.php) | — | — |
| ANY | {fallbackPlaceholder} | — (redirige a /) | — | — |
Comandos de Consola Programados
| Programación | Job/Comando | Descripción |
|---|
| Cada 15 minutos | ProcesarOrdenesAbandonadas | Procesa órdenes de compra abandonadas |
Estadísticas de Rutas
| Categoría | Cantidad |
|---|
Web público (sin auth) — incluye /health y /simulador-cuotas (grupo auth con withoutMiddleware) | 27 |
API (prefijo /api, sin auth) | 3 |
Auth de cliente (middleware guest, routes/auth.php) | 6 |
Auth de cliente (auth:web — routes/auth.php + routes/settings.php + grupo auth de routes/web.php) | 34 |
Auth de aliado (middleware guest:app, routes/ally/auth.php) | 8 |
Auth de aliado (middleware auth:app, routes/ally/web.php + routes/ally/auth.php) | 59 |
Solo framework: /up (health integrado), redirección fallback | 2 |
| Rutas registradas | 139 |
Endpoints de aplicación (registradas − /up, /health, fallback, redirect /settings) | 135 |