@newpeak/barista-cli 0.1.3 → 0.1.5

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 (205) hide show
  1. package/dist/commands/liberica/auth/index.d.ts.map +1 -1
  2. package/dist/commands/liberica/auth/index.js +5 -0
  3. package/dist/commands/liberica/auth/index.js.map +1 -1
  4. package/dist/commands/liberica/clients/create.d.ts +3 -0
  5. package/dist/commands/liberica/clients/create.d.ts.map +1 -0
  6. package/dist/commands/liberica/clients/create.js +125 -0
  7. package/dist/commands/liberica/clients/create.js.map +1 -0
  8. package/dist/commands/liberica/clients/delete.d.ts +3 -0
  9. package/dist/commands/liberica/clients/delete.d.ts.map +1 -0
  10. package/dist/commands/liberica/clients/delete.js +125 -0
  11. package/dist/commands/liberica/clients/delete.js.map +1 -0
  12. package/dist/commands/liberica/clients/get.d.ts +3 -0
  13. package/dist/commands/liberica/clients/get.d.ts.map +1 -0
  14. package/dist/commands/liberica/clients/get.js +77 -0
  15. package/dist/commands/liberica/clients/get.js.map +1 -0
  16. package/dist/commands/liberica/clients/index.d.ts +3 -0
  17. package/dist/commands/liberica/clients/index.d.ts.map +1 -0
  18. package/dist/commands/liberica/clients/index.js +17 -0
  19. package/dist/commands/liberica/clients/index.js.map +1 -0
  20. package/dist/commands/liberica/clients/list.d.ts +3 -0
  21. package/dist/commands/liberica/clients/list.d.ts.map +1 -0
  22. package/dist/commands/liberica/clients/list.js +92 -0
  23. package/dist/commands/liberica/clients/list.js.map +1 -0
  24. package/dist/commands/liberica/clients/update.d.ts +3 -0
  25. package/dist/commands/liberica/clients/update.d.ts.map +1 -0
  26. package/dist/commands/liberica/clients/update.js +106 -0
  27. package/dist/commands/liberica/clients/update.js.map +1 -0
  28. package/dist/commands/liberica/index.d.ts.map +1 -1
  29. package/dist/commands/liberica/index.js +11 -0
  30. package/dist/commands/liberica/index.js.map +1 -1
  31. package/dist/commands/liberica/materials/create.d.ts +3 -0
  32. package/dist/commands/liberica/materials/create.d.ts.map +1 -0
  33. package/dist/commands/liberica/materials/create.js +154 -0
  34. package/dist/commands/liberica/materials/create.js.map +1 -0
  35. package/dist/commands/liberica/materials/delete.d.ts +3 -0
  36. package/dist/commands/liberica/materials/delete.d.ts.map +1 -0
  37. package/dist/commands/liberica/materials/delete.js +104 -0
  38. package/dist/commands/liberica/materials/delete.js.map +1 -0
  39. package/dist/commands/liberica/materials/disable.d.ts +3 -0
  40. package/dist/commands/liberica/materials/disable.d.ts.map +1 -0
  41. package/dist/commands/liberica/materials/disable.js +146 -0
  42. package/dist/commands/liberica/materials/disable.js.map +1 -0
  43. package/dist/commands/liberica/materials/enable.d.ts +3 -0
  44. package/dist/commands/liberica/materials/enable.d.ts.map +1 -0
  45. package/dist/commands/liberica/materials/enable.js +126 -0
  46. package/dist/commands/liberica/materials/enable.js.map +1 -0
  47. package/dist/commands/liberica/materials/get.d.ts +3 -0
  48. package/dist/commands/liberica/materials/get.d.ts.map +1 -0
  49. package/dist/commands/liberica/materials/get.js +71 -0
  50. package/dist/commands/liberica/materials/get.js.map +1 -0
  51. package/dist/commands/liberica/materials/index.d.ts +3 -0
  52. package/dist/commands/liberica/materials/index.d.ts.map +1 -0
  53. package/dist/commands/liberica/materials/index.js +21 -0
  54. package/dist/commands/liberica/materials/index.js.map +1 -0
  55. package/dist/commands/liberica/materials/list.d.ts +3 -0
  56. package/dist/commands/liberica/materials/list.d.ts.map +1 -0
  57. package/dist/commands/liberica/materials/list.js +107 -0
  58. package/dist/commands/liberica/materials/list.js.map +1 -0
  59. package/dist/commands/liberica/materials/update.d.ts +3 -0
  60. package/dist/commands/liberica/materials/update.d.ts.map +1 -0
  61. package/dist/commands/liberica/materials/update.js +118 -0
  62. package/dist/commands/liberica/materials/update.js.map +1 -0
  63. package/dist/commands/liberica/suppliers/create.d.ts +3 -0
  64. package/dist/commands/liberica/suppliers/create.d.ts.map +1 -0
  65. package/dist/commands/liberica/suppliers/create.js +140 -0
  66. package/dist/commands/liberica/suppliers/create.js.map +1 -0
  67. package/dist/commands/liberica/suppliers/delete.d.ts +3 -0
  68. package/dist/commands/liberica/suppliers/delete.d.ts.map +1 -0
  69. package/dist/commands/liberica/suppliers/delete.js +102 -0
  70. package/dist/commands/liberica/suppliers/delete.js.map +1 -0
  71. package/dist/commands/liberica/suppliers/disable.d.ts +3 -0
  72. package/dist/commands/liberica/suppliers/disable.d.ts.map +1 -0
  73. package/dist/commands/liberica/suppliers/disable.js +144 -0
  74. package/dist/commands/liberica/suppliers/disable.js.map +1 -0
  75. package/dist/commands/liberica/suppliers/enable.d.ts +3 -0
  76. package/dist/commands/liberica/suppliers/enable.d.ts.map +1 -0
  77. package/dist/commands/liberica/suppliers/enable.js +124 -0
  78. package/dist/commands/liberica/suppliers/enable.js.map +1 -0
  79. package/dist/commands/liberica/suppliers/get.d.ts +3 -0
  80. package/dist/commands/liberica/suppliers/get.d.ts.map +1 -0
  81. package/dist/commands/liberica/suppliers/get.js +75 -0
  82. package/dist/commands/liberica/suppliers/get.js.map +1 -0
  83. package/dist/commands/liberica/suppliers/index.d.ts +3 -0
  84. package/dist/commands/liberica/suppliers/index.d.ts.map +1 -0
  85. package/dist/commands/liberica/suppliers/index.js +21 -0
  86. package/dist/commands/liberica/suppliers/index.js.map +1 -0
  87. package/dist/commands/liberica/suppliers/list.d.ts +3 -0
  88. package/dist/commands/liberica/suppliers/list.d.ts.map +1 -0
  89. package/dist/commands/liberica/suppliers/list.js +100 -0
  90. package/dist/commands/liberica/suppliers/list.js.map +1 -0
  91. package/dist/commands/liberica/suppliers/update.d.ts +3 -0
  92. package/dist/commands/liberica/suppliers/update.d.ts.map +1 -0
  93. package/dist/commands/liberica/suppliers/update.js +122 -0
  94. package/dist/commands/liberica/suppliers/update.js.map +1 -0
  95. package/dist/commands/liberica/uoms/create.d.ts +3 -0
  96. package/dist/commands/liberica/uoms/create.d.ts.map +1 -0
  97. package/dist/commands/liberica/uoms/create.js +120 -0
  98. package/dist/commands/liberica/uoms/create.js.map +1 -0
  99. package/dist/commands/liberica/uoms/delete.d.ts +3 -0
  100. package/dist/commands/liberica/uoms/delete.d.ts.map +1 -0
  101. package/dist/commands/liberica/uoms/delete.js +104 -0
  102. package/dist/commands/liberica/uoms/delete.js.map +1 -0
  103. package/dist/commands/liberica/uoms/disable.d.ts +3 -0
  104. package/dist/commands/liberica/uoms/disable.d.ts.map +1 -0
  105. package/dist/commands/liberica/uoms/disable.js +146 -0
  106. package/dist/commands/liberica/uoms/disable.js.map +1 -0
  107. package/dist/commands/liberica/uoms/enable.d.ts +3 -0
  108. package/dist/commands/liberica/uoms/enable.d.ts.map +1 -0
  109. package/dist/commands/liberica/uoms/enable.js +126 -0
  110. package/dist/commands/liberica/uoms/enable.js.map +1 -0
  111. package/dist/commands/liberica/uoms/get.d.ts +3 -0
  112. package/dist/commands/liberica/uoms/get.d.ts.map +1 -0
  113. package/dist/commands/liberica/uoms/get.js +71 -0
  114. package/dist/commands/liberica/uoms/get.js.map +1 -0
  115. package/dist/commands/liberica/uoms/index.d.ts +3 -0
  116. package/dist/commands/liberica/uoms/index.d.ts.map +1 -0
  117. package/dist/commands/liberica/uoms/index.js +21 -0
  118. package/dist/commands/liberica/uoms/index.js.map +1 -0
  119. package/dist/commands/liberica/uoms/list.d.ts +3 -0
  120. package/dist/commands/liberica/uoms/list.d.ts.map +1 -0
  121. package/dist/commands/liberica/uoms/list.js +98 -0
  122. package/dist/commands/liberica/uoms/list.js.map +1 -0
  123. package/dist/commands/liberica/uoms/update.d.ts +3 -0
  124. package/dist/commands/liberica/uoms/update.d.ts.map +1 -0
  125. package/dist/commands/liberica/uoms/update.js +115 -0
  126. package/dist/commands/liberica/uoms/update.js.map +1 -0
  127. package/dist/core/api/client.d.ts +30 -0
  128. package/dist/core/api/client.d.ts.map +1 -1
  129. package/dist/core/api/client.js +590 -0
  130. package/dist/core/api/client.js.map +1 -1
  131. package/dist/index.js +1 -1
  132. package/dist/types/client.d.ts +100 -0
  133. package/dist/types/client.d.ts.map +1 -0
  134. package/dist/types/client.js +2 -0
  135. package/dist/types/client.js.map +1 -0
  136. package/dist/types/index.d.ts +6 -0
  137. package/dist/types/index.d.ts.map +1 -1
  138. package/dist/types/material.d.ts +49 -0
  139. package/dist/types/material.d.ts.map +1 -0
  140. package/dist/types/material.js +2 -0
  141. package/dist/types/material.js.map +1 -0
  142. package/dist/types/supplier.d.ts +53 -0
  143. package/dist/types/supplier.d.ts.map +1 -0
  144. package/dist/types/supplier.js +2 -0
  145. package/dist/types/supplier.js.map +1 -0
  146. package/dist/types/uom.d.ts +47 -0
  147. package/dist/types/uom.d.ts.map +1 -0
  148. package/dist/types/uom.js +2 -0
  149. package/dist/types/uom.js.map +1 -0
  150. package/docs/commands/REFERENCE.md +21 -15
  151. package/docs/commands/liberica/materials-create.md +293 -0
  152. package/docs/commands/liberica/materials-delete.md +240 -0
  153. package/docs/commands/liberica/materials-disable.md +150 -0
  154. package/docs/commands/liberica/materials-enable.md +146 -0
  155. package/docs/commands/liberica/materials-get.md +188 -0
  156. package/docs/commands/liberica/materials-list.md +198 -0
  157. package/docs/commands/liberica/materials-update.md +250 -0
  158. package/docs/commands/liberica/uoms-create.md +136 -0
  159. package/docs/commands/liberica/uoms-delete.md +119 -0
  160. package/docs/commands/liberica/uoms-disable.md +117 -0
  161. package/docs/commands/liberica/uoms-enable.md +115 -0
  162. package/docs/commands/liberica/uoms-get.md +119 -0
  163. package/docs/commands/liberica/uoms-list.md +155 -0
  164. package/docs/commands/liberica/uoms-update.md +148 -0
  165. package/package.json +2 -4
  166. package/src/commands/liberica/auth/index.ts +6 -0
  167. package/src/commands/liberica/clients/create.ts +122 -0
  168. package/src/commands/liberica/clients/delete.ts +125 -0
  169. package/src/commands/liberica/clients/get.ts +88 -0
  170. package/src/commands/liberica/clients/index.ts +19 -0
  171. package/src/commands/liberica/clients/list.ts +123 -0
  172. package/src/commands/liberica/clients/update.ts +103 -0
  173. package/src/commands/liberica/index.ts +11 -0
  174. package/src/commands/liberica/materials/create.ts +168 -0
  175. package/src/commands/liberica/materials/delete.ts +105 -0
  176. package/src/commands/liberica/materials/disable.ts +148 -0
  177. package/src/commands/liberica/materials/enable.ts +129 -0
  178. package/src/commands/liberica/materials/get.ts +83 -0
  179. package/src/commands/liberica/materials/index.ts +23 -0
  180. package/src/commands/liberica/materials/list.ts +142 -0
  181. package/src/commands/liberica/materials/update.ts +125 -0
  182. package/src/commands/liberica/suppliers/create.ts +149 -0
  183. package/src/commands/liberica/suppliers/delete.ts +102 -0
  184. package/src/commands/liberica/suppliers/disable.ts +145 -0
  185. package/src/commands/liberica/suppliers/enable.ts +126 -0
  186. package/src/commands/liberica/suppliers/get.ts +86 -0
  187. package/src/commands/liberica/suppliers/index.ts +23 -0
  188. package/src/commands/liberica/suppliers/list.ts +134 -0
  189. package/src/commands/liberica/suppliers/update.ts +128 -0
  190. package/src/commands/liberica/uoms/create.ts +134 -0
  191. package/src/commands/liberica/uoms/delete.ts +105 -0
  192. package/src/commands/liberica/uoms/disable.ts +148 -0
  193. package/src/commands/liberica/uoms/enable.ts +129 -0
  194. package/src/commands/liberica/uoms/get.ts +83 -0
  195. package/src/commands/liberica/uoms/index.ts +23 -0
  196. package/src/commands/liberica/uoms/list.ts +129 -0
  197. package/src/commands/liberica/uoms/update.ts +124 -0
  198. package/src/core/api/client.ts +758 -21
  199. package/src/index.ts +1 -1
  200. package/src/types/client.ts +115 -0
  201. package/src/types/index.ts +6 -0
  202. package/src/types/material.ts +61 -0
  203. package/src/types/supplier.ts +66 -0
  204. package/src/types/uom.ts +60 -0
  205. package/bin/barista.js +0 -3
