@lodashventure/medusa-brand 1.2.20 → 1.2.25
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.
- package/.medusa/server/src/admin/index.js +1191 -556
- package/.medusa/server/src/admin/index.mjs +1165 -530
- package/.medusa/server/src/api/admin/brands/[id]/image/route.js +178 -0
- package/.medusa/server/src/api/admin/brands/[id]/logo/route.js +179 -0
- package/.medusa/server/src/api/admin/brands/[id]/products/route.js +55 -0
- package/.medusa/server/src/api/admin/brands/[id]/route.js +251 -0
- package/.medusa/server/src/api/admin/brands/route.js +276 -0
- package/.medusa/server/src/api/admin/products/[id]/brand/route.js +117 -0
- package/.medusa/server/src/api/middlewares/attach-brand-to-products.js +110 -0
- package/.medusa/server/src/api/middlewares.js +53 -0
- package/.medusa/server/src/api/store/brands/[id]/route.js +31 -0
- package/.medusa/server/src/api/store/brands/route.js +99 -0
- package/.medusa/server/{index.js → src/index.js} +1 -1
- package/.medusa/server/{modules → src/modules}/brand/index.js +1 -1
- package/.medusa/server/src/modules/brand/models/brand.js +40 -0
- package/.medusa/server/{modules → src/modules}/brand/service.js +1 -1
- package/.medusa/server/src/services/gcs-direct-upload.js +93 -0
- package/.medusa/server/src/workflows/upload-brand-image.js +66 -0
- package/package.json +11 -10
- package/.medusa/server/api/admin/brands/[id]/image/route.d.ts +0 -5
- package/.medusa/server/api/admin/brands/[id]/image/route.js +0 -119
- package/.medusa/server/api/admin/brands/[id]/logo/route.d.ts +0 -5
- package/.medusa/server/api/admin/brands/[id]/logo/route.js +0 -119
- package/.medusa/server/api/admin/brands/[id]/products/route.d.ts +0 -2
- package/.medusa/server/api/admin/brands/[id]/products/route.js +0 -52
- package/.medusa/server/api/admin/brands/[id]/route.d.ts +0 -5
- package/.medusa/server/api/admin/brands/[id]/route.js +0 -112
- package/.medusa/server/api/admin/brands/route.d.ts +0 -4
- package/.medusa/server/api/admin/brands/route.js +0 -76
- package/.medusa/server/api/admin/products/[id]/brand/route.d.ts +0 -5
- package/.medusa/server/api/admin/products/[id]/brand/route.js +0 -117
- package/.medusa/server/api/middlewares/attach-brand-to-products.d.ts +0 -2
- package/.medusa/server/api/middlewares/attach-brand-to-products.js +0 -105
- package/.medusa/server/api/middlewares.d.ts +0 -6
- package/.medusa/server/api/middlewares.js +0 -27
- package/.medusa/server/api/store/brands/route.d.ts +0 -2
- package/.medusa/server/api/store/brands/route.js +0 -53
- package/.medusa/server/index.d.ts +0 -1
- package/.medusa/server/modules/brand/index.d.ts +0 -35
- package/.medusa/server/modules/brand/migrations/Migration20251021070648.d.ts +0 -5
- package/.medusa/server/modules/brand/migrations/Migration20251021070648.js +0 -28
- package/.medusa/server/modules/brand/models/brand.d.ts +0 -16
- package/.medusa/server/modules/brand/models/brand.js +0 -43
- package/.medusa/server/modules/brand/service.d.ts +0 -21
- package/.medusa/server/services/gcs-direct-upload.d.ts +0 -8
- package/.medusa/server/services/gcs-direct-upload.js +0 -55
- package/.medusa/server/workflows/upload-brand-image.d.ts +0 -15
- package/.medusa/server/workflows/upload-brand-image.js +0 -57
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uploadBrandImageWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const gcs_direct_upload_1 = require("../services/gcs-direct-upload");
|
|
6
|
+
const uploadBrandImageStep = (0, workflows_sdk_1.createStep)("upload-brand-image-step", async ({ brandId, imageType, fileData }, { container }) => {
|
|
7
|
+
const brandService = container.resolve("brandCustom");
|
|
8
|
+
const gcsUploadService = new gcs_direct_upload_1.GcsDirectUploadService();
|
|
9
|
+
// Retrieve existing brand
|
|
10
|
+
const brand = await brandService.retrieveBrand(brandId);
|
|
11
|
+
if (!brand) {
|
|
12
|
+
throw new Error(`Brand with id ${brandId} not found`);
|
|
13
|
+
}
|
|
14
|
+
const timestamp = Date.now();
|
|
15
|
+
const fileExtensionMap = {
|
|
16
|
+
"image/jpeg": "jpg",
|
|
17
|
+
"image/jpg": "jpg",
|
|
18
|
+
"image/png": "png",
|
|
19
|
+
"image/webp": "webp",
|
|
20
|
+
"image/svg+xml": "svg",
|
|
21
|
+
};
|
|
22
|
+
const originalExt = fileData.filename
|
|
23
|
+
?.split(".")
|
|
24
|
+
.pop()
|
|
25
|
+
?.toLowerCase()
|
|
26
|
+
.replace(/[^a-z0-9]/g, "");
|
|
27
|
+
const fallbackExt = fileExtensionMap[fileData.mimeType] || "bin";
|
|
28
|
+
const ext = originalExt && originalExt.length <= 5 ? originalExt : fallbackExt;
|
|
29
|
+
const filename = `brands/${imageType}-${brandId}-${timestamp}.${ext}`;
|
|
30
|
+
const buffer = Buffer.from(fileData.content, "base64");
|
|
31
|
+
// Upload directly to GCS
|
|
32
|
+
const publicUrl = await gcsUploadService.uploadFile(filename, buffer, fileData.mimeType);
|
|
33
|
+
// Delete old image if it exists
|
|
34
|
+
const oldImageUrl = brand[imageType];
|
|
35
|
+
if (oldImageUrl) {
|
|
36
|
+
try {
|
|
37
|
+
const objectKey = gcsUploadService.getObjectKeyFromUrl(oldImageUrl);
|
|
38
|
+
if (objectKey) {
|
|
39
|
+
await gcsUploadService.deleteFile(objectKey);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error(`Failed to delete old ${imageType}:`, error);
|
|
44
|
+
// Continue even if deletion fails
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Update brand with new image URL
|
|
48
|
+
const updateData = {};
|
|
49
|
+
updateData[imageType] = publicUrl;
|
|
50
|
+
await brandService.updateBrands([
|
|
51
|
+
{
|
|
52
|
+
id: brandId,
|
|
53
|
+
...updateData,
|
|
54
|
+
},
|
|
55
|
+
]);
|
|
56
|
+
return new workflows_sdk_1.StepResponse({
|
|
57
|
+
brandId,
|
|
58
|
+
imageType,
|
|
59
|
+
imageUrl: publicUrl,
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
exports.uploadBrandImageWorkflow = (0, workflows_sdk_1.createWorkflow)("upload-brand-image", (input) => {
|
|
63
|
+
const result = uploadBrandImageStep(input);
|
|
64
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWJyYW5kLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy91cGxvYWQtYnJhbmQtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTTJDO0FBQzNDLHFFQUF1RTtBQVl2RSxNQUFNLG9CQUFvQixHQUFHLElBQUEsMEJBQVUsRUFDckMseUJBQXlCLEVBQ3pCLEtBQUssRUFDSCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUF5QixFQUN2RCxFQUFFLFNBQVMsRUFBRSxFQUNiLEVBQUU7SUFDRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBUSxDQUFDO0lBQzdELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQ0FBc0IsRUFBRSxDQUFDO0lBRXRELDBCQUEwQjtJQUMxQixNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsT0FBTyxZQUFZLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sZ0JBQWdCLEdBQTJCO1FBQy9DLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLFlBQVksRUFBRSxNQUFNO1FBQ3BCLGVBQWUsRUFBRSxLQUFLO0tBQ3ZCLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUTtRQUNuQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDWCxHQUFHLEVBQUU7UUFDTixFQUFFLFdBQVcsRUFBRTtTQUNkLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFN0IsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNqRSxNQUFNLEdBQUcsR0FDUCxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxJQUFJLE9BQU8sSUFBSSxTQUFTLElBQUksR0FBRyxFQUFFLENBQUM7SUFFdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXZELHlCQUF5QjtJQUN6QixNQUFNLFNBQVMsR0FBRyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsQ0FDakQsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLENBQUMsUUFBUSxDQUNsQixDQUFDO0lBRUYsZ0NBQWdDO0lBQ2hDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsU0FBUyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0Qsa0NBQWtDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztJQUMzQixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRWxDLE1BQU0sWUFBWSxDQUFDLFlBQVksQ0FBQztRQUM5QjtZQUNFLEVBQUUsRUFBRSxPQUFPO1lBQ1gsR0FBRyxVQUFVO1NBQ2Q7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixPQUFPO1FBQ1AsU0FBUztRQUNULFFBQVEsRUFBRSxTQUFTO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FDRixDQUFDO0FBRVcsUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDhCQUFjLEVBQ3BELG9CQUFvQixFQUNwQixDQUFDLEtBQTBDLEVBQUUsRUFBRTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxPQUFPLElBQUksZ0NBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUNGLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodashventure/medusa-brand",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.25",
|
|
4
4
|
"description": "Brand management plugin for Medusa v2",
|
|
5
5
|
"author": "Lodashventure",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,29 +16,30 @@
|
|
|
16
16
|
],
|
|
17
17
|
"exports": {
|
|
18
18
|
"./package.json": "./package.json",
|
|
19
|
-
"./workflows": "./.medusa/server/workflows/index.js",
|
|
20
|
-
"./.medusa/server/src/modules/*": "./.medusa/server/modules/*/index.js",
|
|
21
|
-
"./modules/*": "./.medusa/server/modules/*/index.js",
|
|
22
|
-
"./providers/*": "./.medusa/server/providers/*/index.js",
|
|
19
|
+
"./workflows": "./.medusa/server/src/workflows/index.js",
|
|
20
|
+
"./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
21
|
+
"./modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
22
|
+
"./providers/*": "./.medusa/server/src/providers/*/index.js",
|
|
23
23
|
"./admin": "./.medusa/server/src/admin/index.mjs",
|
|
24
|
-
"./*": "./.medusa/server/*.js"
|
|
24
|
+
"./*": "./.medusa/server/src/*.js"
|
|
25
25
|
},
|
|
26
26
|
"repository": {
|
|
27
27
|
"type": "git",
|
|
28
28
|
"url": "https://github.com/lodashventure/medusa-brand"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
|
-
"build": "medusa plugin:build
|
|
31
|
+
"build": "medusa plugin:build",
|
|
32
32
|
"dev": "medusa plugin:develop",
|
|
33
|
-
"
|
|
34
|
-
"prepublishOnly": "medusa plugin:build && node ./scripts/sync-api.js"
|
|
33
|
+
"prepublishOnly": "medusa plugin:build"
|
|
35
34
|
},
|
|
36
35
|
"dependencies": {
|
|
37
36
|
"@google-cloud/storage": "^7.17.2",
|
|
38
37
|
"@medusajs/admin-sdk": "2.11.2",
|
|
39
38
|
"@medusajs/framework": "2.11.2",
|
|
40
39
|
"@medusajs/icons": "2.11.2",
|
|
41
|
-
"@medusajs/ui": "*"
|
|
40
|
+
"@medusajs/ui": "*",
|
|
41
|
+
"multer": "^1.4.5-lts.1",
|
|
42
|
+
"react-hook-form": "^7.66.0"
|
|
42
43
|
},
|
|
43
44
|
"peerDependencies": {
|
|
44
45
|
"@medusajs/admin-sdk": "2.11.2",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
-
import { MedusaRequestWithFile } from "../../../../../types";
|
|
3
|
-
export declare const GET: (req: MedusaRequestWithFile, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
4
|
-
export declare const POST: (req: MedusaRequestWithFile, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
5
|
-
export declare const DELETE: (req: MedusaRequestWithFile, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
@@ -1,119 +0,0 @@
|
|
|
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 upload_brand_image_1 = require("../../../../../workflows/upload-brand-image");
|
|
6
|
-
const gcs_direct_upload_1 = require("../../../../../services/gcs-direct-upload");
|
|
7
|
-
// GET - Get brand image
|
|
8
|
-
const GET = async (req, res) => {
|
|
9
|
-
const { id } = req.params;
|
|
10
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
11
|
-
try {
|
|
12
|
-
const brand = await brandService.retrieveBrand(id);
|
|
13
|
-
if (!brand) {
|
|
14
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
15
|
-
}
|
|
16
|
-
return res.json({
|
|
17
|
-
image: brand.image || null,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
console.error("Error fetching brand image:", error);
|
|
22
|
-
return res.status(500).json({ error: "Failed to fetch brand image" });
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
exports.GET = GET;
|
|
26
|
-
// POST - Upload brand image
|
|
27
|
-
const POST = async (req, res) => {
|
|
28
|
-
const { id } = req.params;
|
|
29
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
30
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
31
|
-
try {
|
|
32
|
-
const brand = await brandService.retrieveBrand(id);
|
|
33
|
-
if (!brand) {
|
|
34
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
35
|
-
}
|
|
36
|
-
const file = req.file;
|
|
37
|
-
if (!file) {
|
|
38
|
-
return res.status(400).json({ error: "No file uploaded" });
|
|
39
|
-
}
|
|
40
|
-
// Validate file type
|
|
41
|
-
const allowedMimeTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp'];
|
|
42
|
-
if (!allowedMimeTypes.includes(file.mimetype)) {
|
|
43
|
-
return res.status(400).json({
|
|
44
|
-
error: "Invalid file type. Only JPEG, PNG, GIF, and WebP images are allowed."
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
// Validate file size (max 5MB)
|
|
48
|
-
if (file.size > 5 * 1024 * 1024) {
|
|
49
|
-
return res.status(400).json({
|
|
50
|
-
error: "File size too large. Maximum allowed size is 5MB."
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
const result = await (0, upload_brand_image_1.uploadBrandImageWorkflow)(req.scope).run({
|
|
54
|
-
input: {
|
|
55
|
-
brandId: id,
|
|
56
|
-
imageType: "image",
|
|
57
|
-
fileData: {
|
|
58
|
-
filename: file.originalname,
|
|
59
|
-
mimeType: file.mimetype,
|
|
60
|
-
content: file.buffer.toString("base64"),
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
return res.json({
|
|
65
|
-
brand: {
|
|
66
|
-
id,
|
|
67
|
-
image: result.result.imageUrl,
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
logger.error("Error uploading brand image:", error);
|
|
73
|
-
return res.status(500).json({ error: "Failed to upload brand image" });
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
exports.POST = POST;
|
|
77
|
-
// DELETE - Delete brand image
|
|
78
|
-
const DELETE = async (req, res) => {
|
|
79
|
-
const { id } = req.params;
|
|
80
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
81
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
82
|
-
const gcsUploadService = new gcs_direct_upload_1.GcsDirectUploadService();
|
|
83
|
-
try {
|
|
84
|
-
const brand = await brandService.retrieveBrand(id);
|
|
85
|
-
if (!brand) {
|
|
86
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
87
|
-
}
|
|
88
|
-
if (!brand.image) {
|
|
89
|
-
return res.status(404).json({ error: "No image found for this brand" });
|
|
90
|
-
}
|
|
91
|
-
// Delete the file from GCS
|
|
92
|
-
if (brand.image.includes('storage.googleapis.com')) {
|
|
93
|
-
try {
|
|
94
|
-
const parts = brand.image.split('/');
|
|
95
|
-
const bucketIndex = parts.indexOf('sangaroon');
|
|
96
|
-
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
97
|
-
const filename = parts.slice(bucketIndex + 1).join('/');
|
|
98
|
-
await gcsUploadService.deleteFile(filename);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
catch (deleteError) {
|
|
102
|
-
logger.error("Error deleting file from GCS:", deleteError);
|
|
103
|
-
// Continue even if file deletion fails
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
await brandService.updateBrands([
|
|
107
|
-
{ id: brand.id, image: null }
|
|
108
|
-
]);
|
|
109
|
-
return res.json({
|
|
110
|
-
message: "Brand image deleted successfully",
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
logger.error("Error deleting brand image:", error);
|
|
115
|
-
return res.status(500).json({ error: "Failed to delete brand image" });
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
exports.DELETE = DELETE;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JyYW5kcy9baWRdL2ltYWdlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLHFEQUFzRTtBQUN0RSxvRkFBdUY7QUFDdkYsaUZBQW1GO0FBR25GLHdCQUF3QjtBQUNqQixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQTBCLEVBQzFCLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQVEsQ0FBQztJQUU3RCxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztZQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUk7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFyQlcsUUFBQSxHQUFHLE9BcUJk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
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
-
import { MedusaRequestWithFile } from "../../../../../types";
|
|
3
|
-
export declare const GET: (req: MedusaRequestWithFile, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
4
|
-
export declare const POST: (req: MedusaRequestWithFile, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
5
|
-
export declare const DELETE: (req: MedusaRequestWithFile, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
@@ -1,119 +0,0 @@
|
|
|
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 upload_brand_image_1 = require("../../../../../workflows/upload-brand-image");
|
|
6
|
-
const gcs_direct_upload_1 = require("../../../../../services/gcs-direct-upload");
|
|
7
|
-
// GET - Get brand logo
|
|
8
|
-
const GET = async (req, res) => {
|
|
9
|
-
const { id } = req.params;
|
|
10
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
11
|
-
try {
|
|
12
|
-
const brand = await brandService.retrieveBrand(id);
|
|
13
|
-
if (!brand) {
|
|
14
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
15
|
-
}
|
|
16
|
-
return res.json({
|
|
17
|
-
logo: brand.logo || null,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
console.error("Error fetching brand logo:", error);
|
|
22
|
-
return res.status(500).json({ error: "Failed to fetch brand logo" });
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
exports.GET = GET;
|
|
26
|
-
// POST - Upload brand logo
|
|
27
|
-
const POST = async (req, res) => {
|
|
28
|
-
const { id } = req.params;
|
|
29
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
30
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
31
|
-
try {
|
|
32
|
-
const brand = await brandService.retrieveBrand(id);
|
|
33
|
-
if (!brand) {
|
|
34
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
35
|
-
}
|
|
36
|
-
const file = req.file;
|
|
37
|
-
if (!file) {
|
|
38
|
-
return res.status(400).json({ error: "No file uploaded" });
|
|
39
|
-
}
|
|
40
|
-
// Validate file type
|
|
41
|
-
const allowedMimeTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'];
|
|
42
|
-
if (!allowedMimeTypes.includes(file.mimetype)) {
|
|
43
|
-
return res.status(400).json({
|
|
44
|
-
error: "Invalid file type. Only JPEG, PNG, GIF, WebP, and SVG images are allowed."
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
// Validate file size (max 2MB for logos)
|
|
48
|
-
if (file.size > 2 * 1024 * 1024) {
|
|
49
|
-
return res.status(400).json({
|
|
50
|
-
error: "File size too large. Maximum allowed size is 2MB."
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
const result = await (0, upload_brand_image_1.uploadBrandImageWorkflow)(req.scope).run({
|
|
54
|
-
input: {
|
|
55
|
-
brandId: id,
|
|
56
|
-
imageType: "logo",
|
|
57
|
-
fileData: {
|
|
58
|
-
filename: file.originalname,
|
|
59
|
-
mimeType: file.mimetype,
|
|
60
|
-
content: file.buffer.toString("base64"),
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
return res.json({
|
|
65
|
-
brand: {
|
|
66
|
-
id,
|
|
67
|
-
logo: result.result.imageUrl,
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
logger.error("Error uploading brand logo:", error);
|
|
73
|
-
return res.status(500).json({ error: "Failed to upload brand logo" });
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
exports.POST = POST;
|
|
77
|
-
// DELETE - Delete brand logo
|
|
78
|
-
const DELETE = async (req, res) => {
|
|
79
|
-
const { id } = req.params;
|
|
80
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
81
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
82
|
-
const gcsUploadService = new gcs_direct_upload_1.GcsDirectUploadService();
|
|
83
|
-
try {
|
|
84
|
-
const brand = await brandService.retrieveBrand(id);
|
|
85
|
-
if (!brand) {
|
|
86
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
87
|
-
}
|
|
88
|
-
if (!brand.logo) {
|
|
89
|
-
return res.status(404).json({ error: "No logo found for this brand" });
|
|
90
|
-
}
|
|
91
|
-
// Delete the file from GCS
|
|
92
|
-
if (brand.logo.includes('storage.googleapis.com')) {
|
|
93
|
-
try {
|
|
94
|
-
const parts = brand.logo.split('/');
|
|
95
|
-
const bucketIndex = parts.indexOf('sangaroon');
|
|
96
|
-
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
97
|
-
const filename = parts.slice(bucketIndex + 1).join('/');
|
|
98
|
-
await gcsUploadService.deleteFile(filename);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
catch (deleteError) {
|
|
102
|
-
logger.error("Error deleting file from GCS:", deleteError);
|
|
103
|
-
// Continue even if file deletion fails
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
await brandService.updateBrands([
|
|
107
|
-
{ id: brand.id, logo: null }
|
|
108
|
-
]);
|
|
109
|
-
return res.json({
|
|
110
|
-
message: "Brand logo deleted successfully",
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
logger.error("Error deleting brand logo:", error);
|
|
115
|
-
return res.status(500).json({ error: "Failed to delete brand logo" });
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
exports.DELETE = DELETE;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JyYW5kcy9baWRdL2xvZ28vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EscURBQXNFO0FBQ3RFLG9GQUF1RjtBQUN2RixpRkFBbUY7QUFHbkYsdUJBQXVCO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBMEIsRUFDMUIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBUSxDQUFDO0lBRTdELElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2QsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNILENBQUMsQ0FBQztBQXJCVyxRQUFBLEdBQUcsT0FxQmQ7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
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GET = void 0;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
// GET - Get all products for a brand
|
|
6
|
-
const GET = async (req, res) => {
|
|
7
|
-
const { id } = req.params;
|
|
8
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
9
|
-
const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
|
|
10
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
11
|
-
try {
|
|
12
|
-
const { limit = 20, offset = 0, } = req.query;
|
|
13
|
-
// Verify brand exists
|
|
14
|
-
const brand = await brandService.retrieveBrand(id);
|
|
15
|
-
if (!brand) {
|
|
16
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
17
|
-
}
|
|
18
|
-
// Get all product-brand associations for this brand
|
|
19
|
-
const productBrands = await brandService.listProductBrands({
|
|
20
|
-
brand_id: id,
|
|
21
|
-
});
|
|
22
|
-
if (productBrands.length === 0) {
|
|
23
|
-
return res.json({
|
|
24
|
-
products: [],
|
|
25
|
-
count: 0,
|
|
26
|
-
offset: Number(offset),
|
|
27
|
-
limit: Number(limit),
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
// Get product IDs
|
|
31
|
-
const productIds = productBrands.map((pb) => pb.product_id);
|
|
32
|
-
// Fetch products from product module
|
|
33
|
-
const products = await productModuleService.listProducts({
|
|
34
|
-
id: productIds,
|
|
35
|
-
});
|
|
36
|
-
const count = await productModuleService.listProducts({
|
|
37
|
-
id: productIds,
|
|
38
|
-
}).then((result) => result.length);
|
|
39
|
-
return res.json({
|
|
40
|
-
products,
|
|
41
|
-
count,
|
|
42
|
-
offset: Number(offset),
|
|
43
|
-
limit: Number(limit),
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
logger.error(`Error getting products for brand ${id}:`, error);
|
|
48
|
-
return res.status(500).json({ error: "Failed to get brand products" });
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
exports.GET = GET;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JyYW5kcy9baWRdL3Byb2R1Y3RzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUErRTtBQUcvRSxxQ0FBcUM7QUFDOUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrQixFQUNsQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFRLENBQUM7SUFDN0QsTUFBTSxvQkFBb0IsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLElBQUksQ0FBQztRQUNILE1BQU0sRUFDSixLQUFLLEdBQUcsRUFBRSxFQUNWLE1BQU0sR0FBRyxDQUFDLEdBQ1gsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBRWQsc0JBQXNCO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsb0RBQW9EO1FBQ3BELE1BQU0sYUFBYSxHQUFHLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixDQUFDO1lBQ3pELFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDZCxRQUFRLEVBQUUsRUFBRTtnQkFDWixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDckIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUQscUNBQXFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsWUFBWSxDQUFDO1lBQ3ZELEVBQUUsRUFBRSxVQUFVO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7WUFDcEQsRUFBRSxFQUFFLFVBQVU7U0FDZixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2QsUUFBUTtZQUNSLEtBQUs7WUFDTCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN0QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9ELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7QUFDSCxDQUFDLENBQUM7QUExRFcsUUFBQSxHQUFHLE9BMERkIn0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
-
import { UpdateBrandRequest } from "../../../../types";
|
|
3
|
-
export declare const GET: (req: MedusaRequest, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
4
|
-
export declare const PUT: (req: MedusaRequest<UpdateBrandRequest>, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
5
|
-
export declare const DELETE: (req: MedusaRequest, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DELETE = exports.PUT = exports.GET = void 0;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const gcs_direct_upload_1 = require("../../../../services/gcs-direct-upload");
|
|
6
|
-
// GET - Get a specific brand by ID
|
|
7
|
-
const GET = async (req, res) => {
|
|
8
|
-
const { id } = req.params;
|
|
9
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
10
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
11
|
-
try {
|
|
12
|
-
const brand = await brandService.retrieveBrand(id);
|
|
13
|
-
if (!brand) {
|
|
14
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
15
|
-
}
|
|
16
|
-
return res.json({ brand });
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
logger.error(`Error retrieving brand ${id}:`, error);
|
|
20
|
-
return res.status(500).json({ error: "Failed to retrieve brand" });
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
exports.GET = GET;
|
|
24
|
-
// PUT - Update a brand
|
|
25
|
-
const PUT = async (req, res) => {
|
|
26
|
-
const { id } = req.params;
|
|
27
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
28
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
29
|
-
try {
|
|
30
|
-
const brand = await brandService.retrieveBrand(id);
|
|
31
|
-
if (!brand) {
|
|
32
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
33
|
-
}
|
|
34
|
-
const { name, slug, description, website, is_active, metadata, } = req.body;
|
|
35
|
-
// Check if new slug conflicts with another brand
|
|
36
|
-
if (slug && slug !== brand.slug) {
|
|
37
|
-
const existingBrand = await brandService.listBrands({ slug }).then((result) => result[0]);
|
|
38
|
-
if (existingBrand && existingBrand.id !== id) {
|
|
39
|
-
return res.status(400).json({
|
|
40
|
-
error: "Brand with this slug already exists"
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const updateData = {
|
|
45
|
-
id,
|
|
46
|
-
};
|
|
47
|
-
if (name !== undefined)
|
|
48
|
-
updateData.name = name;
|
|
49
|
-
if (slug !== undefined)
|
|
50
|
-
updateData.slug = slug;
|
|
51
|
-
if (description !== undefined)
|
|
52
|
-
updateData.description = description;
|
|
53
|
-
if (website !== undefined)
|
|
54
|
-
updateData.website = website;
|
|
55
|
-
if (is_active !== undefined)
|
|
56
|
-
updateData.is_active = is_active;
|
|
57
|
-
if (metadata !== undefined)
|
|
58
|
-
updateData.metadata = metadata;
|
|
59
|
-
const updatedBrand = await brandService.updateBrands([updateData]).then((result) => result[0]);
|
|
60
|
-
return res.json({ brand: updatedBrand });
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
logger.error(`Error updating brand ${id}:`, error);
|
|
64
|
-
return res.status(500).json({ error: "Failed to update brand" });
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
exports.PUT = PUT;
|
|
68
|
-
// DELETE - Delete a brand
|
|
69
|
-
const DELETE = async (req, res) => {
|
|
70
|
-
const { id } = req.params;
|
|
71
|
-
const brandService = req.scope.resolve("brandCustom");
|
|
72
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
73
|
-
const gcsUploadService = new gcs_direct_upload_1.GcsDirectUploadService();
|
|
74
|
-
try {
|
|
75
|
-
const brand = await brandService.retrieveBrand(id);
|
|
76
|
-
if (!brand) {
|
|
77
|
-
return res.status(404).json({ error: "Brand not found" });
|
|
78
|
-
}
|
|
79
|
-
// Delete images from GCS if they exist
|
|
80
|
-
const imagesToDelete = [brand.image, brand.logo].filter(Boolean);
|
|
81
|
-
for (const imageUrl of imagesToDelete) {
|
|
82
|
-
if (imageUrl.includes('storage.googleapis.com')) {
|
|
83
|
-
try {
|
|
84
|
-
const parts = imageUrl.split('/');
|
|
85
|
-
const bucketIndex = parts.indexOf('sangaroon');
|
|
86
|
-
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
87
|
-
const filename = parts.slice(bucketIndex + 1).join('/');
|
|
88
|
-
await gcsUploadService.deleteFile(filename);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
logger.error(`Failed to delete image ${imageUrl}:`, error);
|
|
93
|
-
// Continue even if image deletion fails
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Delete product-brand associations
|
|
98
|
-
const productBrands = await brandService.listProductBrands({ brand_id: id });
|
|
99
|
-
if (productBrands.length > 0) {
|
|
100
|
-
await brandService.deleteProductBrands(productBrands.map((pb) => pb.id));
|
|
101
|
-
}
|
|
102
|
-
// Delete the brand
|
|
103
|
-
await brandService.deleteBrands([id]);
|
|
104
|
-
return res.json({ message: "Brand deleted successfully" });
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
logger.error(`Error deleting brand ${id}:`, error);
|
|
108
|
-
return res.status(500).json({ error: "Failed to delete brand" });
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
exports.DELETE = DELETE;
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2JyYW5kcy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUFzRTtBQUN0RSw4RUFBZ0Y7QUFHaEYsbUNBQW1DO0FBQzVCLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBa0IsRUFDbEIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBUSxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7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
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
-
import { CreateBrandRequest } from "../../../types";
|
|
3
|
-
export declare const GET: (req: MedusaRequest, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
4
|
-
export declare const POST: (req: MedusaRequest<CreateBrandRequest>, res: MedusaResponse) => Promise<MedusaResponse>;
|