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
|
// Las fotos se descargan del origen y se re-alojan en el mismo
|
||||||
// MinIO/S3 que ya usa el resto del catalogo (uploadFilesWorkflow ->
|
// MinIO/S3 que ya usa el resto del catalogo (uploadFilesWorkflow ->
|
||||||
// mismo File Module Provider de medusa-config.ts, ya corre en el NAS),
|
// mismo File Module Provider de medusa-config.ts, ya corre en el NAS).
|
||||||
// bajo el prefijo import-products/ para separarlas de ari-products/
|
// El bucket (S3_BUCKET=ari-products) es plano -- el provider de S3 de
|
||||||
// (subidas manuales desde el Admin).
|
// 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 MAX_IMAGE_BYTES = 8 * 1024 * 1024;
|
||||||
const IMAGE_FETCH_TIMEOUT_MS = 15000;
|
const IMAGE_FETCH_TIMEOUT_MS = 15000;
|
||||||
@@ -116,8 +121,13 @@ export async function POST(req: MedusaRequest<{ csv: string }>, res: MedusaRespo
|
|||||||
stockLocationService.listStockLocations({}),
|
stockLocationService.listStockLocations({}),
|
||||||
fulfillmentService.listShippingProfiles({}),
|
fulfillmentService.listShippingProfiles({}),
|
||||||
salesChannelService.listSalesChannels({}),
|
salesChannelService.listSalesChannels({}),
|
||||||
productService.listProductCategories({}),
|
// select explicito -- sin el, name/title llegaban undefined (el
|
||||||
productService.listProductCollections({}),
|
// 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;
|
const locationId = locations[0]?.id;
|
||||||
@@ -131,8 +141,12 @@ export async function POST(req: MedusaRequest<{ csv: string }>, res: MedusaRespo
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const categoryByName = new Map(categories.map((c) => [c.name.toLowerCase().trim(), c.id]));
|
const categoryByName = new Map(
|
||||||
const collectionByName = new Map(collections.map((c) => [c.title.toLowerCase().trim(), c.id]));
|
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[] = [];
|
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({
|
const { result: uploadedFiles } = await uploadFilesWorkflow(req.scope).run({
|
||||||
input: {
|
input: {
|
||||||
files: downloaded.map((file, i) => ({
|
files: downloaded.map((file, i) => ({
|
||||||
filename: `import-products/${Date.now()}-${index}-${i}.${file.extension}`,
|
filename: `${Date.now()}-${index}-${i}.${file.extension}`,
|
||||||
mimeType: file.mimeType,
|
mimeType: file.mimeType,
|
||||||
content: file.content,
|
content: file.content,
|
||||||
access: "public" as const,
|
access: "public" as const,
|
||||||
|
|||||||
Reference in new issue
Block a user