@optima-chat/commerce-cli 1.13.0 → 1.14.0
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/.claude/skills/commerce-review/SKILL.md +57 -0
- package/dist/api/rest/commerce.d.ts +46 -1
- package/dist/api/rest/commerce.d.ts.map +1 -1
- package/dist/api/rest/commerce.js +21 -0
- package/dist/api/rest/commerce.js.map +1 -1
- package/dist/commands/homepage/create-banner.d.ts.map +1 -1
- package/dist/commands/homepage/create-banner.js +11 -6
- package/dist/commands/homepage/create-banner.js.map +1 -1
- package/dist/commands/homepage/index.d.ts.map +1 -1
- package/dist/commands/homepage/index.js +2 -0
- package/dist/commands/homepage/index.js.map +1 -1
- package/dist/commands/homepage/patch-banner-image.d.ts +3 -0
- package/dist/commands/homepage/patch-banner-image.d.ts.map +1 -0
- package/dist/commands/homepage/patch-banner-image.js +142 -0
- package/dist/commands/homepage/patch-banner-image.js.map +1 -0
- package/dist/commands/homepage/update-images.js +12 -7
- package/dist/commands/homepage/update-images.js.map +1 -1
- package/dist/commands/review/create.d.ts +3 -0
- package/dist/commands/review/create.d.ts.map +1 -0
- package/dist/commands/review/create.js +125 -0
- package/dist/commands/review/create.js.map +1 -0
- package/dist/commands/review/generate.d.ts +3 -0
- package/dist/commands/review/generate.d.ts.map +1 -0
- package/dist/commands/review/generate.js +134 -0
- package/dist/commands/review/generate.js.map +1 -0
- package/dist/commands/review/index.d.ts.map +1 -1
- package/dist/commands/review/index.js +4 -0
- package/dist/commands/review/index.js.map +1 -1
- package/dist/commands/review/list.d.ts.map +1 -1
- package/dist/commands/review/list.js +6 -0
- package/dist/commands/review/list.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { commerceApi } from '../../api/rest/commerce.js';
|
|
4
|
+
import { handleError, createApiError, ValidationError } from '../../utils/error.js';
|
|
5
|
+
import { output } from '../../utils/output.js';
|
|
6
|
+
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
7
|
+
const cmd = new Command('patch-banner-image')
|
|
8
|
+
.description('Update a single banner image by index')
|
|
9
|
+
.option('--id <id>', 'Section ID (required)')
|
|
10
|
+
.option('--index <number>', 'Image index, 1-based (required)')
|
|
11
|
+
.option('--url <url>', 'New desktop image URL (HTTPS)')
|
|
12
|
+
.option('--mobile-url <url>', 'New mobile image URL (HTTPS)')
|
|
13
|
+
.option('--remove-mobile-url', 'Remove mobile image')
|
|
14
|
+
.option('--alt <text>', 'Image alt text')
|
|
15
|
+
.option('--action-type <type>', 'Click action type (none|collection|product|url|section)')
|
|
16
|
+
.option('--action-value <value>', 'Action target (slug or URL)')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
try {
|
|
19
|
+
await patchImage(options);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
handleError(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
addEnhancedHelp(cmd, {
|
|
26
|
+
examples: [
|
|
27
|
+
'# Add mobile image to the 1st banner',
|
|
28
|
+
'$ commerce homepage patch-banner-image --id section-123 --index 1 --mobile-url "https://cdn.../mobile.jpg"',
|
|
29
|
+
'',
|
|
30
|
+
'# Update alt text of the 2nd image',
|
|
31
|
+
'$ commerce homepage patch-banner-image --id section-123 --index 2 --alt "New description"',
|
|
32
|
+
'',
|
|
33
|
+
'# Change click action of the 3rd image',
|
|
34
|
+
'$ commerce homepage patch-banner-image --id section-123 --index 3 --action-type collection --action-value summer-sale',
|
|
35
|
+
'',
|
|
36
|
+
'# Remove mobile image from the 1st banner',
|
|
37
|
+
'$ commerce homepage patch-banner-image --id section-123 --index 1 --remove-mobile-url',
|
|
38
|
+
'',
|
|
39
|
+
'# Replace desktop image',
|
|
40
|
+
'$ commerce homepage patch-banner-image --id section-123 --index 1 --url "https://cdn.../new-banner.jpg"',
|
|
41
|
+
],
|
|
42
|
+
output: {
|
|
43
|
+
example: JSON.stringify({
|
|
44
|
+
success: true,
|
|
45
|
+
data: {
|
|
46
|
+
id: 'section-123',
|
|
47
|
+
type: 'banner',
|
|
48
|
+
title: 'Main Banner',
|
|
49
|
+
settings: {
|
|
50
|
+
images: [
|
|
51
|
+
{
|
|
52
|
+
media_id: 'media-abc',
|
|
53
|
+
mobile_media_id: 'media-def',
|
|
54
|
+
alt: 'Updated Banner',
|
|
55
|
+
action_type: 'none',
|
|
56
|
+
action_value: null,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
autoplay: true,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
message: 'Banner 图片更新成功',
|
|
63
|
+
}, null, 2),
|
|
64
|
+
},
|
|
65
|
+
relatedCommands: [
|
|
66
|
+
{ command: 'homepage get', description: 'View current images and indexes' },
|
|
67
|
+
{ command: 'homepage update-images', description: 'Replace all images at once' },
|
|
68
|
+
{ command: 'upload image', description: 'Upload images first' },
|
|
69
|
+
],
|
|
70
|
+
notes: [
|
|
71
|
+
'This command is only for banner type sections',
|
|
72
|
+
'Index is 1-based (first image = 1)',
|
|
73
|
+
'Only provided fields are updated, others remain unchanged',
|
|
74
|
+
'Use --remove-mobile-url to remove the mobile image',
|
|
75
|
+
'URLs must use HTTPS protocol',
|
|
76
|
+
'For adding/removing images or reordering, use update-images instead',
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
export const patchBannerImageCommand = cmd;
|
|
80
|
+
async function patchImage(options) {
|
|
81
|
+
if (!options.id || options.id.trim().length === 0) {
|
|
82
|
+
throw new ValidationError('缺少必需参数: --id (区块ID)', 'id');
|
|
83
|
+
}
|
|
84
|
+
if (!options.index) {
|
|
85
|
+
throw new ValidationError('缺少必需参数: --index (图片序号,从 1 开始)', 'index');
|
|
86
|
+
}
|
|
87
|
+
const imageIndex = parseInt(options.index, 10);
|
|
88
|
+
if (isNaN(imageIndex) || imageIndex < 1) {
|
|
89
|
+
throw new ValidationError('--index 必须是大于 0 的整数', 'index');
|
|
90
|
+
}
|
|
91
|
+
// Build patch object - only include provided fields
|
|
92
|
+
const patch = {};
|
|
93
|
+
if (options.url) {
|
|
94
|
+
patch.url = options.url;
|
|
95
|
+
}
|
|
96
|
+
if (options.removeMobileUrl) {
|
|
97
|
+
patch.mobile_url = null;
|
|
98
|
+
}
|
|
99
|
+
else if (options.mobileUrl) {
|
|
100
|
+
patch.mobile_url = options.mobileUrl;
|
|
101
|
+
}
|
|
102
|
+
if (options.alt) {
|
|
103
|
+
patch.alt = options.alt;
|
|
104
|
+
}
|
|
105
|
+
if (options.actionType) {
|
|
106
|
+
patch.action_type = options.actionType;
|
|
107
|
+
}
|
|
108
|
+
if (options.actionValue !== undefined) {
|
|
109
|
+
patch.action_value = options.actionValue || null;
|
|
110
|
+
}
|
|
111
|
+
// Validate at least one field
|
|
112
|
+
if (Object.keys(patch).length === 0) {
|
|
113
|
+
throw new ValidationError('至少需要提供一个要更新的字段 (--url, --mobile-url, --alt, --action-type, --action-value, --remove-mobile-url)', 'patch');
|
|
114
|
+
}
|
|
115
|
+
const spinner = output.spinner(`正在更新第 ${imageIndex} 张 Banner 图片...`);
|
|
116
|
+
try {
|
|
117
|
+
const result = await commerceApi.homepage.settings.patchImage(options.id, imageIndex, patch);
|
|
118
|
+
spinner.succeed(`第 ${imageIndex} 张 Banner 图片更新成功!`);
|
|
119
|
+
if (output.isJson()) {
|
|
120
|
+
output.success(result, 'Banner 图片更新成功');
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.log();
|
|
124
|
+
console.log(chalk.green(`✓ 第 ${imageIndex} 张 Banner 图片更新成功!`));
|
|
125
|
+
console.log();
|
|
126
|
+
console.log(chalk.gray('区块ID: ') + chalk.cyan(result.id));
|
|
127
|
+
console.log(chalk.gray('标题: ') + chalk.white(result.title));
|
|
128
|
+
console.log();
|
|
129
|
+
console.log(chalk.gray('已更新字段:'));
|
|
130
|
+
for (const [key, value] of Object.entries(patch)) {
|
|
131
|
+
const displayValue = value === null ? chalk.yellow('(已移除)') : chalk.white(String(value));
|
|
132
|
+
console.log(chalk.cyan(` ${key}: `) + displayValue);
|
|
133
|
+
}
|
|
134
|
+
console.log();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
spinner.fail(`更新第 ${imageIndex} 张 Banner 图片失败`);
|
|
139
|
+
throw createApiError(error);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=patch-banner-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-banner-image.js","sourceRoot":"","sources":["../../../src/commands/homepage/patch-banner-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,9 +56,9 @@ addEnhancedHelp(cmd, {
|
|
|
56
56
|
],
|
|
57
57
|
notes: [
|
|
58
58
|
'This command is only for banner type sections',
|
|
59
|
-
'Images array must contain: url (
|
|
60
|
-
'Optional fields:
|
|
61
|
-
'
|
|
59
|
+
'Images array must contain: url or media_id (at least one), alt (required, min 1 char)',
|
|
60
|
+
'Optional fields: mobile_url, mobile_media_id, action_type, action_value',
|
|
61
|
+
'Use media_id for existing images (from homepage get), url for new images',
|
|
62
62
|
],
|
|
63
63
|
});
|
|
64
64
|
export const updateImagesCommand = cmd;
|
|
@@ -85,15 +85,19 @@ async function updateImages(options) {
|
|
|
85
85
|
}
|
|
86
86
|
// 验证每个图片对象并补充默认值
|
|
87
87
|
const validatedImages = images.map((img, index) => {
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
const hasUrl = img.url && typeof img.url === 'string' && img.url.trim().length > 0;
|
|
89
|
+
const hasMediaId = img.media_id && typeof img.media_id === 'string' && img.media_id.trim().length > 0;
|
|
90
|
+
if (!hasUrl && !hasMediaId) {
|
|
91
|
+
throw new ValidationError(`图片 ${index + 1} 缺少必需字段: url 或 media_id (至少提供一个)`, 'images');
|
|
90
92
|
}
|
|
91
93
|
if (!img.alt || typeof img.alt !== 'string' || img.alt.trim().length === 0) {
|
|
92
94
|
throw new ValidationError(`图片 ${index + 1} 缺少必需字段: alt (至少 1 个字符)`, 'images');
|
|
93
95
|
}
|
|
94
96
|
return {
|
|
95
|
-
url: img.url.trim(),
|
|
97
|
+
...(img.url && { url: img.url.trim() }),
|
|
98
|
+
...(img.media_id && { media_id: img.media_id.trim() }),
|
|
96
99
|
...(img.mobile_url && { mobile_url: img.mobile_url.trim() }),
|
|
100
|
+
...(img.mobile_media_id && { mobile_media_id: img.mobile_media_id.trim() }),
|
|
97
101
|
alt: img.alt.trim(),
|
|
98
102
|
action_type: img.action_type || 'none',
|
|
99
103
|
action_value: img.action_value || null,
|
|
@@ -116,7 +120,8 @@ async function updateImages(options) {
|
|
|
116
120
|
console.log();
|
|
117
121
|
console.log(chalk.gray('图片列表:'));
|
|
118
122
|
validatedImages.forEach((img, index) => {
|
|
119
|
-
|
|
123
|
+
const source = img.url || `media_id:${img.media_id}`;
|
|
124
|
+
console.log(chalk.cyan(` ${index + 1}. `) + chalk.white(source));
|
|
120
125
|
console.log(chalk.gray(` Alt: ${img.alt}, Action: ${img.action_type}`));
|
|
121
126
|
});
|
|
122
127
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-images.js","sourceRoot":"","sources":["../../../src/commands/homepage/update-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;KACrC,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe,CAAC,GAAG,EAAE;IACnB,QAAQ,EAAE;QACR,mCAAmC;QACnC,2KAA2K;QAC3K,EAAE;QACF,sCAAsC;QACtC,kOAAkO;QAClO,EAAE;QACF,0CAA0C;QAC1C,qGAAqG;KACtG;IACD,MAAM,EAAE;QACN,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;YACE,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,EAAE,EAAE,aAAa;gBACjB,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN;4BACE,GAAG,EAAE,UAAU;4BACf,GAAG,EAAE,UAAU;4BACf,WAAW,EAAE,MAAM;4BACnB,YAAY,EAAE,IAAI;yBACnB;qBACF;oBACD,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,OAAO,EAAE,eAAe;SACzB,EACD,IAAI,EACJ,CAAC,CACF;KACF;IACD,eAAe,EAAE;QACf,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,qBAAqB,EAAE;QAC/D,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,6BAA6B,EAAE;QAC1E,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,qBAAqB,EAAE;KAChE;IACD,KAAK,EAAE;QACL,+CAA+C;QAC/C,
|
|
1
|
+
{"version":3,"file":"update-images.js","sourceRoot":"","sources":["../../../src/commands/homepage/update-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/review/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EpC,eAAO,MAAM,mBAAmB,SAAM,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { commerceApi } from '../../api/rest/commerce.js';
|
|
4
|
+
import { handleError, createApiError, ValidationError } from '../../utils/error.js';
|
|
5
|
+
import { output } from '../../utils/output.js';
|
|
6
|
+
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
7
|
+
import { isInteractiveEnvironment, requireParam, requireNumberParam } from '../../utils/interactive.js';
|
|
8
|
+
const cmd = new Command('create')
|
|
9
|
+
.description('Create a review for a product')
|
|
10
|
+
.option('--product-id <uuid>', 'Product ID (required)')
|
|
11
|
+
.option('--rating <number>', 'Rating 1-5 (required)')
|
|
12
|
+
.option('--title <text>', 'Review title')
|
|
13
|
+
.option('--content <text>', 'Review content')
|
|
14
|
+
.option('--customer-name <name>', 'Customer display name')
|
|
15
|
+
.option('--ai-generated', 'Mark as AI-generated')
|
|
16
|
+
.option('--language <code>', 'Language code (e.g. en, zh)')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
try {
|
|
19
|
+
await createReview(options);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
handleError(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
addEnhancedHelp(cmd, {
|
|
26
|
+
examples: [
|
|
27
|
+
'# Create a simple review',
|
|
28
|
+
'$ commerce review create --product-id abc-123 --rating 5 --title "Great!" --content "Love it"',
|
|
29
|
+
'',
|
|
30
|
+
'# Create an AI-generated review',
|
|
31
|
+
'$ commerce review create --product-id abc-123 --rating 4 --title "Good quality" --content "Nice product" --customer-name "John" --ai-generated',
|
|
32
|
+
'',
|
|
33
|
+
'# Create with language code',
|
|
34
|
+
'$ commerce review create --product-id abc-123 --rating 5 --content "Very good" --language en',
|
|
35
|
+
],
|
|
36
|
+
output: {
|
|
37
|
+
example: JSON.stringify({
|
|
38
|
+
success: true,
|
|
39
|
+
data: {
|
|
40
|
+
id: 'review-uuid',
|
|
41
|
+
product_id: 'product-uuid',
|
|
42
|
+
rating: 5,
|
|
43
|
+
title: 'Great!',
|
|
44
|
+
content: 'Love it',
|
|
45
|
+
is_ai_generated: true,
|
|
46
|
+
moderation_status: 'approved',
|
|
47
|
+
created_at: '2026-02-25T10:00:00Z',
|
|
48
|
+
},
|
|
49
|
+
message: 'Review created',
|
|
50
|
+
}, null, 2),
|
|
51
|
+
},
|
|
52
|
+
relatedCommands: [
|
|
53
|
+
{ command: 'review generate', description: 'Batch generate reviews' },
|
|
54
|
+
{ command: 'review list', description: 'List reviews' },
|
|
55
|
+
{ command: 'review list --ai-generated', description: 'List AI-generated reviews' },
|
|
56
|
+
],
|
|
57
|
+
notes: [
|
|
58
|
+
'Rating must be between 1 and 5',
|
|
59
|
+
'AI-generated reviews are automatically approved',
|
|
60
|
+
'Use "review generate" for batch creation with time spreading',
|
|
61
|
+
],
|
|
62
|
+
});
|
|
63
|
+
export const createReviewCommand = cmd;
|
|
64
|
+
async function createReview(options) {
|
|
65
|
+
const productId = isInteractiveEnvironment()
|
|
66
|
+
? (options.productId?.trim() || (() => { throw new ValidationError('Product ID is required', 'product-id'); })())
|
|
67
|
+
: requireParam(options.productId, 'product-id', 'Product ID');
|
|
68
|
+
const rating = isInteractiveEnvironment()
|
|
69
|
+
? (() => {
|
|
70
|
+
if (!options.rating)
|
|
71
|
+
throw new ValidationError('Rating is required (1-5)', 'rating');
|
|
72
|
+
const n = parseInt(options.rating, 10);
|
|
73
|
+
if (isNaN(n) || n < 1 || n > 5)
|
|
74
|
+
throw new ValidationError('Rating must be between 1 and 5', 'rating');
|
|
75
|
+
return n;
|
|
76
|
+
})()
|
|
77
|
+
: requireNumberParam(options.rating, 'rating', 'Rating (1-5)', 1, 5);
|
|
78
|
+
const data = {
|
|
79
|
+
product_id: productId,
|
|
80
|
+
rating,
|
|
81
|
+
};
|
|
82
|
+
if (options.title)
|
|
83
|
+
data.title = options.title;
|
|
84
|
+
if (options.content)
|
|
85
|
+
data.content = options.content;
|
|
86
|
+
if (options.customerName)
|
|
87
|
+
data.customer_name = options.customerName;
|
|
88
|
+
if (options.aiGenerated)
|
|
89
|
+
data.is_ai_generated = true;
|
|
90
|
+
if (options.language)
|
|
91
|
+
data.language_code = options.language;
|
|
92
|
+
const spinner = output.spinner('Creating review...');
|
|
93
|
+
try {
|
|
94
|
+
const review = await commerceApi.reviews.create(data);
|
|
95
|
+
spinner.succeed('Review created');
|
|
96
|
+
if (output.isJson()) {
|
|
97
|
+
output.success({
|
|
98
|
+
id: review.id,
|
|
99
|
+
product_id: review.product_id,
|
|
100
|
+
rating: review.rating,
|
|
101
|
+
title: review.title,
|
|
102
|
+
content: review.content,
|
|
103
|
+
is_ai_generated: review.is_ai_generated,
|
|
104
|
+
moderation_status: review.moderation_status,
|
|
105
|
+
created_at: review.created_at,
|
|
106
|
+
}, 'Review created');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log();
|
|
110
|
+
console.log(chalk.green('Review created successfully'));
|
|
111
|
+
console.log(chalk.gray('Review ID: ') + chalk.white(review.id));
|
|
112
|
+
console.log(chalk.gray('Rating: ') + chalk.yellow('★'.repeat(review.rating) + '☆'.repeat(5 - review.rating)));
|
|
113
|
+
console.log(chalk.gray('Status: ') + chalk.white(review.moderation_status));
|
|
114
|
+
if (review.is_ai_generated) {
|
|
115
|
+
console.log(chalk.gray('AI Generated: ') + chalk.cyan('Yes'));
|
|
116
|
+
}
|
|
117
|
+
console.log();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
spinner.fail('Failed to create review');
|
|
122
|
+
throw createApiError(error);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/review/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/commands/review/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoFpC,eAAO,MAAM,qBAAqB,SAAM,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { commerceApi } from '../../api/rest/commerce.js';
|
|
4
|
+
import { handleError, createApiError, ValidationError } from '../../utils/error.js';
|
|
5
|
+
import { output } from '../../utils/output.js';
|
|
6
|
+
import { addEnhancedHelp } from '../../utils/helpText.js';
|
|
7
|
+
import { isInteractiveEnvironment, requireParam } from '../../utils/interactive.js';
|
|
8
|
+
const cmd = new Command('generate')
|
|
9
|
+
.description('Batch generate reviews for a product')
|
|
10
|
+
.option('--product-id <uuid>', 'Product ID (required)')
|
|
11
|
+
.option('--reviews <json>', 'Reviews JSON array (required)')
|
|
12
|
+
.option('--spread-days <number>', 'Spread created_at over past N days (default: 30)', '30')
|
|
13
|
+
.option('--no-ai-generated', 'Do not mark as AI-generated (default: mark as AI-generated)')
|
|
14
|
+
.option('--language <code>', 'Language code (e.g. en, zh)')
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
try {
|
|
17
|
+
await generateReviews(options);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
handleError(error);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
addEnhancedHelp(cmd, {
|
|
24
|
+
examples: [
|
|
25
|
+
'# Generate reviews for a product',
|
|
26
|
+
'$ commerce review generate --product-id abc-123 --reviews \'[{"rating":5,"title":"Great","content":"Love it","customer_name":"John"},{"rating":4,"title":"Good","content":"Nice","customer_name":"Jane"}]\'',
|
|
27
|
+
'',
|
|
28
|
+
'# Spread over 60 days',
|
|
29
|
+
'$ commerce review generate --product-id abc-123 --spread-days 60 --reviews \'[{"rating":5,"content":"Amazing"}]\'',
|
|
30
|
+
'',
|
|
31
|
+
'# Generate without AI-generated flag',
|
|
32
|
+
'$ commerce review generate --product-id abc-123 --no-ai-generated --reviews \'[{"rating":5,"content":"Great"}]\'',
|
|
33
|
+
],
|
|
34
|
+
output: {
|
|
35
|
+
example: JSON.stringify({
|
|
36
|
+
success: true,
|
|
37
|
+
data: {
|
|
38
|
+
success: true,
|
|
39
|
+
created_count: 2,
|
|
40
|
+
reviews: [
|
|
41
|
+
{
|
|
42
|
+
id: 'review-uuid-1',
|
|
43
|
+
rating: 5,
|
|
44
|
+
title: 'Great',
|
|
45
|
+
is_ai_generated: true,
|
|
46
|
+
moderation_status: 'approved',
|
|
47
|
+
created_at: '2026-01-28T14:30:00Z',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'review-uuid-2',
|
|
51
|
+
rating: 4,
|
|
52
|
+
title: 'Good',
|
|
53
|
+
is_ai_generated: true,
|
|
54
|
+
moderation_status: 'approved',
|
|
55
|
+
created_at: '2026-02-10T09:15:00Z',
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
message: 'Generated 2 reviews',
|
|
60
|
+
}, null, 2),
|
|
61
|
+
},
|
|
62
|
+
relatedCommands: [
|
|
63
|
+
{ command: 'review create', description: 'Create a single review' },
|
|
64
|
+
{ command: 'review list --ai-generated', description: 'List AI-generated reviews' },
|
|
65
|
+
{ command: 'review stats', description: 'View review statistics' },
|
|
66
|
+
],
|
|
67
|
+
notes: [
|
|
68
|
+
'Each review in the JSON array needs at least a "rating" field (1-5)',
|
|
69
|
+
'Optional fields: "title", "content", "customer_name"',
|
|
70
|
+
'Maximum 20 reviews per batch',
|
|
71
|
+
'Reviews are spread over --spread-days (default 30), never earlier than product creation',
|
|
72
|
+
'AI-generated reviews are automatically approved',
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
export const generateReviewCommand = cmd;
|
|
76
|
+
async function generateReviews(options) {
|
|
77
|
+
const productId = isInteractiveEnvironment()
|
|
78
|
+
? (options.productId?.trim() || (() => { throw new ValidationError('Product ID is required', 'product-id'); })())
|
|
79
|
+
: requireParam(options.productId, 'product-id', 'Product ID');
|
|
80
|
+
const reviewsJson = isInteractiveEnvironment()
|
|
81
|
+
? (options.reviews?.trim() || (() => { throw new ValidationError('Reviews JSON is required', 'reviews'); })())
|
|
82
|
+
: requireParam(options.reviews, 'reviews', 'Reviews JSON array');
|
|
83
|
+
let reviewItems;
|
|
84
|
+
try {
|
|
85
|
+
reviewItems = JSON.parse(reviewsJson);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
throw new ValidationError('Invalid JSON for --reviews. Expected a JSON array, e.g.: \'[{"rating":5,"title":"Great","content":"Love it","customer_name":"John"}]\'', 'reviews');
|
|
89
|
+
}
|
|
90
|
+
if (!Array.isArray(reviewItems) || reviewItems.length === 0) {
|
|
91
|
+
throw new ValidationError('The --reviews parameter must be a non-empty JSON array', 'reviews');
|
|
92
|
+
}
|
|
93
|
+
const spreadDays = parseInt(options.spreadDays || '30', 10);
|
|
94
|
+
if (isNaN(spreadDays) || spreadDays < 1) {
|
|
95
|
+
throw new ValidationError('--spread-days must be a positive integer', 'spread-days');
|
|
96
|
+
}
|
|
97
|
+
const data = {
|
|
98
|
+
product_id: productId,
|
|
99
|
+
reviews: reviewItems,
|
|
100
|
+
spread_days: spreadDays,
|
|
101
|
+
};
|
|
102
|
+
// --no-ai-generated sets options.aiGenerated to false (Commander convention)
|
|
103
|
+
// Default behavior (no flag) means aiGenerated is true for generate command
|
|
104
|
+
if (options.aiGenerated === false) {
|
|
105
|
+
data.is_ai_generated = false;
|
|
106
|
+
}
|
|
107
|
+
if (options.language)
|
|
108
|
+
data.language_code = options.language;
|
|
109
|
+
const spinner = output.spinner(`Generating ${reviewItems.length} reviews...`);
|
|
110
|
+
try {
|
|
111
|
+
const result = await commerceApi.reviews.generate(data);
|
|
112
|
+
spinner.succeed(`Generated ${result.created_count} reviews`);
|
|
113
|
+
if (output.isJson()) {
|
|
114
|
+
output.success(result, `Generated ${result.created_count} reviews`);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.log();
|
|
118
|
+
console.log(chalk.green(`Successfully generated ${result.created_count} reviews`));
|
|
119
|
+
console.log(chalk.gray(`Spread over past ${spreadDays} days`));
|
|
120
|
+
console.log();
|
|
121
|
+
for (const review of result.reviews) {
|
|
122
|
+
const stars = chalk.yellow('★'.repeat(review.rating) + '☆'.repeat(5 - review.rating));
|
|
123
|
+
const title = review.title ? chalk.white(review.title) : chalk.gray('(no title)');
|
|
124
|
+
console.log(` ${stars} ${title} ${chalk.gray(review.id)}`);
|
|
125
|
+
}
|
|
126
|
+
console.log();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
spinner.fail('Failed to generate reviews');
|
|
131
|
+
throw createApiError(error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/review/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,aAAa,SAiBU,CAAC"}
|
|
@@ -6,6 +6,8 @@ import { approveCommand } from './approve.js';
|
|
|
6
6
|
import { rejectCommand } from './reject.js';
|
|
7
7
|
import { featureCommand } from './feature.js';
|
|
8
8
|
import { respondCommand } from './respond.js';
|
|
9
|
+
import { createReviewCommand } from './create.js';
|
|
10
|
+
import { generateReviewCommand } from './generate.js';
|
|
9
11
|
import { deleteResponseCommand } from './delete-response.js';
|
|
10
12
|
import { deleteReviewCommand } from './delete.js';
|
|
11
13
|
import { batchCommand } from './batch.js';
|
|
@@ -22,6 +24,8 @@ export const reviewCommand = new Command('review')
|
|
|
22
24
|
.addCommand(rejectCommand)
|
|
23
25
|
.addCommand(featureCommand)
|
|
24
26
|
.addCommand(respondCommand)
|
|
27
|
+
.addCommand(createReviewCommand)
|
|
28
|
+
.addCommand(generateReviewCommand)
|
|
25
29
|
.addCommand(deleteResponseCommand)
|
|
26
30
|
.addCommand(deleteReviewCommand)
|
|
27
31
|
.addCommand(batchCommand)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,mBAAmB,CAAC;KAChC,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,aAAa,CAAC;KACzB,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,qBAAqB,CAAC;KACjC,UAAU,CAAC,mBAAmB,CAAC;KAC/B,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,mBAAmB,CAAC;KAC/B,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,qBAAqB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,mBAAmB,CAAC;KAChC,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,aAAa,CAAC;KACzB,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,mBAAmB,CAAC;KAC/B,UAAU,CAAC,qBAAqB,CAAC;KACjC,UAAU,CAAC,qBAAqB,CAAC;KACjC,UAAU,CAAC,mBAAmB,CAAC;KAC/B,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,mBAAmB,CAAC;KAC/B,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,qBAAqB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/review/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/review/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA4G5C,eAAO,MAAM,kBAAkB,SAAM,CAAC"}
|
|
@@ -15,6 +15,7 @@ const cmd = new Command('list')
|
|
|
15
15
|
.option('--has-reply', 'Only show reviews with merchant reply')
|
|
16
16
|
.option('--featured', 'Only show featured reviews')
|
|
17
17
|
.option('--verified', 'Only show verified purchase reviews')
|
|
18
|
+
.option('--ai-generated', 'Only show AI-generated reviews')
|
|
18
19
|
.addOption(new Option('--sort-by <sort>', 'Sort order')
|
|
19
20
|
.choices(['newest', 'oldest', 'highest_rating', 'lowest_rating', 'most_helpful'])
|
|
20
21
|
.default('newest'))
|
|
@@ -44,6 +45,9 @@ addEnhancedHelp(cmd, {
|
|
|
44
45
|
'',
|
|
45
46
|
'# Sort by helpfulness',
|
|
46
47
|
'$ commerce review list --sort-by most_helpful',
|
|
48
|
+
'',
|
|
49
|
+
'# Show only AI-generated reviews',
|
|
50
|
+
'$ commerce review list --ai-generated',
|
|
47
51
|
],
|
|
48
52
|
output: {
|
|
49
53
|
example: JSON.stringify({
|
|
@@ -104,6 +108,8 @@ async function listReviews(options) {
|
|
|
104
108
|
params.featured = true;
|
|
105
109
|
if (options.verified)
|
|
106
110
|
params.verified = true;
|
|
111
|
+
if (options.aiGenerated)
|
|
112
|
+
params.is_ai_generated = true;
|
|
107
113
|
if (options.sortBy)
|
|
108
114
|
params.sort_by = options.sortBy;
|
|
109
115
|
const result = await commerceApi.reviews.list(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/review/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/review/list.ts"],"names":[],"mappings":"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"}
|