4.2 KiB
4.2 KiB
Architect — F-050
Diagnosis
Investigación sobre el estado actual del admin:
- Layout:
(dashboard)/layout.tsxmantienemax-w-[1280px]conmx-auto, lo que limita el ancho útil en pantallas anchas; los centros quedan sin crecer. settings/page.tsxañade su propiomax-w-4xl, anulando el contenedor del layout.products/[id]/page.tsx(edit sheet) usamax-w-4xlinterno, lo que limita el editor de productos.brands/tax-rates/shippingsiguen mezclando botones de texto con iconos en la columna de acciones.categoriesya tiene selector de padre y checkbox promote, pero al editar sólo lista parents y bloquea al descendiente en hoja.dashboardcarga/api/admin/statsconcombinedAuth, que aceptabackoffice_sessionomdv_session; ambos resuelven al usuario con surole. El dashboard asumeRole(customer|admin) del campo, pero los backoffice users tienenroleadmin|editor, por lo querequireRole(user, 'admin')no bloquea pero el render espera un union decustomer|admin. Tras varios 401 (sin cookie válida) y la diferencia entre el proxy interno y la sesión, el cliente sólo ve un mensaje "No se pudieron cargar las estadísticas".- Además, el dashboard del admin hace un fetch server-side/render que se ejecuta sin cookie de backoffice porque el login actual del admin está en cookie
backoffice_session, pero el/auth/loginmostrado por el frontend es la versión cliente; algunos links apuntaban a/audit,/backoffice/statsy/orders/activeque no existen.auditApi.listapunta a/api/admin/auditque sí existe pero la página de auditoría usaauditApi.list, así que ese 404 era ruido del flujo anterior.
Plan
-
Layout full-width
- Reemplazar
max-w-[1280px] mx-autoporw-full px-6 md:px-10 py-8en(dashboard)/layout.tsx, usando la estructura responsive del sidebar fijo. settings/page.tsxretira sumax-w-4xlpropio.products/[id]/page.tsxretira elmax-w-4xl; la grid de tabs y secciones se expande.
- Reemplazar
-
Acciones con icono + title en tax/shipping/brands
- Reutilizar
RowActionscon los handlers apropiados entax-ratesybrands(cuando aplique). - En
tax-ratesañadir handler de eliminar y reemplazar el botón de texto porRowActions.shippingya tieneRowActions.
- Reutilizar
-
Categories: padre y promote
- El selector de padre ya existe y filtra por
isParent, pero en modo edición la categoría aún se está renderizando como padre aunque ya no lo sea. Solución: permitir que el checkboxisParentse edite en cualquier momento y refrescar el listado de padres disponibles para excluir la categoría actual (lo cual ya está implementado). - Añadir tip claro: "Promover a parent no exige tener hijos; parent es un flag booleano."
- El selector de padre ya existe y filtra por
-
Dashboard stats sin 404
- Cambiar el
requireRoleinterno para que el dashboard admita tantoadmincomoeditory mapee correctamente. - Corregir el type-cast: el dashboard recibe
role: stringdel backoffice, no restringido acustomer|admin. Aceptar ambos.
- Cambiar el
-
404s en navegación
- Reemplazar
/orders/activey/backoffice/statspor rutas reales enpermissions.tsy en el dashboard. - Verificar que el 404 de
/auditproviene de un log pre-actualización; al recargar el backend, el endpoint/api/admin/auditexiste y devuelve 200 con cookie válida.
- Reemplazar
-
Auth y credenciales
- Verificar flujo de login del admin: el cliente hace
fetch('/api/auth/login')desde el proxy Next; la página/api/auth/logincorresponde aidentityno abackoffice. El cliente debe usar/api/backoffice/auth/login. Ajustarapi-client.tspara queauthApi.loginapunte a/api/backoffice/auth/loginyauthApi.mea/api/backoffice/auth/me. - Tras esto el cookie
backoffice_sessionqueda,/backoffice/auth/meresponde 200 y/admin/statspasa la auth.
- Verificar flujo de login del admin: el cliente hace
Acceptance evidence
- /settings: ancho efectivo mayor a 4xl.
- /products (edit): ancho del editor crece en pantallas anchas.
- /tax-rates, /shipping, /brands: columna de acciones con iconos y title.
- /categories: edición permite cambiar parent y promote.
- /dashboard: stats cargan 200 sin 404 cuando hay sesión backoffice válida.
- Verify verde.