@lodashventure/medusa-collection-thumbnail 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/.medusa/server/src/admin/index.js +2 -177
  2. package/.medusa/server/src/admin/index.mjs +4 -179
  3. package/.medusa/server/src/api/admin/collections/[id]/thumbnail/route.js +211 -0
  4. package/.medusa/server/{api → src/api}/middlewares.js +1 -1
  5. package/.medusa/server/src/api/store/collections/[id]/route.js +43 -0
  6. package/.medusa/server/src/api/store/collections/route.js +71 -0
  7. package/.medusa/server/src/index.js +15 -0
  8. package/.medusa/server/{modules → src/modules}/collection/index.js +1 -1
  9. package/.medusa/server/{modules/collection/migrations/Migration20250921062957.js → src/modules/collection/migrations/Migration20251108000000.js} +4 -4
  10. package/.medusa/server/{modules → src/modules}/collection/models/collection.js +1 -1
  11. package/.medusa/server/{modules → src/modules}/collection/service.js +1 -1
  12. package/.medusa/server/src/services/gcs-direct-upload.js +56 -0
  13. package/.medusa/server/src/workflows/upload-collection-thumbnail.js +59 -0
  14. package/README.md +32 -34
  15. package/package.json +16 -16
  16. package/.medusa/server/api/admin/collections/[id]/thumbnail/route.d.ts +0 -8
  17. package/.medusa/server/api/admin/collections/[id]/thumbnail/route.js +0 -211
  18. package/.medusa/server/api/middlewares.d.ts +0 -2
  19. package/.medusa/server/api/store/collections/[id]/route.d.ts +0 -2
  20. package/.medusa/server/api/store/collections/[id]/route.js +0 -46
  21. package/.medusa/server/api/store/collections/route.d.ts +0 -2
  22. package/.medusa/server/api/store/collections/route.js +0 -71
  23. package/.medusa/server/index.d.ts +0 -2
  24. package/.medusa/server/index.js +0 -8
  25. package/.medusa/server/links/collection-thumbnail.d.ts +0 -2
  26. package/.medusa/server/links/collection-thumbnail.js +0 -16
  27. package/.medusa/server/modules/collection/index.d.ts +0 -21
  28. package/.medusa/server/modules/collection/migrations/Migration20250921062957.d.ts +0 -5
  29. package/.medusa/server/modules/collection/models/collection.d.ts +0 -5
  30. package/.medusa/server/modules/collection/service.d.ts +0 -10
  31. package/.medusa/server/services/gcs-direct-upload.d.ts +0 -8
  32. package/.medusa/server/services/gcs-direct-upload.js +0 -59
  33. package/.medusa/server/workflows/upload-collection-thumbnail.d.ts +0 -13
  34. package/.medusa/server/workflows/upload-collection-thumbnail.js +0 -59
