@llryiop/avatar-boot-cli 1.0.1 → 1.0.2

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 (66) hide show
  1. package/docs/exam-question-generate-api.md +163 -0
  2. package/package.json +1 -1
  3. package/src/prompts.js +3 -3
  4. package/src/transform.js +1 -1
  5. package/templates/.claude/skills/avatar-boot-starter-feign/README.md +243 -0
  6. package/templates/.claude/skills/avatar-boot-starter-feign/SKILL.md +47 -219
  7. package/templates/.claude/skills/avatar-boot-starter-feign/references//345/212/237/350/203/275/350/257/246/350/247/243.md +65 -0
  8. package/templates/.claude/skills/avatar-boot-starter-feign/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +75 -0
  9. package/templates/.claude/skills/avatar-boot-starter-feign/references//351/205/215/347/275/256/345/217/202/350/200/203.md +70 -0
  10. package/templates/.claude/skills/avatar-boot-starter-job/README.md +437 -0
  11. package/templates/.claude/skills/avatar-boot-starter-job/SKILL.md +35 -414
  12. package/templates/.claude/skills/avatar-boot-starter-job/references//345/270/270/350/247/201/351/227/256/351/242/230.md +55 -0
  13. package/templates/.claude/skills/avatar-boot-starter-job/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +124 -0
  14. package/templates/.claude/skills/avatar-boot-starter-job/references//347/233/221/346/216/247/346/214/207/346/240/207.md +72 -0
  15. package/templates/.claude/skills/avatar-boot-starter-kafka/README.md +580 -0
  16. package/templates/.claude/skills/avatar-boot-starter-kafka/SKILL.md +36 -560
  17. package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/234/200/344/275/263/345/256/236/350/267/265.md +43 -0
  18. package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/240/270/345/277/203/345/212/237/350/203/275.md +117 -0
  19. package/templates/.claude/skills/avatar-boot-starter-kafka/references//351/205/215/347/275/256/345/217/202/350/200/203.md +54 -0
  20. package/templates/.claude/skills/avatar-boot-starter-mysql/README.md +572 -0
  21. package/templates/.claude/skills/avatar-boot-starter-mysql/SKILL.md +40 -550
  22. package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/256/236/344/275/223/344/270/216/345/212/237/350/203/275.md +96 -0
  23. package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/346/225/260/346/215/256/346/272/220.md +91 -0
  24. package/templates/.claude/skills/avatar-boot-starter-mysql/references//351/253/230/347/272/247/347/211/271/346/200/247/344/270/216/351/205/215/347/275/256.md +59 -0
  25. package/templates/.claude/skills/avatar-boot-starter-nacos/README.md +901 -0
  26. package/templates/.claude/skills/avatar-boot-starter-nacos/SKILL.md +40 -879
  27. package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/212/237/350/203/275/344/275/277/347/224/250.md +134 -0
  28. package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +96 -0
  29. package/templates/.claude/skills/avatar-boot-starter-nacos/references//346/225/205/351/232/234/346/216/222/346/237/245.md +64 -0
  30. package/templates/.claude/skills/avatar-boot-starter-oss/README.md +594 -0
  31. package/templates/.claude/skills/avatar-boot-starter-oss/SKILL.md +52 -570
  32. package/templates/.claude/skills/avatar-boot-starter-oss/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +77 -0
  33. package/templates/.claude/skills/avatar-boot-starter-oss/references//346/240/270/345/277/203/345/212/237/350/203/275.md +94 -0
  34. package/templates/.claude/skills/avatar-boot-starter-oss/references//350/247/204/350/214/203/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +61 -0
  35. package/templates/.claude/skills/avatar-boot-starter-redis/README.md +586 -0
  36. package/templates/.claude/skills/avatar-boot-starter-redis/SKILL.md +42 -566
  37. package/templates/.claude/skills/avatar-boot-starter-redis/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +78 -0
  38. package/templates/.claude/skills/avatar-boot-starter-redis/references//346/225/260/346/215/256/346/223/215/344/275/234.md +111 -0
  39. package/templates/.claude/skills/avatar-boot-starter-redis/references//351/253/230/347/272/247/345/212/237/350/203/275.md +90 -0
  40. package/templates/.claude/skills/avatar-boot-starter-rocketmq/README.md +662 -0
  41. package/templates/.claude/skills/avatar-boot-starter-rocketmq/SKILL.md +48 -640
  42. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//346/240/270/345/277/203/345/212/237/350/203/275.md +101 -0
  43. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/205/215/347/275/256/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +44 -0
  44. package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/253/230/347/272/247/347/211/271/346/200/247.md +71 -0
  45. package/templates/.claude/skills/avatar-boot-starter-web/README.md +1007 -0
  46. package/templates/.claude/skills/avatar-boot-starter-web/SKILL.md +150 -1003
  47. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-LogInfo/346/263/250/350/247/243.md +75 -0
  48. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/345/205/250/345/261/200/345/274/202/345/270/270/345/244/204/347/220/206.md +90 -0
  49. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/214/207/346/240/207/347/233/221/346/216/247.md +74 -0
  50. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/227/245/345/277/227/344/275/223/347/263/273.md +73 -0
  51. package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/350/257/267/346/261/202/344/270/212/344/270/213/346/226/207.md +77 -0
  52. package/templates/.claude/skills/avatar-boot-starter-web/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +52 -0
  53. package/templates/.claude/skills/avatar-boot-starter-web/references//346/263/250/346/204/217/344/272/213/351/241/271.md +68 -0
  54. package/templates/.claude/skills/avatar-boot-starter-web/references//350/207/252/345/256/232/344/271/211/346/211/251/345/261/225/346/214/207/345/215/227.md +107 -0
  55. package/templates/.claude/skills/avatar-boot-starter-web/references//351/205/215/347/275/256/345/217/202/350/200/203.md +107 -0
  56. package/templates/.claude/skills/crud-generator/SKILL.md +133 -64
  57. package/templates/.claude/skills/database-design/README.md +207 -0
  58. package/templates/.claude/skills/database-design/SKILL.md +469 -82
  59. package/templates/.claude/skills/database-design/references//345/221/275/345/220/215/350/247/204/350/214/203.md +232 -0
  60. package/templates/.claude/skills/database-design/references//345/255/227/346/256/265/347/261/273/345/236/213/350/247/204/350/214/203.md +400 -0
  61. package/templates/.claude/skills/database-design/references//347/264/242/345/274/225/350/247/204/350/214/203.md +506 -0
  62. package/templates/avatar-scaffold-api/pom.xml +0 -5
  63. package/templates/avatar-scaffold-service/pom.xml +25 -87
  64. package/templates/avatar-scaffold-service/src/main/resources/application-dev.yaml +3 -5
  65. package/templates/avatar-scaffold-service/src/main/resources/application-local.yaml +2 -2
  66. package/templates/pom.xml +9 -18