@@ -0,0 +1,293 @@
1
+ # barista liberica materials create
2
+
3
+ Create a new material (product).
4
+
5
+ ## 2.1 Command Metadata
6
+
7
+ | Field | Value |
8
+ |------|-----|
9
+ | Full Command | `barista liberica materials create` |
10
+ | Description | Create a new material |
11
+ | HTTP Method | POST |
12
+ | Requires Authentication | Yes |
13
+ | Supports Dry-Run | Yes |
14
+
15
+ ## 2.2 Backend API Reference
16
+
17
+ ### Controller Location
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── add(@PostResource(path = "/add", requiredPermission = true, requirePermissionCode = MasterMaterialPermissionConstants.ADD_MASTER_MATERIAL))
24
+ └── public ResponseData<MasterMaterialResponse> add(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @RequestBody @Validated(BaseRequest.add.class) MasterMaterialRequest request
27
+ )
28
+ ```
29
+
30
+ ### Request DTO Location
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ ├── materialCode: String (@NotBlank on add, max=255)
37
+ ├── materialNo: String (@NotBlank on add, max=255)
38
+ ├── materialName: String (@NotBlank on add, max=255)
39
+ ├── materialShortName: String (max=255)
40
+ ├── materialClass: String (@NotBlank on add, max=255)
41
+ ├── materialType: String (max=255)
42
+ ├── materialUomCode: String (max=255)
43
+ ├── enableSale: String (Y/N, max=1)
44
+ ├── enablePurchase: String (Y/N, max=1)
45
+ ├── enableSubMaterial: String (Y/N, max=1)
46
+ ├── enableOutsourcing: String (Y/N, max=1)
47
+ ├── enableDivision: String (Y/N, max=1)
48
+ ├── materialMaker: String (max=255)
49
+ ├── defaultWarehouse: String (max=255)
50
+ ├── defaultSupplier: String (max=255)
51
+ ├── unitPrice: BigDecimal
52
+ ├── currency: String (max=255)
53
+ └── remark: String (max=255)
54
+ ```
55
+
56
+ ### Response DTO Location
57
+ ```
58
+ coffee-liberica-end/
59
+ └── business/liberica-business-sales/sales-api/
60
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
61
+ └── MasterMaterialResponse.java
62
+ ├── materialId: Long
63
+ ├── materialCode: String
64
+ ├── materialNo: String
65
+ ├── materialName: String
66
+ ├── materialShortName: String
67
+ ├── materialClass: String
68
+ ├── materialType: String
69
+ ├── materialUomCode: String
70
+ ├── enableSale: String (Y/N)
71
+ ├── enablePurchase: String (Y/N)
72
+ ├── statusFlag: Integer (1=enable, 2=disable)
73
+ └── createTime: String
74
+ ```
75
+
76
+ ## 2.3 CLI Parameter Design
77
+
78
+ ### Command Structure
79
+ ```
80
+ barista liberica materials create [options]
81
+ ```
82
+
83
+ ### Global Options
84
+ | Option | Type | Description |
85
+ |------|------|------|
86
+ | `--env` | string | Target environment (dev\|test\|prod-cn\|prod-jp) |
87
+ | `--tenant` | string | Tenant code |
88
+ | `--dry-run` | boolean | Preview mode (no actual API call) |
89
+ | `--json` | boolean | JSON output |
90
+
91
+ ### Command Options
92
+ | Option | Short | Type | Required | Default | Description | Maps to DTO Field |
93
+ |------|--------|------|------|--------|------|-------------|
94
+ | --name | -n | string | Yes | - | Material name | materialName |
95
+ | --class | -c | string | Yes | - | Material class/category | materialClass |
96
+ | --type | -t | string | No | - | Specification/model | materialType |
97
+ | --unit | -u | string | No | - | Unit of measure | materialUomCode |
98
+ | --code | — | string | No | Auto-generated | Material code | materialCode |
99
+ | --no | — | string | No | Same as code | Material number | materialNo |
100
+ | --short-name | — | string | No | - | Short name | materialShortName |
101
+ | --maker | — | string | No | - | Manufacturer | materialMaker |
102
+ | --sale | — | boolean | No | true | Enable sale flag | enableSale |
103
+ | --purchase | — | boolean | No | true | Enable purchase flag | enablePurchase |
104
+ | --sub-material | — | boolean | No | false | Can be sub-material | enableSubMaterial |
105
+ | --outsourcing | — | boolean | No | false | Enable outsourcing | enableOutsourcing |
106
+ | --division | — | boolean | No | false | Enable cutting/division | enableDivision |
107
+ | --warehouse | -w | string | No | - | Default warehouse | defaultWarehouse |
108
+ | --supplier | -s | string | No | - | Default supplier | defaultSupplier |
109
+ | --price | -p | number | No | - | Unit price | unitPrice |
110
+ | --currency | — | string | No | - | Currency code | currency |
111
+ | --remark | -r | string | No | - | Remarks | remark |
112
+
113
+ ## 2.4 Field Mapping Table
114
+
115
+ | CLI Parameter | DTO Field | Type Conversion | Validation Rule |
116
+ |---------|---------|----------|----------|
117
+ | --name / -n | materialName | Direct | @NotBlank, max=255 |
118
+ | --class / -c | materialClass | Direct | @NotBlank, max=255 |
119
+ | --type / -t | materialType | Direct | max=255 |
120
+ | --unit / -u | materialUomCode | Direct | max=255 |
121
+ | --code | materialCode | Direct | max=255, auto-generated if empty |
122
+ | --no | materialNo | Direct | max=255, defaults to code |
123
+ | --short-name | materialShortName | Direct | max=255 |
124
+ | --maker | materialMaker | Direct | max=255 |
125
+ | --sale | enableSale | boolean->String (Y/N) | max=1 |
126
+ | --purchase | enablePurchase | boolean->String (Y/N) | max=1 |
127
+ | --sub-material | enableSubMaterial | boolean->String (Y/N) | max=1 |
128
+ | --outsourcing | enableOutsourcing | boolean->String (Y/N) | max=1 |
129
+ | --division | enableDivision | boolean->String (Y/N) | max=1 |
130
+ | --warehouse / -w | defaultWarehouse | Direct | max=255 |
131
+ | --supplier / -s | defaultSupplier | Direct | max=255 |
132
+ | --price / -p | unitPrice | number->BigDecimal | - |
133
+ | --currency | currency | Direct | max=255 |
134
+ | --remark / -r | remark | Direct | max=255 |
135
+
136
+ **Auto-Generated Fields:**
137
+ | Field | Value |
138
+ |------|-----|
139
+ | tenantId | From JWT token (do NOT pass X-TENANT-ID header) |
140
+ | statusFlag | Default 1 (enabled) |
141
+ | materialCode | Auto-generated via getCodeByType('TenantMaterialCode') if not provided |
142
+ | materialNo | Defaults to materialCode if not provided |
143
+
144
+ ## 2.5 Auto Code Generation Flow
145
+
146
+ When `--code` is not provided, the CLI automatically generates a material code:
147
+
148
+ ```typescript
149
+ // Call getCodeByType API to generate code
150
+ const codeResponse = await apiClient.getCodeByType(
151
+ environment,
152
+ tenant,
153
+ 'TenantMaterialCode' // Code type from TenantCodeType enum
154
+ );
155
+
156
+ if (codeResponse.success && codeResponse.data) {
157
+ materialCode = codeResponse.data;
158
+ } else {
159
+ throw new Error('Failed to generate material code');
160
+ }
161
+ ```
162
+
163
+ **API Details:**
164
+ - Endpoint: `GET /api/enterprise/master/id/getCodeByType?type=TenantMaterialCode`
165
+ - Response: `{ success: true, data: "MAT-2024-0001" }`
166
+ - Code Type: `TenantMaterialCode` (defined in `TenantCodeType.java`)
167
+
168
+ **Backend Code Generation:**
169
+ ```
170
+ coffee-liberica-end/
171
+ └── business/liberica-business-master/master-api/
172
+ └── src/main/java/com/newpeak/liberica/master/api/enums/
173
+ └── TenantCodeType.java
174
+ └── TenantMaterialCode // Line 66
175
+ ```
176
+
177
+ ## 2.6 Error Code Reference
178
+
179
+ ### ExceptionEnum Location
180
+ ```
181
+ coffee-liberica-end/
182
+ └── business/liberica-business-sales/sales-api/
183
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
184
+ └── MasterMaterialExceptionEnum.java
185
+ ├── MASTER_MATERIAL_NOT_EXIST("01001200001", "租户物料不存在")
186
+ ├── MASTER_MATERIAL_CODE_FORMAT_CANNOT_EMPTY("01001200003", "物料编码规则不能为空")
187
+ ├── MASTER_MATERIAL_CODE_FORMAT_NOT_CORRECT("01001200004", "物料编码规则格式不正确")
188
+ ├── MASTER_MATERIAL_CODE_VALIDATE_EMPTY_ERROR("01001200005", "{}不能为空")
189
+ ├── MASTER_MATERIAL_CODE_VALIDATE_NOT_EXIST_ERROR("01001200006", "指定{}不存在")
190
+ ├── MASTER_MATERIAL_NO_VALIDATE_EMPTY_ERROR("01001200007", "{}不能为空")
191
+ ├── MASTER_MATERIAL_NAME_VALIDATE_EMPTY_ERROR("01001200009", "{}不能为空")
192
+ ├── ENABLE_DIVISION_MATERIAL_NEED_WIDE_AND_LONG("01001200012", "可分割物料必须设置长和宽")
193
+ └── ENABLE_DIVISION_MATERIAL_NEED_WIDE_AND_LONG_GT_ZERO("01001200013", "可分割物料长和宽必须大于0")
194
+ ```
195
+
196
+ ### Known Error Codes
197
+ | Error Code | Error Message | Trigger Condition |
198
+ |--------|----------|----------|
199
+ | 01001200001 | Material does not exist | Query/edit with non-existent ID |
200
+ | 01001200003 | Material code format cannot be empty | Auto-generation rule not configured |
201
+ | 01001200004 | Material code format incorrect | Invalid code format pattern |
202
+ | 01001200005 | {} cannot be empty | Required field missing (materialCode) |
203
+ | 01001200007 | {} cannot be empty | Required field missing (materialNo) |
204
+ | 01001200009 | {} cannot be empty | Required field missing (materialName) |
205
+ | 01001200012 | Divisible material must set length and width | enableDivision=true without dimensions |
206
+ | 01001200013 | Divisible material length and width must be > 0 | enableDivision with invalid dimensions |
207
+
208
+ ## 2.7 Permission Check
209
+
210
+ | Check Item | Location | Description |
211
+ |--------|------|------|
212
+ | PermissionConstants | `MasterMaterialPermissionConstants.ADD_MASTER_MATERIAL` | Controller layer `@PostResource(requirePermissionCode = "ADD_MASTER_MATERIAL")` |
213
+
214
+ ## 2.8 Implementation Notes
215
+
216
+ 1. **Required Fields**: `--name` and `--class` must be provided
217
+ 2. **Auto-Generated Code**: `materialCode` is auto-generated via `getCodeByType('TenantMaterialCode')` if not provided
218
+ 3. **Material Number**: `materialNo` defaults to `materialCode` if not explicitly provided
219
+ 4. **Dry-Run Support**: Use `--dry-run` to preview request without calling API
220
+ 5. **Boolean Flags**: All enable flags (sale, purchase, etc.) default to sensible values
221
+ 6. **No Batch Create**: This command does NOT support batch creation (one material per call)
222
+ 7. **No Interactive Wizard**: No interactive prompts for optional fields (use explicit options)
223
+
224
+ ## 2.9 Example Usage
225
+
226
+ ```bash
227
+ # Create with minimal required fields (auto-generates code)
228
+ barista liberica materials create --name "Steel Plate" --class "RAW_MATERIAL"
229
+
230
+ # Create with all common options
231
+ barista liberica materials create \
232
+ --name "Aluminum Sheet 5052" \
233
+ --class "RAW_MATERIAL" \
234
+ --type "5052-H32" \
235
+ --unit "PCS" \
236
+ --sale \
237
+ --purchase \
238
+ --warehouse "MAIN_WH" \
239
+ --price 125.50 \
240
+ --currency "USD" \
241
+ --remark "Standard aluminum sheet"
242
+
243
+ # Create with explicit code (skip auto-generation)
244
+ barista liberica materials create \
245
+ --code "MAT-001" \
246
+ --name "Custom Part" \
247
+ --class "FINISHED_GOOD"
248
+
249
+ # Dry-run to preview
250
+ barista liberica materials create \
251
+ --name "Test Material" \
252
+ --class "TEST" \
253
+ --dry-run
254
+
255
+ # JSON output
256
+ barista liberica materials create \
257
+ --name "New Product" \
258
+ --class "PRODUCT" \
259
+ --json
260
+ ```
261
+
262
+ ## 2.10 Request Body Structure
263
+
264
+ ```json
265
+ {
266
+ "materialCode": "MAT-2024-0001",
267
+ "materialNo": "MAT-2024-0001",
268
+ "materialName": "Steel Plate",
269
+ "materialClass": "RAW_MATERIAL",
270
+ "materialType": "SPCC",
271
+ "materialUomCode": "PCS",
272
+ "enableSale": "Y",
273
+ "enablePurchase": "Y",
274
+ "enableSubMaterial": "N",
275
+ "enableOutsourcing": "N",
276
+ "enableDivision": "N",
277
+ "statusFlag": 1
278
+ }
279
+ ```
280
+
281
+ ## 2.11 API Path
282
+
283
+ ```
284
+ POST /api/enterprise/sales/material/add
285
+ ```
286
+
287
+ **Headers:**
288
+ ```
289
+ Authorization: <token> (No "Bearer " prefix)
290
+ Content-Type: application/json
291
+ ```
292
+
293
+ **Note**: Do NOT include `X-TENANT-ID` header. Tenant is extracted from JWT token.
@@ -0,0 +1,240 @@
1
+ # barista liberica materials delete
2
+
3
+ 删除指定物料。
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials delete` |
10
+ | 功能描述 | 删除指定物料 |
11
+ | HTTP方法 | POST |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ✅ 是(默认行为) |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── delete(@PostResource(path = "/delete", requiredPermission = true, requirePermissionCode = MasterMaterialPermissionConstants.DEL_MASTER_MATERIAL))
24
+ └── public ResponseData<?> delete(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @RequestBody @Validated(BaseRequest.delete.class) MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ ├── materialId: Long (@NotNull on delete)
37
+ └── tenantId: Long
38
+ ```
39
+
40
+ **删除请求体结构:**
41
+ ```json
42
+ {
43
+ "materialId": 123456789
44
+ }
45
+ ```
46
+
47
+ ### Response DTO位置
48
+ ```
49
+ coffee-liberica-end/
50
+ └── business/liberica-business-sales/sales-api/
51
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
52
+ └── MasterMaterialResponse.java
53
+ ├── materialId: Long
54
+ ├── materialCode: String
55
+ ├── materialNo: String
56
+ ├── materialName: String
57
+ └── statusFlag: Integer (1=启用, 2=禁用)
58
+ ```
59
+
60
+ ## 2.3 CLI参数设计
61
+
62
+ ### 命令结构
63
+ ```bash
64
+ barista liberica materials delete <materialId> [options]
65
+ ```
66
+
67
+ ### 全局选项
68
+ | 选项 | 类型 | 说明 |
69
+ |------|------|------|
70
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
71
+ | `--tenant` | string | 租户代码 |
72
+ | `--dry-run` | boolean | 预览模式(默认开启) |
73
+ | `--json` | boolean | JSON输出 |
74
+
75
+ ### 命令选项
76
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 | 对应DTO字段 |
77
+ |------|--------|------|------|--------|------|-------------|
78
+ | materialId | - | string | ✅ | - | 物料ID(位置参数) | materialId |
79
+ | --force | -f | boolean | ⬜ | false | 跳过确认直接删除 | - |
80
+ | --json | - | boolean | ⬜ | false | JSON格式输出 | - |
81
+
82
+ ### 位置参数
83
+ | 参数 | 类型 | 必填 | 说明 |
84
+ |------|------|------|------|
85
+ | materialId | string | ✅ | 要删除的物料ID |
86
+
87
+ ## 2.4 字段映射表
88
+
89
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
90
+ |---------|---------|----------|----------|
91
+ | materialId (位置参数) | materialId | string→Long | @NotNull |
92
+
93
+ ## 2.5 确认流程
94
+
95
+ 删除操作默认启用dry-run模式,需要用户显式确认:
96
+
97
+ ### 默认行为(无--force)
98
+ ```bash
99
+ $ barista liberica materials delete 123456789
100
+
101
+ 🗑️ Delete Material (dev)
102
+
103
+ Material ID: 123456789
104
+ Name: 测试物料
105
+ Code: MAT-001
106
+
107
+ 🔍 Dry-Run Mode: No actual deletion will be made
108
+
109
+ To delete, add: --force
110
+ ```
111
+
112
+ ### 强制删除(带--force)
113
+ ```bash
114
+ $ barista liberica materials delete 123456789 --force
115
+
116
+ 🗑️ Delete Material (dev)
117
+
118
+ Material ID: 123456789
119
+ Name: 测试物料
120
+ Code: MAT-001
121
+
122
+ ✓ Material "测试物料" (ID: 123456789) deleted
123
+ ```
124
+
125
+ ### JSON输出模式
126
+ ```bash
127
+ $ barista liberica materials delete 123456789 --json
128
+ {
129
+ "success": true,
130
+ "dryRun": true,
131
+ "material": {
132
+ "materialId": "123456789",
133
+ "materialName": "测试物料",
134
+ "materialCode": "MAT-001"
135
+ }
136
+ }
137
+
138
+ $ barista liberica materials delete 123456789 --force --json
139
+ {
140
+ "success": true,
141
+ "materialId": "123456789",
142
+ "name": "测试物料"
143
+ }
144
+ ```
145
+
146
+ ## 2.6 错误码引用
147
+
148
+ ### ExceptionEnum位置
149
+ ```
150
+ coffee-liberica-end/
151
+ └── business/liberica-business-sales/sales-api/
152
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
153
+ └── MasterMaterialExceptionEnum.java
154
+ ├── MASTER_MATERIAL_NOT_EXIST("01001310001", "租户物料不存在")
155
+ └── DELETE_MASTER_WAREHOUSE_ERROR("01001310014", "删除物料仓库错误")
156
+ ```
157
+
158
+ ### Service层业务校验
159
+ ```
160
+ coffee-liberica-end/
161
+ └── business/liberica-business-sales/sales-business/
162
+ └── src/main/java/com/newpeak/liberica/sales/modular/master/business/impl/
163
+ └── MasterMaterialBusinessImpl.java
164
+ └── del(MasterMaterialRequest request)
165
+ ├── Line 384: 检查物料是否存在
166
+ │ └── throw new SalesServiceException(MasterMaterialExceptionEnum.MASTER_MATERIAL_NOT_EXIST)
167
+ └── Line 1387: 检查仓库关联
168
+ └── throw new SalesServiceException(MasterMaterialExceptionEnum.DELETE_MASTER_WAREHOUSE_ERROR)
169
+ ```
170
+
171
+ ### 已知错误码
172
+ | 错误码 | 错误消息 | 触发条件 |
173
+ |--------|----------|----------|
174
+ | 01001310001 | 租户物料不存在 | 物料ID不存在或已被删除 |
175
+ | 01001310014 | 删除物料仓库错误 | 物料与仓库存在关联,无法删除 |
176
+
177
+ ## 2.7 权限检查
178
+
179
+ | 检查项 | 位置 | 说明 |
180
+ |--------|------|------|
181
+ | PermissionConstants | `MasterMaterialPermissionConstants.DEL_MASTER_MATERIAL` | Controller层 `@PostResource(requirePermissionCode = "DEL_MASTER_MATERIAL")` |
182
+
183
+ ## 2.8 实现要点
184
+
185
+ 1. **必填参数**:materialId 作为位置参数必须提供
186
+ 2. **Dry-run默认开启**:不带 `--force` 时只显示预览信息
187
+ 3. **物料详情获取**:删除前先调用 `/detail` 接口获取物料信息用于确认提示
188
+ 4. **ID类型处理**:后端使用 Long (BigInteger),CLI使用 string 避免精度丢失
189
+ 5. **权限要求**:需要 `DEL_MASTER_MATERIAL` 权限
190
+
191
+ ## 2.9 示例用法
192
+
193
+ ```bash
194
+ # 预览删除(dry-run模式,默认行为)
195
+ barista liberica materials delete 123456789
196
+
197
+ # 强制删除(跳过确认)
198
+ barista liberica materials delete 123456789 --force
199
+
200
+ # 指定环境删除
201
+ barista liberica materials delete 123456789 --env test --force
202
+
203
+ # JSON输出预览
204
+ barista liberica materials delete 123456789 --json
205
+
206
+ # JSON输出并强制删除
207
+ barista liberica materials delete 123456789 --force --json
208
+ ```
209
+
210
+ ## 2.10 实现参考
211
+
212
+ ### --force 模式参考
213
+ 参考 `suppliers/delete.ts` 的实现:
214
+
215
+ ```typescript
216
+ if (!options.force) {
217
+ if (jsonOutput) {
218
+ console.log(JSON.stringify({ success: true, dryRun: true, supplier }));
219
+ } else {
220
+ console.log(chalk.cyan('\n🔍 Dry-Run Mode: No actual deletion will be made\n'));
221
+ console.log(chalk.yellow(' To delete, add: --force\n'));
222
+ }
223
+ return;
224
+ }
225
+
226
+ // 实际删除
227
+ const response = await apiClient.deleteSupplier(environment, tenant, supplierId);
228
+ ```
229
+
230
+ ### 请求体构造
231
+ ```typescript
232
+ const request = {
233
+ materialId: parseInt(materialId) // string to Long
234
+ };
235
+ ```
236
+
237
+ ### API路径
238
+ ```
239
+ POST /api/enterprise/sales/material/delete
240
+ ```
@@ -0,0 +1,150 @@
1
+ # barista liberica materials disable
2
+
3
+ Disable (deactivate) a material.
4
+
5
+ ## 2.1 命令元数据
6
+
7
+ | 字段 | 值 |
8
+ |------|-----|
9
+ | 完整命令 | `barista liberica materials disable <materialId>` |
10
+ | 功能描述 | 禁用(停用)物料 |
11
+ | HTTP方法 | POST |
12
+ | 是否需要认证 | ✅ 是 |
13
+ | 是否支持dry-run | ✅ 是 |
14
+
15
+ ## 2.2 后端接口引用
16
+
17
+ ### Controller位置
18
+ ```
19
+ coffee-liberica-end/
20
+ └── facade/liberica-facade-enterprise/
21
+ └── src/main/java/com/newpeak/liberica/facade/enterprise/controller/master/
22
+ └── EnterpriseMaterialController.java
23
+ └── batchDeActive(@PostResource(path = "/batchDeActive", requiredPermission = true, requirePermissionCode = MasterMaterialPermissionConstants.DE_ACTIVE_MASTER_MATERIAL))
24
+ └── public ResponseData<?> batchDeActive(
25
+ @RequestHeader("X-TENANT-ID") Long tenantId,
26
+ @RequestBody @Validated(BaseRequest.batchDelete.class) MasterMaterialRequest masterMaterialRequest
27
+ )
28
+ ```
29
+
30
+ ### Request DTO位置
31
+ ```
32
+ coffee-liberica-end/
33
+ └── business/liberica-business-sales/sales-api/
34
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/request/
35
+ └── MasterMaterialRequest.java
36
+ └── materialIdList: Set<Long>
37
+ ```
38
+
39
+ ### Response DTO位置
40
+ ```
41
+ coffee-liberica-end/
42
+ └── business/liberica-business-sales/sales-api/
43
+ └── src/main/java/com/newpeak/liberica/sales/api/pojo/response/
44
+ └── MasterMaterialResponse.java
45
+ └── 返回更新后的物料详情(同 create/update)
46
+ ```
47
+
48
+ ## 2.3 CLI参数设计
49
+
50
+ ### 命令结构
51
+ ```
52
+ barista liberica materials disable <materialId> [options]
53
+ ```
54
+
55
+ ### 位置参数
56
+ | 参数 | 类型 | 必填 | 说明 |
57
+ |------|------|------|------|
58
+ | materialId | string | ✅ | 物料ID (materialId) |
59
+
60
+ ### 全局选项
61
+ | 选项 | 类型 | 说明 |
62
+ |------|------|------|
63
+ | `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
64
+ | `--tenant` | string | 租户代码 |
65
+ | `--dry-run` | boolean | 预览模式(不实际调用API) |
66
+ | `--json` | boolean | JSON输出 |
67
+
68
+ ### 命令选项
69
+ | 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 |
70
+ |------|--------|------|------|--------|------|
71
+ | --force | -f | boolean | ⬜ | false | 跳过确认提示 |
72
+
73
+ **说明**:
74
+ - `--dry-run` 预览禁用操作的影响(显示将禁用的物料信息)
75
+ - `--force` 直接执行,不显示确认提示(适用于脚本自动化)
76
+
77
+ ## 2.4 字段映射表
78
+
79
+ | CLI参数 | DTO字段 | 类型转换 | 验证规则 |
80
+ |---------|---------|----------|----------|
81
+ | <materialId> (位置参数) | materialIdList | string→Long | @NotEmpty, 转为单元素Set |
82
+
83
+ **请求体构建**:
84
+ ```json
85
+ {
86
+ "materialIdList": [<materialId>]
87
+ }
88
+ ```
89
+
90
+ ## 2.5 错误码引用
91
+
92
+ ### ExceptionEnum位置
93
+ ```
94
+ coffee-liberica-end/
95
+ └── business/liberica-business-sales/sales-api/
96
+ └── src/main/java/com/newpeak/liberica/sales/api/exception/enums/
97
+ └── MasterMaterialExceptionEnum.java
98
+ ├── MASTER_MATERIAL_NOT_EXIST("01001320001", "租户物料不存在")
99
+ └── ...
100
+ ```
101
+
102
+ ### Service层业务校验
103
+ ```
104
+ coffee-liberica-end/
105
+ └── business/liberica-business-sales/sales-business/
106
+ └── src/main/java/com/newpeak/liberica/sales/modular/master/business/
107
+ └── MasterMaterialBusiness.java
108
+ └── batchDeActive(MasterMaterialRequest masterMaterialRequest)
109
+ └── Line 155-169: 批量禁用物料
110
+ └── 调用 masterMaterialService.batchDeActive(masterMaterialRequest)
111
+ ```
112
+
113
+ ### 已知错误码
114
+ | 错误码 | 错误消息 | 触发条件 |
115
+ |--------|----------|----------|
116
+ | 01001320001 | 租户物料不存在 | materialId 不存在或不属于当前租户 |
117
+
118
+ ## 2.6 权限检查
119
+
120
+ | 检查项 | 位置 | 说明 |
121
+ |--------|------|------|
122
+ | PermissionConstants | `MasterMaterialPermissionConstants.DE_ACTIVE_MASTER_MATERIAL` | Controller层 `@PostResource(requirePermissionCode = "DE_ACTIVE_MASTER_MATERIAL")` |
123
+
124
+ ## 2.7 实现要点
125
+
126
+ 1. **批量API使用单ID**:后端使用 `/batchDeActive` 批量接口,CLI传入单元素数组 `[materialId]`
127
+ 2. **幂等性**:batchDeActive 操作是幂等的——对已禁用的物料再次调用效果相同(直接 set statusFlag=DISABLE)
128
+ 3. **Dry-run模式**:预览显示将禁用的物料信息,但不实际发送请求
129
+ 4. **无强制选项**:--force 跳过确认提示,但不绕过后端权限检查
130
+ 5. **API路径**:`POST /api/enterprise/sales/material/batchDeActive`
131
+
132
+ ## 2.8 示例用法
133
+
134
+ ```bash
135
+ # 禁用物料(交互确认)
136
+ barista liberica materials disable 12345
137
+
138
+ # 跳过确认直接禁用
139
+ barista liberica materials disable 12345 --force
140
+
141
+ # Dry-run 预览
142
+ barista liberica materials disable 12345 --dry-run
143
+
144
+ # JSON 输出
145
+ barista liberica materials disable 12345 --force --json
146
+
147
+ # 物料不存在
148
+ barista liberica materials disable 99999
149
+ # 输出: Error: 租户物料不存在 (01001320001)
150
+ ```