Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d1d007fc7d | ||
|
|
093ae419d5 | ||
|
|
2b0d50c3d0 |
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user