@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
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GcsDirectUploadService = void 0;
|
|
4
|
-
const storage_1 = require("@google-cloud/storage");
|
|
5
|
-
class GcsDirectUploadService {
|
|
6
|
-
storage;
|
|
7
|
-
bucketName;
|
|
8
|
-
baseUrl;
|
|
9
|
-
constructor() {
|
|
10
|
-
// Initialize GCS client with credentials from env
|
|
11
|
-
this.storage = new storage_1.Storage({
|
|
12
|
-
credentials: {
|
|
13
|
-
client_email: process.env.CLIENT_EMAIL,
|
|
14
|
-
private_key: process.env.PRIVATE_KEY.replace(/\\n/g, '\n'),
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
this.bucketName = process.env.BUCKET_NAME || 'sangaroon';
|
|
18
|
-
this.baseUrl = process.env.GCP_STORAGE_BASE_PUBLIC_URL || 'https://storage.googleapis.com';
|
|
19
|
-
}
|
|
20
|
-
async uploadFile(filename, buffer, mimeType) {
|
|
21
|
-
try {
|
|
22
|
-
const bucket = this.storage.bucket(this.bucketName);
|
|
23
|
-
const file = bucket.file(filename);
|
|
24
|
-
await file.save(buffer, {
|
|
25
|
-
metadata: {
|
|
26
|
-
contentType: mimeType,
|
|
27
|
-
},
|
|
28
|
-
public: true,
|
|
29
|
-
resumable: false,
|
|
30
|
-
});
|
|
31
|
-
// Return the public URL
|
|
32
|
-
return `${this.baseUrl}/${this.bucketName}/${filename}`;
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.error('Error uploading to GCS:', error);
|
|
36
|
-
throw new Error(`Failed to upload file to GCS: ${error.message}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
async deleteFile(filename) {
|
|
40
|
-
try {
|
|
41
|
-
const bucket = this.storage.bucket(this.bucketName);
|
|
42
|
-
const file = bucket.file(filename);
|
|
43
|
-
const [exists] = await file.exists();
|
|
44
|
-
if (exists) {
|
|
45
|
-
await file.delete();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
console.error('Error deleting from GCS:', error);
|
|
50
|
-
// Don't throw on delete errors
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.GcsDirectUploadService = GcsDirectUploadService;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2NzLWRpcmVjdC11cGxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZ2NzLWRpcmVjdC11cGxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBRWhELE1BQWEsc0JBQXNCO0lBQ3pCLE9BQU8sQ0FBVTtJQUNqQixVQUFVLENBQVM7SUFDbkIsT0FBTyxDQUFTO0lBRXhCO1FBQ0Usa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFhO2dCQUN2QyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7YUFDNUQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQztRQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksZ0NBQWdDLENBQUM7SUFDN0YsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7UUFDakUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbkMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsUUFBUSxFQUFFO29CQUNSLFdBQVcsRUFBRSxRQUFRO2lCQUN0QjtnQkFDRCxNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDLENBQUM7WUFFSCx3QkFBd0I7WUFDeEIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCO1FBQy9CLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsK0JBQStCO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyREQsd0RBcURDIn0=
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface UploadBrandImageInput {
|
|
2
|
-
brandId: string;
|
|
3
|
-
imageType: "image" | "logo";
|
|
4
|
-
fileData: {
|
|
5
|
-
filename: string;
|
|
6
|
-
mimeType: string;
|
|
7
|
-
content: string;
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
export declare const uploadBrandImageWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<UploadBrandImageInput, {
|
|
11
|
-
brandId: string;
|
|
12
|
-
imageType: "image" | "logo";
|
|
13
|
-
imageUrl: string;
|
|
14
|
-
}, []>;
|
|
15
|
-
export {};
|
|
@@ -1,57 +0,0 @@
|
|
|
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
|
-
// Generate unique filename for direct upload
|
|
10
|
-
const timestamp = Date.now();
|
|
11
|
-
const ext = fileData.filename.split('.').pop() || 'jpg';
|
|
12
|
-
const filename = `brands/${imageType}-${brandId}-${timestamp}.${ext}`;
|
|
13
|
-
// Convert base64 to buffer
|
|
14
|
-
const buffer = Buffer.from(fileData.content, "base64");
|
|
15
|
-
// Upload directly to GCS
|
|
16
|
-
const publicUrl = await gcsUploadService.uploadFile(filename, buffer, fileData.mimeType);
|
|
17
|
-
// Retrieve existing brand
|
|
18
|
-
const brand = await brandService.retrieveBrand(brandId);
|
|
19
|
-
if (!brand) {
|
|
20
|
-
throw new Error(`Brand with id ${brandId} not found`);
|
|
21
|
-
}
|
|
22
|
-
// Delete old image if it exists
|
|
23
|
-
const oldImageUrl = brand[imageType];
|
|
24
|
-
if (oldImageUrl) {
|
|
25
|
-
try {
|
|
26
|
-
if (oldImageUrl.includes('storage.googleapis.com')) {
|
|
27
|
-
const parts = oldImageUrl.split('/');
|
|
28
|
-
const bucketIndex = parts.indexOf('sangaroon');
|
|
29
|
-
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
30
|
-
const oldFilename = parts.slice(bucketIndex + 1).join('/');
|
|
31
|
-
await gcsUploadService.deleteFile(oldFilename);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error(`Failed to delete old ${imageType}:`, error);
|
|
37
|
-
// Continue even if deletion fails
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Update brand with new image URL
|
|
41
|
-
const updateData = {};
|
|
42
|
-
updateData[imageType] = publicUrl;
|
|
43
|
-
await brandService.updateBrands([{
|
|
44
|
-
id: brandId,
|
|
45
|
-
...updateData
|
|
46
|
-
}]);
|
|
47
|
-
return new workflows_sdk_1.StepResponse({
|
|
48
|
-
brandId,
|
|
49
|
-
imageType,
|
|
50
|
-
imageUrl: publicUrl,
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
exports.uploadBrandImageWorkflow = (0, workflows_sdk_1.createWorkflow)("upload-brand-image", (input) => {
|
|
54
|
-
const result = uploadBrandImageStep(input);
|
|
55
|
-
return new workflows_sdk_1.WorkflowResponse(result);
|
|
56
|
-
});
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWJyYW5kLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dvcmtmbG93cy91cGxvYWQtYnJhbmQtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTTJDO0FBQzNDLHFFQUF1RTtBQVl2RSxNQUFNLG9CQUFvQixHQUFHLElBQUEsMEJBQVUsRUFDckMseUJBQXlCLEVBQ3pCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUF5QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMvRSxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBUSxDQUFDO0lBQzdELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQ0FBc0IsRUFBRSxDQUFDO0lBRXRELDZDQUE2QztJQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDN0IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDO0lBQ3hELE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxJQUFJLE9BQU8sSUFBSSxTQUFTLElBQUksR0FBRyxFQUFFLENBQUM7SUFFdEUsMkJBQTJCO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV2RCx5QkFBeUI7SUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFekYsMEJBQTBCO0lBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixPQUFPLFlBQVksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0QsTUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2pELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixTQUFTLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRCxrQ0FBa0M7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsTUFBTSxVQUFVLEdBQVEsRUFBRSxDQUFDO0lBQzNCLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7SUFFbEMsTUFBTSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0IsRUFBRSxFQUFFLE9BQU87WUFDWCxHQUFHLFVBQVU7U0FDZCxDQUFDLENBQUMsQ0FBQztJQUVKLE9BQU8sSUFBSSw0QkFBWSxDQUFDO1FBQ3RCLE9BQU87UUFDUCxTQUFTO1FBQ1QsUUFBUSxFQUFFLFNBQVM7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUNGLENBQUM7QUFFVyxRQUFBLHdCQUF3QixHQUFHLElBQUEsOEJBQWMsRUFDcEQsb0JBQW9CLEVBQ3BCLENBQUMsS0FBMEMsRUFBRSxFQUFFO0lBQzdDLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQ0YsQ0FBQyJ9
|