Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
63746eb090 | ||
|
|
2ca00d032d | ||
|
|
cb15749448 | ||
|
|
9e1adf4627 | ||
|
|
0ad74b6b70 | ||
|
|
d1d007fc7d | ||
|
|
11ac6d7949 | ||
|
|
093ae419d5 | ||
|
|
2b0d50c3d0 | ||
|
|
8126bb3d81 | ||
|
|
dedf4f0963 | ||
|
|
601378a77e |
No files matched your search
@@ -22,9 +22,14 @@ import { csvRowsToObjects, parseCsv } from "../../../lib/csv";
|
||||
//
|
||||
// Las fotos se descargan del origen y se re-alojan en el mismo
|
||||
// MinIO/S3 que ya usa el resto del catalogo (uploadFilesWorkflow ->
|
||||
// mismo File Module Provider de medusa-config.ts, ya corre en el NAS),
|
||||
// bajo el prefijo import-products/ para separarlas de ari-products/
|
||||
// (subidas manuales desde el Admin).
|
||||
// mismo File Module Provider de medusa-config.ts, ya corre en el NAS).
|
||||
// El bucket (S3_BUCKET=ari-products) es plano -- el provider de S3 de
|
||||
// Medusa descarta cualquier subcarpeta del filename (usa solo
|
||||
// path.parse().name + ulid, confirmado leyendo
|
||||
// @medusajs/file-s3/dist/services/s3-file.js), asi que no hay una
|
||||
// carpeta separada real para lo importado -- queda mezclado con el
|
||||
// resto de fotos del catalogo, mismo criterio de nombres unicos por
|
||||
// ulid que ya usa todo el sitio.
|
||||
|
||||
const MAX_IMAGE_BYTES = 8 * 1024 * 1024;
|
||||
const IMAGE_FETCH_TIMEOUT_MS = 15000;
|
||||
@@ -116,8 +121,13 @@ export async function POST(req: MedusaRequest<{ csv: string }>, res: MedusaRespo
|
||||
stockLocationService.listStockLocations({}),
|
||||
fulfillmentService.listShippingProfiles({}),
|
||||
salesChannelService.listSalesChannels({}),
|
||||
productService.listProductCategories({}),
|
||||
productService.listProductCollections({}),
|
||||
// select explicito -- sin el, name/title llegaban undefined (el
|
||||
// default de estos module services no siempre trae todos los
|
||||
// escalares, a diferencia de la capa HTTP del Admin API, confirmado
|
||||
// en vivo: la ruta /admin/product-categories con fields=id,name si
|
||||
// los trae completos).
|
||||
productService.listProductCategories({}, { select: ["id", "name"] }),
|
||||
productService.listProductCollections({}, { select: ["id", "title"] }),
|
||||
]);
|
||||
|
||||
const locationId = locations[0]?.id;
|
||||
@@ -131,8 +141,12 @@ export async function POST(req: MedusaRequest<{ csv: string }>, res: MedusaRespo
|
||||
return;
|
||||
}
|
||||
|
||||
const categoryByName = new Map(categories.map((c) => [c.name.toLowerCase().trim(), c.id]));
|
||||
const collectionByName = new Map(collections.map((c) => [c.title.toLowerCase().trim(), c.id]));
|
||||
const categoryByName = new Map(
|
||||
categories.filter((c) => c.name).map((c) => [c.name.toLowerCase().trim(), c.id]),
|
||||
);
|
||||
const collectionByName = new Map(
|
||||
collections.filter((c) => c.title).map((c) => [c.title.toLowerCase().trim(), c.id]),
|
||||
);
|
||||
|
||||
const results: RowResult[] = [];
|
||||
|
||||
@@ -155,7 +169,7 @@ export async function POST(req: MedusaRequest<{ csv: string }>, res: MedusaRespo
|
||||
const { result: uploadedFiles } = await uploadFilesWorkflow(req.scope).run({
|
||||
input: {
|
||||
files: downloaded.map((file, i) => ({
|
||||
filename: `import-products/${Date.now()}-${index}-${i}.${file.extension}`,
|
||||
filename: `${Date.now()}-${index}-${i}.${file.extension}`,
|
||||
mimeType: file.mimeType,
|
||||
content: file.content,
|
||||
access: "public" as const,
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
# ADR 0008 — Identidad visual "Navy & Coral" para ARI Shopping
|
||||
|
||||
**Estado:** aceptada (implementación en curso, por sub-fases)
|
||||
**Fecha:** 2026-08-27
|
||||
**Estado:** aceptada, con enmienda de paleta (ver §8) — sub-fases 1 a 4
|
||||
completas, sub-fase 5 parcial (ver §9)
|
||||
**Fecha:** 2026-08-27 (enmendada 2026-09-06)
|
||||
**Reemplaza a:** [ADR 0007](0007-identidad-visual-propia.md) (Opción 2, "Atelier cálido")
|
||||
|
||||
> **Nota de vigencia:** la paleta descrita en §4 ("Navy & Coral":
|
||||
> marino `#122844` / coral `#D85A30` / coral claro `#F0997B`) fue la
|
||||
> dirección **aprobada e implementada en las sub-fases 1-3**, pero fue
|
||||
> **reemplazada el mismo día** por una paleta azul/amarillo estilo
|
||||
> Walmart (rama `fix/adr0008-walmart-palette-blue-yellow`, ver §8). Los
|
||||
> valores reales en producción hoy están en §8, no en §4. Se deja §4
|
||||
> intacto como registro histórico de la decisión original.
|
||||
|
||||
## 1. Contexto
|
||||
|
||||
Este es el tercer intento de identidad visual propia para ARI Shopping,
|
||||
@@ -168,3 +177,66 @@ definitivo; los alias se eliminan por completo al cerrar la sub-fase
|
||||
`commerce-backend`, `platform-infra`, ni CI nuevo.
|
||||
- `docs-portal` se actualiza con capturas/descripción del resultado
|
||||
final una vez cada sub-fase esté validada en producción, no antes.
|
||||
|
||||
## 8. Enmienda 2026-08-27 tarde: pivote de paleta a azul/amarillo
|
||||
|
||||
Horas después de mergear la sub-fase 3 (product card + grid), se
|
||||
mergeó `fix/adr0008-walmart-palette-blue-yellow`: la paleta "Navy &
|
||||
Coral" de §4 se descartó en producción y se reemplazó por una paleta
|
||||
azul/amarillo (mismo patrón "estética Walmart" ya usado como
|
||||
referencia de UX en ADR 0007). Esta decisión **no quedó documentada
|
||||
como enmienda en su momento** — se detecta y se registra aquí recién
|
||||
el 2026-09-06, al auditar el estado real del código contra este
|
||||
documento.
|
||||
|
||||
Valores reales en `globals.css` hoy (los nombres de token de §4 se
|
||||
conservan, pero apuntan a estos valores, no a los de la tabla
|
||||
original):
|
||||
|
||||
| Token | Valor real | Uso |
|
||||
|---|---|---|
|
||||
| `--color-ari-marino` | `#0055B8` (azul) | ancla: header, footer, fondo de hero, botón de búsqueda |
|
||||
| `--color-ari-coral` | `#0055B8` (azul, mismo valor que marino) | CTA "Agregar al carrito", precio destacado |
|
||||
| `--color-ari-coral-claro` | `#FFC220` (amarillo) | badges de oferta/urgencia, acento del isotipo, botón "yellow" del hero |
|
||||
|
||||
Nota: `ari-coral` y `ari-marino` son el mismo azul (`#0055B8`) — a
|
||||
diferencia de la especificación original de §4, donde marino y coral
|
||||
eran colores distintos. Cualquier lectura de este ADR para decisiones
|
||||
de diseño futuras debe partir de esta tabla, no de §4.
|
||||
|
||||
El isotipo (mariposa de 4 elipses, §4) tampoco se implementó como se
|
||||
describe: el logo vigente es `logo-ari-circular.svg` (rama
|
||||
`adr0008-logo-circular-header`), un lockup circular distinto al
|
||||
descrito en la tabla de coordenadas de §4. `logo-ari.svg` (rectangular,
|
||||
el que sí sigue la spec original) quedó sin usarse en el header.
|
||||
|
||||
## 9. Estado real por sub-fase (auditado 2026-09-06)
|
||||
|
||||
Auditoría contra el código en `main`, no contra el plan de §6.
|
||||
|
||||
| # | Sub-fase | Estado | Evidencia |
|
||||
|---|---|---|---|
|
||||
| 1 | Tokens base + logo | ✅ completa (con la paleta enmendada en §8, no la de §4) | `globals.css`, `logo-ari.svg` inicial, luego reemplazado por circular en sub-fase posterior |
|
||||
| 2 | Header + footer (incl. limpieza de §5) | ✅ completa | `navbar.tsx`, restos arcoíris (gradiente ámbar/lima, línea cian/violeta/fucsia de §5) eliminados |
|
||||
| 3 | Product card + grid + badges | ✅ completa | `product-card.tsx` en tokens `ari-*` |
|
||||
| 4 | Home (hero, tiles, secciones) | ✅ completa | `hero-carousel.tsx`, `category-tiles.tsx` (varias iteraciones: pastel → scrim → foto flotante → foto más grande, todas mergeadas) |
|
||||
| 5 | Página de producto + drawers de carrito/wishlist | ⚠️ **parcial** | `product-purchase.tsx`/página de producto sí migraron (rama `adr0008-product-purchase-mobile-y-badge`). **`cart-drawer.tsx` y `wishlist-drawer.tsx` no tienen ningún token `ari-*` — nunca se tocaron.** No hay rama mergeada que los mencione. |
|
||||
|
||||
**Deuda abierta, no asumir resuelta:**
|
||||
|
||||
- Los alias de compatibilidad de §6 (`ari-ciruela`, `ari-cobre`,
|
||||
`ari-carbon`, `ari-carbon-oscuro`, `ari-terracota-oscuro`,
|
||||
`ari-hueso`) **siguen en uso real en `button.tsx`**
|
||||
(`focus-visible:ring-ari-cobre/40`, `bg-ari-ciruela`,
|
||||
`hover:border-ari-cobre`) — la condición de cierre de §6 ("los alias
|
||||
se eliminan por completo al cerrar la sub-fase 5") no se cumplió.
|
||||
Confirma que la sub-fase 5 no está cerrada, más allá de los drawers.
|
||||
- Ramas mergeadas fuera del plan original de 5 sub-fases de §6, sin
|
||||
enmienda que las registre: `adr0008-megamenu-mobile-overflow`,
|
||||
`adr0008-club-ari-y-novedades`, `adr0008-club-ari-imagen-azul`. Son
|
||||
trabajo real en producción, pero expanden el alcance de este ADR sin
|
||||
quedar documentado como tal.
|
||||
- `docs-portal` (este documento) es la primera actualización desde el
|
||||
cierre de la sub-fase 3 — la condición de §7 ("se actualiza con
|
||||
capturas/descripción... una vez cada sub-fase esté validada") no se
|
||||
vino cumpliendo sub-fase por sub-fase como se planeó.
|
||||
@@ -65,7 +65,7 @@ spec:
|
||||
memory: 64Mi
|
||||
|
||||
- name: migrations
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.218
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.222
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- node
|
||||
@@ -86,7 +86,7 @@ spec:
|
||||
|
||||
containers:
|
||||
- name: app
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.218
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-medusa:v1.0.222
|
||||
imagePullPolicy: IfNotPresent
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
|
||||
@@ -25,7 +25,7 @@ spec:
|
||||
runAsUser: 1001
|
||||
containers:
|
||||
- name: app
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.216
|
||||
image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.219
|
||||
env:
|
||||
- name: HEADLESS_PROVIDER
|
||||
value: medusa
|
||||
|
||||
Reference in new issue
Block a user