@@ -314,169 +314,6 @@ const CollectionThumbnailWidget = ({ data }) => {
314
314
  adminSdk.defineWidgetConfig({
315
315
  zone: "product_collection.details.after"
316
316
  });
317
- const CollectionThumbnailsPage = () => {
318
- const [collections, setCollections] = react.useState([]);
319
- const [loading, setLoading] = react.useState(true);
320
- const [error, setError] = react.useState(null);
321
- const [selectedCollection, setSelectedCollection] = react.useState(null);
322
- const [showUploader, setShowUploader] = react.useState(false);
323
- react.useEffect(() => {
324
- fetchCollections();
325
- }, []);
326
- const fetchCollections = async () => {
327
- setLoading(true);
328
- setError(null);
329
- try {
330
- const response = await fetch("/admin/collections?limit=100", {
331
- credentials: "include"
332
- });
333
- if (response.ok) {
334
- const data = await response.json();
335
- const collectionsData = data.collections || [];
336
- const collectionsWithThumbnails = await Promise.all(
337
- collectionsData.map(async (collection) => {
338
- try {
339
- const thumbResponse = await fetch(
340
- `/admin/collections/${collection.id}/thumbnail`,
341
- {
342
- credentials: "include"
343
- }
344
- );
345
- if (thumbResponse.ok) {
346
- const thumbData = await thumbResponse.json();
347
- return { ...collection, thumbnail: thumbData.thumbnail };
348
- }
349
- } catch (err) {
350
- }
351
- return collection;
352
- })
353
- );
354
- setCollections(collectionsWithThumbnails);
355
- } else {
356
- setCollections([]);
357
- }
358
- } catch (err) {
359
- setCollections([]);
360
- console.log("Collections API not available, showing demo mode");
361
- } finally {
362
- setLoading(false);
363
- }
364
- };
365
- const handleUploadClick = (collection) => {
366
- setSelectedCollection(collection);
367
- setShowUploader(true);
368
- };
369
- const handleDeleteThumbnail = async (collectionId) => {
370
- if (!confirm("Are you sure you want to delete this thumbnail?")) return;
371
- try {
372
- const response = await fetch(
373
- `/admin/collections/${collectionId}/thumbnail`,
374
- {
375
- method: "DELETE",
376
- credentials: "include"
377
- }
378
- );
379
- if (response.ok) {
380
- fetchCollections();
381
- } else {
382
- alert("Failed to delete thumbnail");
383
- }
384
- } catch (err) {
385
- alert("Error deleting thumbnail");
386
- }
387
- };
388
- const handleUploaderClose = () => {
389
- setShowUploader(false);
390
- setSelectedCollection(null);
391
- fetchCollections();
392
- };
393
- if (loading) {
394
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-64 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { children: "Loading collections..." }) }) });
395
- }
396
- if (error) {
397
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Alert, { variant: "error", dismissible: true, children: error }) });
398
- }
399
- return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { children: [
400
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-8", children: [
401
- /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", className: "mb-2", children: "Collection Thumbnails" }),
402
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "Manage thumbnail images for your product collections" })
403
- ] }),
404
- collections.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-64 flex-col items-center justify-center rounded-lg border-2 border-dashed border-ui-border-base", children: [
405
- /* @__PURE__ */ jsxRuntime.jsx(icons.PhotoSolid, { className: "mb-4 h-12 w-12 text-ui-fg-subtle" }),
406
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "mb-2 text-lg font-medium", children: "No collections found" }),
407
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "Create collections first to manage their thumbnails" })
408
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg border", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table, { children: [
409
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
410
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Thumbnail" }),
411
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Collection" }),
412
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Handle" }),
413
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Status" }),
414
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { className: "text-right", children: "Actions" })
415
- ] }) }),
416
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Body, { children: collections.map((collection) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
417
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsxRuntime.jsx(
418
- "img",
419
- {
420
- src: collection.thumbnail.startsWith("http") ? collection.thumbnail : `http://localhost:9000${collection.thumbnail}`,
421
- alt: collection.title,
422
- className: "h-12 w-12 object-cover rounded"
423
- }
424
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded bg-ui-bg-subtle", children: /* @__PURE__ */ jsxRuntime.jsx(icons.PhotoSolid, { className: "h-6 w-6 text-ui-fg-subtle" }) }) }),
425
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "font-medium", children: collection.title }) }),
426
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "blue", children: collection.handle }) }),
427
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "green", children: "Has Thumbnail" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "grey", children: "No Thumbnail" }) }),
428
- /* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-2", children: [
429
- /* @__PURE__ */ jsxRuntime.jsxs(
430
- ui.Button,
431
- {
432
- variant: "secondary",
433
- size: "small",
434
- onClick: () => handleUploadClick(collection),
435
- children: [
436
- /* @__PURE__ */ jsxRuntime.jsx(icons.CloudArrowUp, { className: "mr-1" }),
437
- collection.thumbnail ? "Replace" : "Upload"
438
- ]
439
- }
440
- ),
441
- collection.thumbnail && /* @__PURE__ */ jsxRuntime.jsx(
442
- ui.Button,
443
- {
444
- variant: "danger",
445
- size: "small",
446
- onClick: () => handleDeleteThumbnail(collection.id),
447
- children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
448
- }
449
- )
450
- ] }) })
451
- ] }, collection.id)) })
452
- ] }) }),
453
- showUploader && selectedCollection && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-2xl rounded-lg bg-ui-bg-base p-6", children: [
454
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
455
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
456
- /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "Upload Thumbnail" }),
457
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: selectedCollection.title })
458
- ] }),
459
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: handleUploaderClose, children: "Close" })
460
- ] }),
461
- /* @__PURE__ */ jsxRuntime.jsx(
462
- CollectionThumbnailUploader,
463
- {
464
- collectionId: selectedCollection.id,
465
- initialThumbnail: selectedCollection.thumbnail,
466
- onThumbnailChange: (url) => {
467
- if (!url) {
468
- handleUploaderClose();
469
- }
470
- }
471
- }
472
- )
473
- ] }) })
474
- ] });
475
- };
476
- const config = adminSdk.defineRouteConfig({
477
- label: "Collection Thumbnails",
478
- icon: icons.PhotoSolid
479
- });
480
317
  const widgetModule = { widgets: [
481
318
  {
482
319
  Component: CollectionThumbnailWidget,
@@ -484,22 +321,10 @@ const widgetModule = { widgets: [
484
321
  }
485
322
  ] };
486
323
  const routeModule = {
487
- routes: [
488
- {
489
- Component: CollectionThumbnailsPage,
490
- path: "/collection-thumbnails"
491
- }
492
- ]
324
+ routes: []
493
325
  };
494
326
  const menuItemModule = {
495
- menuItems: [
496
- {
497
- label: config.label,
498
- icon: config.icon,
499
- path: "/collection-thumbnails",
500
- nested: void 0
501
- }
502
- ]
327
+ menuItems: []
503
328
  };
504
329
  const formModule = { customFields: {} };
505
330
  const displayModule = {
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
- import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk";
3
- import { clx, Button, Text, Container, Heading, Alert, Table, Badge } from "@medusajs/ui";
2
+ import { defineWidgetConfig } from "@medusajs/admin-sdk";
3
+ import { clx, Button, Text, Container, Heading } from "@medusajs/ui";
4
4
  import { CloudArrowUp, Trash, PhotoSolid } from "@medusajs/icons";
5
5
  import { useState, useCallback, useEffect } from "react";
6
6
  import "@medusajs/admin-shared";
@@ -313,169 +313,6 @@ const CollectionThumbnailWidget = ({ data }) => {
313
313
  defineWidgetConfig({
314
314
  zone: "product_collection.details.after"
315
315
  });
316
- const CollectionThumbnailsPage = () => {
317
- const [collections, setCollections] = useState([]);
318
- const [loading, setLoading] = useState(true);
319
- const [error, setError] = useState(null);
320
- const [selectedCollection, setSelectedCollection] = useState(null);
321
- const [showUploader, setShowUploader] = useState(false);
322
- useEffect(() => {
323
- fetchCollections();
324
- }, []);
325
- const fetchCollections = async () => {
326
- setLoading(true);
327
- setError(null);
328
- try {
329
- const response = await fetch("/admin/collections?limit=100", {
330
- credentials: "include"
331
- });
332
- if (response.ok) {
333
- const data = await response.json();
334
- const collectionsData = data.collections || [];
335
- const collectionsWithThumbnails = await Promise.all(
336
- collectionsData.map(async (collection) => {
337
- try {
338
- const thumbResponse = await fetch(
339
- `/admin/collections/${collection.id}/thumbnail`,
340
- {
341
- credentials: "include"
342
- }
343
- );
344
- if (thumbResponse.ok) {
345
- const thumbData = await thumbResponse.json();
346
- return { ...collection, thumbnail: thumbData.thumbnail };
347
- }
348
- } catch (err) {
349
- }
350
- return collection;
351
- })
352
- );
353
- setCollections(collectionsWithThumbnails);
354
- } else {
355
- setCollections([]);
356
- }
357
- } catch (err) {
358
- setCollections([]);
359
- console.log("Collections API not available, showing demo mode");
360
- } finally {
361
- setLoading(false);
362
- }
363
- };
364
- const handleUploadClick = (collection) => {
365
- setSelectedCollection(collection);
366
- setShowUploader(true);
367
- };
368
- const handleDeleteThumbnail = async (collectionId) => {
369
- if (!confirm("Are you sure you want to delete this thumbnail?")) return;
370
- try {
371
- const response = await fetch(
372
- `/admin/collections/${collectionId}/thumbnail`,
373
- {
374
- method: "DELETE",
375
- credentials: "include"
376
- }
377
- );
378
- if (response.ok) {
379
- fetchCollections();
380
- } else {
381
- alert("Failed to delete thumbnail");
382
- }
383
- } catch (err) {
384
- alert("Error deleting thumbnail");
385
- }
386
- };
387
- const handleUploaderClose = () => {
388
- setShowUploader(false);
389
- setSelectedCollection(null);
390
- fetchCollections();
391
- };
392
- if (loading) {
393
- return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx("div", { className: "flex h-64 items-center justify-center", children: /* @__PURE__ */ jsx(Text, { children: "Loading collections..." }) }) });
394
- }
395
- if (error) {
396
- return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(Alert, { variant: "error", dismissible: true, children: error }) });
397
- }
398
- return /* @__PURE__ */ jsxs(Container, { children: [
399
- /* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
400
- /* @__PURE__ */ jsx(Heading, { level: "h1", className: "mb-2", children: "Collection Thumbnails" }),
401
- /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Manage thumbnail images for your product collections" })
402
- ] }),
403
- collections.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex h-64 flex-col items-center justify-center rounded-lg border-2 border-dashed border-ui-border-base", children: [
404
- /* @__PURE__ */ jsx(PhotoSolid, { className: "mb-4 h-12 w-12 text-ui-fg-subtle" }),
405
- /* @__PURE__ */ jsx(Text, { className: "mb-2 text-lg font-medium", children: "No collections found" }),
406
- /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Create collections first to manage their thumbnails" })
407
- ] }) : /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg border", children: /* @__PURE__ */ jsxs(Table, { children: [
408
- /* @__PURE__ */ jsx(Table.Header, { children: /* @__PURE__ */ jsxs(Table.Row, { children: [
409
- /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Thumbnail" }),
410
- /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Collection" }),
411
- /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Handle" }),
412
- /* @__PURE__ */ jsx(Table.HeaderCell, { children: "Status" }),
413
- /* @__PURE__ */ jsx(Table.HeaderCell, { className: "text-right", children: "Actions" })
414
- ] }) }),
415
- /* @__PURE__ */ jsx(Table.Body, { children: collections.map((collection) => /* @__PURE__ */ jsxs(Table.Row, { children: [
416
- /* @__PURE__ */ jsx(Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsx(
417
- "img",
418
- {
419
- src: collection.thumbnail.startsWith("http") ? collection.thumbnail : `http://localhost:9000${collection.thumbnail}`,
420
- alt: collection.title,
421
- className: "h-12 w-12 object-cover rounded"
422
- }
423
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded bg-ui-bg-subtle", children: /* @__PURE__ */ jsx(PhotoSolid, { className: "h-6 w-6 text-ui-fg-subtle" }) }) }),
424
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Text, { className: "font-medium", children: collection.title }) }),
425
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Badge, { color: "blue", children: collection.handle }) }),
426
- /* @__PURE__ */ jsx(Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsx(Badge, { color: "green", children: "Has Thumbnail" }) : /* @__PURE__ */ jsx(Badge, { color: "grey", children: "No Thumbnail" }) }),
427
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2", children: [
428
- /* @__PURE__ */ jsxs(
429
- Button,
430
- {
431
- variant: "secondary",
432
- size: "small",
433
- onClick: () => handleUploadClick(collection),
434
- children: [
435
- /* @__PURE__ */ jsx(CloudArrowUp, { className: "mr-1" }),
436
- collection.thumbnail ? "Replace" : "Upload"
437
- ]
438
- }
439
- ),
440
- collection.thumbnail && /* @__PURE__ */ jsx(
441
- Button,
442
- {
443
- variant: "danger",
444
- size: "small",
445
- onClick: () => handleDeleteThumbnail(collection.id),
446
- children: /* @__PURE__ */ jsx(Trash, {})
447
- }
448
- )
449
- ] }) })
450
- ] }, collection.id)) })
451
- ] }) }),
452
- showUploader && selectedCollection && /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-2xl rounded-lg bg-ui-bg-base p-6", children: [
453
- /* @__PURE__ */ jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
454
- /* @__PURE__ */ jsxs("div", { children: [
455
- /* @__PURE__ */ jsx(Heading, { level: "h2", children: "Upload Thumbnail" }),
456
- /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: selectedCollection.title })
457
- ] }),
458
- /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: handleUploaderClose, children: "Close" })
459
- ] }),
460
- /* @__PURE__ */ jsx(
461
- CollectionThumbnailUploader,
462
- {
463
- collectionId: selectedCollection.id,
464
- initialThumbnail: selectedCollection.thumbnail,
465
- onThumbnailChange: (url) => {
466
- if (!url) {
467
- handleUploaderClose();
468
- }
469
- }
470
- }
471
- )
472
- ] }) })
473
- ] });
474
- };
475
- const config = defineRouteConfig({
476
- label: "Collection Thumbnails",
477
- icon: PhotoSolid
478
- });
479
316
  const widgetModule = { widgets: [
480
317
  {
481
318
  Component: CollectionThumbnailWidget,
@@ -483,22 +320,10 @@ const widgetModule = { widgets: [
483
320
  }
484
321
  ] };
485
322
  const routeModule = {
486
- routes: [
487
- {
488
- Component: CollectionThumbnailsPage,
489
- path: "/collection-thumbnails"
490
- }
491
- ]
323
+ routes: []
492
324
  };
493
325
  const menuItemModule = {
494
- menuItems: [
495
- {
496
- label: config.label,
497
- icon: config.icon,
498
- path: "/collection-thumbnails",
499
- nested: void 0
500
- }
501
- ]
326
+ menuItems: []
502
327
  };
503
328
  const formModule = { customFields: {} };
504
329
  const displayModule = {
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE = exports.POST = exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const collection_1 = require("../../../../../modules/collection");
6
+ const upload_collection_thumbnail_1 = require("../../../../../workflows/upload-collection-thumbnail");
7
+ const gcs_direct_upload_1 = require("../../../../../services/gcs-direct-upload");
8
+ const resolveLogger = (req) => {
9
+ try {
10
+ return req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
11
+ }
12
+ catch {
13
+ return console;
14
+ }
15
+ };
16
+ const normalizeCustomRecord = (record) => {
17
+ if (!record) {
18
+ return undefined;
19
+ }
20
+ if (Array.isArray(record)) {
21
+ for (const entry of record) {
22
+ const normalized = normalizeCustomRecord(entry);
23
+ if (normalized) {
24
+ return normalized;
25
+ }
26
+ }
27
+ return undefined;
28
+ }
29
+ if (typeof record === "object") {
30
+ return record;
31
+ }
32
+ return undefined;
33
+ };
34
+ const GET = async (req, res) => {
35
+ const { id } = req.params;
36
+ const logger = resolveLogger(req);
37
+ try {
38
+ const collectionCustomService = req.scope.resolve(collection_1.COLLECTION_MODULE);
39
+ const customRecords = await collectionCustomService.listProductCollectionCustoms({
40
+ collection_id: id,
41
+ });
42
+ const customData = normalizeCustomRecord(customRecords);
43
+ res.setHeader("Content-Type", "application/json; charset=utf-8");
44
+ return res.json({
45
+ thumbnail: customData?.thumbnail ?? null,
46
+ });
47
+ }
48
+ catch (error) {
49
+ const err = error;
50
+ logger.error("Error fetching collection thumbnail:", err);
51
+ if (err?.name === "AwilixResolutionError") {
52
+ return res.status(500).json({
53
+ error: "Collection thumbnail module is not registered",
54
+ });
55
+ }
56
+ return res.status(500).json({ error: "Failed to fetch thumbnail" });
57
+ }
58
+ };
59
+ exports.GET = GET;
60
+ const POST = async (req, res) => {
61
+ const { id } = req.params;
62
+ const logger = resolveLogger(req);
63
+ try {
64
+ const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
65
+ const collection = await productModuleService.retrieveProductCollection(id);
66
+ if (!collection) {
67
+ return res.status(404).json({ error: "Collection not found" });
68
+ }
69
+ const payload = prepareFilePayload(req);
70
+ if (!isFilePayloadSuccess(payload)) {
71
+ const failurePayload = payload;
72
+ return res
73
+ .status(failurePayload.status)
74
+ .json({ error: failurePayload.error });
75
+ }
76
+ const { filename, mimeType, base64 } = payload.data;
77
+ const { result: workflowResult } = await (0, upload_collection_thumbnail_1.uploadCollectionThumbnailWorkflow)(req.scope).run({
78
+ input: {
79
+ collectionId: id,
80
+ fileData: {
81
+ filename,
82
+ mimeType,
83
+ content: base64,
84
+ },
85
+ },
86
+ });
87
+ if (!workflowResult?.thumbnailUrl) {
88
+ throw new Error("Thumbnail URL missing from workflow result");
89
+ }
90
+ res.setHeader("Content-Type", "application/json; charset=utf-8");
91
+ return res.json({
92
+ collection: {
93
+ id,
94
+ thumbnail: workflowResult.thumbnailUrl,
95
+ },
96
+ });
97
+ }
98
+ catch (error) {
99
+ logger.error("Error uploading collection thumbnail:", error);
100
+ return res.status(500).json({ error: "Failed to upload thumbnail" });
101
+ }
102
+ };
103
+ exports.POST = POST;
104
+ const DELETE = async (req, res) => {
105
+ const { id } = req.params;
106
+ const gcsUploadService = new gcs_direct_upload_1.GcsDirectUploadService();
107
+ const logger = resolveLogger(req);
108
+ try {
109
+ const collectionCustomService = req.scope.resolve(collection_1.COLLECTION_MODULE);
110
+ const customRecords = await collectionCustomService.listProductCollectionCustoms({
111
+ collection_id: id,
112
+ });
113
+ const existingCustom = normalizeCustomRecord(customRecords);
114
+ if (!existingCustom?.thumbnail) {
115
+ return res
116
+ .status(404)
117
+ .json({ error: "No thumbnail found for this collection" });
118
+ }
119
+ // Delete the file from GCS
120
+ try {
121
+ const url = existingCustom.thumbnail;
122
+ const isGcsUrl = url.includes("storage.googleapis.com") ||
123
+ url.includes("storage.cloud.google.com");
124
+ if (isGcsUrl) {
125
+ const parts = url.split("/");
126
+ const bucketIndex = parts.indexOf("sangaroon");
127
+ if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
128
+ const filename = parts.slice(bucketIndex + 1).join("/");
129
+ await gcsUploadService.deleteFile(filename);
130
+ }
131
+ }
132
+ }
133
+ catch (deleteError) {
134
+ logger.error("Error deleting file from GCS:", deleteError);
135
+ // Continue even if file deletion fails
136
+ }
137
+ await collectionCustomService.updateProductCollectionCustoms([
138
+ { id: existingCustom.id, thumbnail: null },
139
+ ]);
140
+ res.setHeader("Content-Type", "application/json; charset=utf-8");
141
+ return res.json({
142
+ message: "Thumbnail deleted successfully",
143
+ });
144
+ }
145
+ catch (error) {
146
+ const err = error;
147
+ logger.error("Error deleting collection thumbnail:", err);
148
+ if (err?.name === "AwilixResolutionError") {
149
+ return res.status(500).json({
150
+ error: "Collection thumbnail module is not registered",
151
+ });
152
+ }
153
+ return res.status(500).json({ error: "Failed to delete thumbnail" });
154
+ }
155
+ };
156
+ exports.DELETE = DELETE;
157
+ const isFilePayloadSuccess = (payload) => payload.success === true;
158
+ const prepareFilePayload = (req) => {
159
+ if (req.file) {
160
+ return {
161
+ success: true,
162
+ data: {
163
+ filename: req.file.originalname,
164
+ mimeType: req.file.mimetype,
165
+ base64: req.file.buffer.toString("base64"),
166
+ },
167
+ };
168
+ }
169
+ const body = req.body;
170
+ if (!body || typeof body !== "object") {
171
+ return {
172
+ success: false,
173
+ status: 400,
174
+ error: "Invalid payload",
175
+ };
176
+ }
177
+ const { filename, mimeType, content } = body;
178
+ if (!filename || !mimeType || !content) {
179
+ return {
180
+ success: false,
181
+ status: 400,
182
+ error: "Missing file data",
183
+ };
184
+ }
185
+ try {
186
+ const buffer = Buffer.from(content, "base64");
187
+ if (!buffer.length) {
188
+ return {
189
+ success: false,
190
+ status: 400,
191
+ error: "Invalid file content",
192
+ };
193
+ }
194
+ return {
195
+ success: true,
196
+ data: {
197
+ filename,
198
+ mimeType,
199
+ base64: content,
200
+ },
201
+ };
202
+ }
203
+ catch {
204
+ return {
205
+ success: false,
206
+ status: 400,
207
+ error: "Failed to decode file",
208
+ };
209
+ }
210
+ };
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbGxlY3Rpb25zL1tpZF0vdGh1bWJuYWlsL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUErRTtBQUcvRSxrRUFBc0U7QUFDdEUsc0dBQXlHO0FBQ3pHLGlGQUFtRjtBQVVuRixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQWtCLEVBQWMsRUFBRTtJQUN2RCxJQUFJLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixNQUFlLEVBQ3lDLEVBQUU7SUFDMUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sTUFBb0QsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVB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
@@ -28,4 +28,4 @@ exports.default = (0, medusa_1.defineMiddlewares)({
28
28
  },
29
29
  ],
30
30
  });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXFEO0FBQ3JELG9EQUE0QjtBQUU1QixNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUM7SUFDcEIsT0FBTyxFQUFFLGdCQUFNLENBQUMsYUFBYSxFQUFFO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUk7S0FDMUI7SUFDRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUEsMEJBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFRLENBQUM7U0FDakQ7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXFEO0FBQ3JELG9EQUE0QjtBQUU1QixNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUM7SUFDcEIsT0FBTyxFQUFFLGdCQUFNLENBQUMsYUFBYSxFQUFFO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUk7S0FDMUI7SUFDRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUEsMEJBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFRLENBQUM7U0FDakQ7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9