@@ -0,0 +1,77 @@
1
+ # OSS 快速接入与配置
2
+
3
+ ## 1. 添加依赖
4
+
5
+ ```xml
6
+ <dependency>
7
+ <groupId>com.iflytek.avatar.boot</groupId>
8
+ <artifactId>avatar-boot-starter-oss</artifactId>
9
+ </dependency>
10
+ ```
11
+
12
+ ## 2. 配置连接信息
13
+
14
+ ```yaml
15
+ avatar:
16
+ oss:
17
+ enabled: true
18
+ type: ALIOSS # ALIOSS / MINIO / TXCOS / AWS3
19
+ endpoint: https://oss-cn-beijing.aliyuncs.com
20
+ bucket: your-bucket-name
21
+ access-key: ${OSS_ACCESS_KEY} # 通过环境变量注入,禁止明文
22
+ access-secret: ${OSS_ACCESS_SECRET}
23
+ region: default
24
+ use-ssl: false
25
+ virtual-host: false
26
+ cdn-endpoint: https://your-cdn.com # CDN 域名,无 CDN 时填同 endpoint
27
+ project-name: your-service-name
28
+ ```
29
+
30
+ ## 3. 注入使用
31
+
32
+ ```java
33
+ @Autowired
34
+ private OssClient ossClient;
35
+ ```
36
+
37
+ `@ConditionalOnProperty(name = "enabled", havingValue = "true")` 自动生效,无需额外注解。
38
+
39
+ ## 配置项说明
40
+
41
+ | 配置项 | 必填 | 默认值 | 说明 |
42
+ |:--|:--|:--|:--|
43
+ | `enabled` | 是 | `false` | 是否启用 OSS |
44
+ | `type` | 是 | — | 存储类型 |
45
+ | `endpoint` | 是 | — | 存储服务域名 |
46
+ | `bucket` | 是 | — | 存储空间名称 |
47
+ | `access-key` | 是 | — | 访问密钥 ID |
48
+ | `access-secret` | 是 | — | 访问密钥 Secret |
49
+ | `region` | 否 | `default` | 区域(MinIO 填 default) |
50
+ | `use-ssl` | 否 | `false` | 是否启用 HTTPS |
51
+ | `cdn-endpoint` | 否 | 同 endpoint | CDN 加速域名 |
52
+ | `thread-pool.enable-multipart-upload-size` | 否 | `50` | 触发分片上传的文件大小(MB) |
53
+ | `thread-pool.part-size` | 否 | `10` | 每个分片大小(MB) |
54
+
55
+ ## 各 OSS 类型推荐配置
56
+
57
+ ### 阿里云 OSS
58
+
59
+ ```yaml
60
+ avatar:
61
+ oss:
62
+ type: ALIOSS
63
+ endpoint: https://oss-cn-beijing.aliyuncs.com
64
+ virtual-host: false
65
+ region: default
66
+ ```
67
+
68
+ ### MinIO
69
+
70
+ ```yaml
71
+ avatar:
72
+ oss:
73
+ type: MINIO
74
+ endpoint: http://minio:9000
75
+ use-ssl: false
76
+ region: default
77
+ ```
@@ -0,0 +1,94 @@
1
+ # OSS 核心功能
2
+
3
+ ## 文件上传
4
+
5
+ ```java
6
+ // 方式一:字节数组上传(后端服务生成文件时使用)
7
+ String fileKey = OssFileKeyHelper.videoKey(tenantId, taskId, "output.mp4");
8
+ String cdnUrl = ossClient.upload(fileBytes, fileKey, "video/mp4");
9
+ // cdnUrl 仅用于即时展示,入库时存 {bucket}/{fileKey} 格式
10
+
11
+ // 方式二:本地文件路径上传
12
+ String cdnUrl = ossClient.upload("/tmp/output.mp4", fileKey, "video/mp4");
13
+ ```
14
+
15
+ ## 预签名上传(前端直传)
16
+
17
+ 适合客户端直接上传素材,流量不经过业务服务器:
18
+
19
+ ```java
20
+ String fileKey = OssFileKeyHelper.materialKey(tenantId, "source.mp4");
21
+ PresignResult result = ossClient.getPresignUploadUrl(fileKey, "video/mp4", Duration.ofMinutes(30));
22
+
23
+ result.getUrl(); // 预签名上传地址,前端 PUT 到此地址
24
+ result.getSignedHeaders(); // 上传时必须携带的额外 header
25
+ ```
26
+
27
+ 前端上传示例:
28
+ ```javascript
29
+ // 阿里云:signedHeaders 为空,直接 PUT
30
+ await fetch(result.url, {
31
+ method: 'PUT',
32
+ headers: { 'Content-Type': 'video/mp4', ...result.signedHeaders },
33
+ body: file
34
+ });
35
+ ```
36
+
37
+ ## 预签名下载(临时授权访问)
38
+
39
+ ```java
40
+ PresignResult result = ossClient.getPresignDownloadUrl(fileKey, Duration.ofHours(2));
41
+ String accessUrl = result.getUrl(); // 可直接访问的签名 URL
42
+ ```
43
+
44
+ ## URL 解析(接口返回文件 URL 时统一使用)
45
+
46
+ ```java
47
+ // 自动处理新旧格式,默认有效期 2 小时
48
+ String accessUrl = ossClient.resolveAccessUrl(dbStoredValue);
49
+
50
+ // 自定义有效期
51
+ String accessUrl = ossClient.resolveAccessUrl(dbStoredValue, Duration.ofHours(4));
52
+ ```
53
+
54
+ | DB 中的值 | 处理结果 |
55
+ |:--|:--|
56
+ | `bucket/videos/.../output.mp4`(新格式) | 动态生成 CDN 签名 URL |
57
+ | `https://cdn.old.com/.../output.mp4`(旧格式完整 URL) | 直接返回原值 |
58
+
59
+ ## 文件下载到本地
60
+
61
+ ```java
62
+ // 普通下载
63
+ ossClient.download(fileKey, "/tmp/output.mp4");
64
+
65
+ // 大文件分片下载(推荐 1GB 以上使用)
66
+ ossClient.multipartDownload(fileKey, "/tmp/", "output.mp4");
67
+ ```
68
+
69
+ ## 文件删除
70
+
71
+ ```java
72
+ // 删除单个文件
73
+ ossClient.delete(fileKey);
74
+
75
+ // 批量删除(任务完成后清理临时文件)
76
+ ossClient.deleteMultiple(List.of(key1, key2, key3));
77
+ ```
78
+
79
+ ## 前端分片上传(大文件)
80
+
81
+ ```java
82
+ // 1. 初始化分片任务
83
+ String uploadId = ossClient.createMultipartUpload(fileKey, "video/mp4", Duration.ofHours(1));
84
+
85
+ // 2. 生成各分片预签名 URL,返回前端(每片约 5MB)
86
+ List<String> partUrls = ossClient.getMultipartUploadUrls(fileKey, uploadId, totalBytes, Duration.ofHours(1));
87
+
88
+ // 3. 前端按顺序 PUT 上传各分片,收集 ETag 后通知后端合并
89
+ List<UploadPart> parts = /* 前端传回的 partNumber + ETag 列表 */;
90
+ String cdnUrl = ossClient.completeMultipartUpload(fileKey, uploadId, parts);
91
+
92
+ // 异常情况:取消并清理已上传分片
93
+ ossClient.abortMultipartUpload(fileKey, uploadId, Duration.ofHours(1));
94
+ ```
@@ -0,0 +1,61 @@
1
+ # OSS 规范与注意事项
2
+
3
+ ## 文件路径规范
4
+
5
+ **路径由服务端统一生成,禁止客户端自定义**,使用 `OssFileKeyHelper` 工具类:
6
+
7
+ ```java
8
+ // 客户上传素材:materials/{tenantId}/{yyyy}/{MM}/{dd}/{uuid}/{filename}
9
+ String key = OssFileKeyHelper.materialKey("tenant01", "avatar.mp4");
10
+ // → materials/tenant01/2026/03/13/2495d79518da.../avatar.mp4
11
+
12
+ // 平台生成视频:videos/{tenantId}/{yyyy}/{MM}/{dd}/{taskId}/{filename}
13
+ String key = OssFileKeyHelper.videoKey("tenant01", "task-789", "output.mp4");
14
+ // → videos/tenant01/2026/03/13/task-789/output.mp4
15
+
16
+ // 临时中间文件:temp/{serviceName}/{yyyy}/{MM}/{dd}/{taskId}/{filename}
17
+ String key = OssFileKeyHelper.tempKey("render-svc", "task-789", "frame_001.jpg");
18
+ // → temp/render-svc/2026/03/13/task-789/frame_001.jpg
19
+
20
+ // 前端静态资源:static/{version}/{filename}
21
+ String key = OssFileKeyHelper.staticKey("v1.2.3", "app.abc123.js");
22
+ // → static/v1.2.3/app.abc123.js
23
+ ```
24
+
25
+ ## DB 存储规范
26
+
27
+ **DB 中只存 `{bucket}/{filekey}`,不存完整 URL**:
28
+
29
+ ```
30
+ asset/videos/tenant01/2026/03/13/task-789/output.mp4
31
+ ```
32
+
33
+ 访问时调用 `ossClient.resolveAccessUrl(storedValue)` 动态生成签名 URL。
34
+
35
+ ## FileKey 编码(接口传参用)
36
+
37
+ fileKey 含大量斜杠,作为接口参数时使用 Base64URL 编码:
38
+
39
+ ```java
40
+ // 编码:上传后对外暴露
41
+ String encodedKey = OssFileKeyHelper.encodeKey(fileKey);
42
+
43
+ // 解码:接收到 encodedKey 后还原
44
+ String rawKey = OssFileKeyHelper.decodeKey(encodedKey);
45
+ ```
46
+
47
+ **约定**:
48
+ - 上传接口响应的 `fileKey` 字段返回**编码后**的值
49
+ - 下载/预签名/删除接口接收编码值,内部自动解码;传入原始路径也兼容
50
+
51
+ ## 注意事项
52
+
53
+ 1. **AK/SK 安全**:生产环境通过环境变量或 Nacos 加密配置注入,**禁止明文写入代码仓库**
54
+
55
+ 2. **临时文件清理**:`temp/` 前缀文件在任务完成后必须主动调用 `delete()` 清理,同时在存储侧配置 Lifecycle Policy 7 天兜底过期删除
56
+
57
+ 3. **分片任务异常**:分片上传中断后若未调用 `abortMultipartUpload`,存储侧会产生碎片,建议配置 Lifecycle Policy 3 天清理未完成分片
58
+
59
+ 4. **Nacos 动态刷新**:修改 `avatar.oss.*` 配置后需**重启应用**,不支持运行时热刷新(IOSS SDK 为单例初始化)
60
+
61
+ 5. **MinIO/COS/S3 的 signedHeaders**:预签名 URL 可能含 `x-amz-te` 等 header,前端上传时必须携带,阿里云 OSS 的 signedHeaders 为空 Map