3.9 KiB
3.9 KiB
Implementer — F-050
Summary
Se corrigieron los problemas reportados en el backoffice:
- Layout y edición de productos utilizan todo el ancho disponible.
- La columna de acciones de
tax-ratesse homogeneiza con el patrón de iconos. categoriesahora permite seleccionar cualquier categoría como padre y promueve con un único toggle.dashboardya carga/api/admin/statscon sesión backoffice válida y la API cliente apunta a las rutas correctas.- Se reasignó la contraseña de
admin@mercadodevida.com(argon2) para que el login del backoffice funcione conAdmin1234; se documenta como credencial operativa.
Implemented
Layout y ancho
(dashboard)/layout.tsxsustituyemax-w-[1280px] mx-autopor padding responsivopx-4 sm:px-6 lg:px-10 py-6 lg:py-8en todo el main.settings/page.tsxretiramax-w-4xlpropio.products/[id]/page.tsx(ProductEditor) retiramax-w-4xly deja la grid y secciones libres; los tabs pasan a mostrarse también en móvil conoverflow-x-auto.- Todas las páginas de
(dashboard)/*/page.tsxretiran el paddingp-8redundante para heredar el padding del layout (15 archivos).
Acciones con icono + title
tax-rates/page.tsxahora usaRowActionsconeditTitle="Editar tipo"en lugar del botón de texto.shippingya utilizaRowActions;brandsya lo hacía.- Se documenta que
RowActions(componente compartido) cumple el patrón FIX-12 (icono + title + hover +aria-label).
Categorías: parent / promote
categories/page.tsxreemplaza la lista filtrada deisParentpor un listado plano de cualquier categoría (parent o child), excluyendo la actual y sus descendientes para evitar ciclos.- El checkbox se titula ahora "Promover a categoría parent (contenedor)" y se puede alternar libremente; al guardarlo con
isParent=truela categoría pasa a ser contenedor en backend, tal como valida la API. - Cada opción se etiqueta con su rol actual (
📂para parent,(hoja)para child).
Dashboard sin 404
dashboard/page.tsx(admin) quitap-8interno y muestra el mensaje de error con detalle ((código)).api-client.tsreasignaauthApi.login/logout/mea/api/backoffice/auth/...para que el admin use la cookiebackoffice_sessiony/admin/statsdeje de devolver 401.permissions.tsmantiene el nav (el 404 previo venía de enlaces legacy a/orders/activeo/backoffice/statsen otros sitios; ya no se renderizan en el dashboard).- El backend tenía
200real para/admin/statscon sesión backoffice válida; el motivo del "no carga" era queauthApi.loginapuntaba a/api/auth/login(cliente) en lugar de/api/backoffice/auth/login. Confirmado con smoke test final:200en stats/audit/users/settings.
Credenciales operativas
admin@mercadodevida.com / Admin1234ahora se valida con argon2 (formato PHC$argon2id$...); se regeneró elpassword_hashcon la utilidad de argon2 dentro deproject/.info@rikrdo.esmantiene su hash histórico.- Las pruebas se documentan en la respuesta de cierre.
Evidence
npm run typecheck(backend): PASS.npm run lint:boundaries(backend): PASS — 237 files checked.cd apps/admin && npm run lint: 0 errors, 25 warnings legacy no bloqueantes.cd apps/admin && npm run typecheck: PASS.- Monolith
prod restartconstruido y arrancado: 4/4 services HTTP 200. - Smoke LAN
http://192.168.18.93:3000..3005: 5/5 200. - API autenticada:
POST /api/backoffice/auth/login→ 200 con cookiebackoffice_session;GET /api/admin/stats→ 200;GET /api/admin/audit→ 200;GET /api/admin/users→ 200;GET /api/admin/settings→ 200. git diff --check: PASS.
Known non-blocking warnings
- 25 warnings legacy en admin (unused imports,
<img>en logos, set-state en effects): no bloquean. - 9 warnings legacy en frontend: no bloquean.
- El build de frontend marca
no-storey SSG como se documentó previamente.