ai-engineering-init 1.1.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.
Files changed (313) hide show
  1. package/.claude/agents/code-reviewer.md +139 -0
  2. package/.claude/agents/project-manager.md +159 -0
  3. package/.claude/audio/completed.wav +0 -0
  4. package/.claude/commands/add-todo.md +255 -0
  5. package/.claude/commands/check.md +210 -0
  6. package/.claude/commands/crud.md +454 -0
  7. package/.claude/commands/dev.md +503 -0
  8. package/.claude/commands/init-docs.md +681 -0
  9. package/.claude/commands/next.md +251 -0
  10. package/.claude/commands/progress.md +242 -0
  11. package/.claude/commands/start.md +199 -0
  12. package/.claude/commands/sync.md +307 -0
  13. package/.claude/commands/update-status.md +428 -0
  14. package/.claude/docs/Mixin/344/275/277/347/224/250/346/214/207/345/215/227.md +299 -0
  15. package/.claude/docs/README.md +167 -0
  16. package/.claude/docs//345/211/215/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +599 -0
  17. package/.claude/docs//345/220/216/347/253/257/345/274/200/345/217/221/346/214/207/345/215/227.md +726 -0
  18. package/.claude/docs//345/267/245/344/275/234/346/265/201/345/274/200/345/217/221/346/214/207/345/215/227.md +714 -0
  19. package/.claude/docs//345/267/245/345/205/267/347/261/273/344/275/277/347/224/250/346/214/207/345/215/227.md +463 -0
  20. package/.claude/docs//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/350/247/204/350/214/203.md +390 -0
  21. package/.claude/docs//346/226/260/345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213/350/247/204/350/214/203.md +688 -0
  22. package/.claude/docs//346/226/260/351/241/271/347/233/256/345/274/200/345/217/221/346/265/201/347/250/213.md +365 -0
  23. package/.claude/docs//346/241/206/346/236/266/350/257/264/346/230/216.md +393 -0
  24. package/.claude/docs//350/267/257/347/224/261/351/205/215/347/275/256/346/214/207/345/215/227.md +246 -0
  25. package/.claude/framework-config.json +73 -0
  26. package/.claude/hooks/pre-tool-use.js +117 -0
  27. package/.claude/hooks/skill-forced-eval.js +167 -0
  28. package/.claude/hooks/stop.js +58 -0
  29. package/.claude/settings.json +41 -0
  30. package/.claude/skills/add-skill/SKILL.md +352 -0
  31. package/.claude/skills/api-development/SKILL.md +560 -0
  32. package/.claude/skills/architecture-design/SKILL.md +756 -0
  33. package/.claude/skills/backend-annotations/SKILL.md +674 -0
  34. package/.claude/skills/banana-image/CHANGELOG.md +37 -0
  35. package/.claude/skills/banana-image/README.md +146 -0
  36. package/.claude/skills/banana-image/SKILL.md +164 -0
  37. package/.claude/skills/banana-image/assets/logo.png +0 -0
  38. package/.claude/skills/banana-image/references/advanced-usage.md +189 -0
  39. package/.claude/skills/banana-image/scripts/apply_template.py +125 -0
  40. package/.claude/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  41. package/.claude/skills/banana-image/scripts/batch_prep.py +82 -0
  42. package/.claude/skills/banana-image/scripts/package-lock.json +1437 -0
  43. package/.claude/skills/banana-image/scripts/package.json +18 -0
  44. package/.claude/skills/banana-image/scripts/requirements.txt +10 -0
  45. package/.claude/skills/banana-image/templates/poster.json +22 -0
  46. package/.claude/skills/banana-image/templates/product.json +17 -0
  47. package/.claude/skills/banana-image/templates/social.json +22 -0
  48. package/.claude/skills/banana-image/templates/thumbnail.json +17 -0
  49. package/.claude/skills/brainstorm/SKILL.md +648 -0
  50. package/.claude/skills/bug-detective/SKILL.md +1206 -0
  51. package/.claude/skills/code-patterns/SKILL.md +590 -0
  52. package/.claude/skills/collaborating-with-codex/SKILL.md +174 -0
  53. package/.claude/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  54. package/.claude/skills/collaborating-with-gemini/SKILL.md +194 -0
  55. package/.claude/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  56. package/.claude/skills/crud-development/SKILL.md +649 -0
  57. package/.claude/skills/data-permission/SKILL.md +599 -0
  58. package/.claude/skills/database-ops/SKILL.md +407 -0
  59. package/.claude/skills/error-handler/SKILL.md +371 -0
  60. package/.claude/skills/file-oss-management/SKILL.md +863 -0
  61. package/.claude/skills/git-workflow/SKILL.md +375 -0
  62. package/.claude/skills/json-serialization/SKILL.md +357 -0
  63. package/.claude/skills/leniu-api-development/SKILL.md +803 -0
  64. package/.claude/skills/leniu-architecture-design/SKILL.md +598 -0
  65. package/.claude/skills/leniu-backend-annotations/SKILL.md +664 -0
  66. package/.claude/skills/leniu-code-patterns/SKILL.md +365 -0
  67. package/.claude/skills/leniu-crud-development/SKILL.md +1110 -0
  68. package/.claude/skills/leniu-data-permission/SKILL.md +256 -0
  69. package/.claude/skills/leniu-database-ops/SKILL.md +426 -0
  70. package/.claude/skills/leniu-error-handler/SKILL.md +462 -0
  71. package/.claude/skills/leniu-java-amount-handling/SKILL.md +461 -0
  72. package/.claude/skills/leniu-java-code-style/SKILL.md +510 -0
  73. package/.claude/skills/leniu-java-concurrent/SKILL.md +400 -0
  74. package/.claude/skills/leniu-java-entity/SKILL.md +751 -0
  75. package/.claude/skills/leniu-java-export/SKILL.md +560 -0
  76. package/.claude/skills/leniu-java-logging/SKILL.md +832 -0
  77. package/.claude/skills/leniu-java-mq/SKILL.md +338 -0
  78. package/.claude/skills/leniu-java-mybatis/SKILL.md +640 -0
  79. package/.claude/skills/leniu-java-report-query-param/SKILL.md +291 -0
  80. package/.claude/skills/leniu-java-task/SKILL.md +367 -0
  81. package/.claude/skills/leniu-java-total-line/SKILL.md +195 -0
  82. package/.claude/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  83. package/.claude/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  84. package/.claude/skills/leniu-mealtime/SKILL.md +215 -0
  85. package/.claude/skills/leniu-redis-cache/SKILL.md +316 -0
  86. package/.claude/skills/leniu-security-guard/SKILL.md +520 -0
  87. package/.claude/skills/leniu-utils-toolkit/SKILL.md +380 -0
  88. package/.claude/skills/openspec-apply-change/SKILL.md +156 -0
  89. package/.claude/skills/openspec-archive-change/SKILL.md +114 -0
  90. package/.claude/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  91. package/.claude/skills/openspec-continue-change/SKILL.md +118 -0
  92. package/.claude/skills/openspec-explore/SKILL.md +290 -0
  93. package/.claude/skills/openspec-ff-change/SKILL.md +101 -0
  94. package/.claude/skills/openspec-new-change/SKILL.md +74 -0
  95. package/.claude/skills/openspec-onboard/SKILL.md +529 -0
  96. package/.claude/skills/openspec-sync-specs/SKILL.md +138 -0
  97. package/.claude/skills/openspec-verify-change/SKILL.md +168 -0
  98. package/.claude/skills/performance-doctor/SKILL.md +627 -0
  99. package/.claude/skills/project-navigator/SKILL.md +305 -0
  100. package/.claude/skills/redis-cache/SKILL.md +839 -0
  101. package/.claude/skills/scheduled-jobs/SKILL.md +633 -0
  102. package/.claude/skills/security-guard/SKILL.md +748 -0
  103. package/.claude/skills/sms-mail/SKILL.md +766 -0
  104. package/.claude/skills/social-login/SKILL.md +668 -0
  105. package/.claude/skills/store-pc/SKILL.md +366 -0
  106. package/.claude/skills/task-tracker/SKILL.md +307 -0
  107. package/.claude/skills/tech-decision/SKILL.md +393 -0
  108. package/.claude/skills/tenant-management/SKILL.md +603 -0
  109. package/.claude/skills/test-development/SKILL.md +755 -0
  110. package/.claude/skills/ui-pc/SKILL.md +438 -0
  111. package/.claude/skills/utils-toolkit/SKILL.md +615 -0
  112. package/.claude/skills/websocket-sse/SKILL.md +716 -0
  113. package/.claude/skills/workflow-engine/SKILL.md +676 -0
  114. package/.claude/templates//345/276/205/345/212/236/346/270/205/345/215/225/346/250/241/346/235/277.md +56 -0
  115. package/.claude/templates//351/234/200/346/261/202/346/226/207/346/241/243/346/250/241/346/235/277.md +85 -0
  116. package/.claude/templates//351/241/271/347/233/256/347/212/266/346/200/201/346/250/241/346/235/277.md +43 -0
  117. package/.codex/skills/add-skill/SKILL.md +352 -0
  118. package/.codex/skills/add-todo/SKILL.md +269 -0
  119. package/.codex/skills/api-development/SKILL.md +693 -0
  120. package/.codex/skills/architecture-design/SKILL.md +628 -0
  121. package/.codex/skills/backend-annotations/SKILL.md +664 -0
  122. package/.codex/skills/banana-image/CHANGELOG.md +37 -0
  123. package/.codex/skills/banana-image/README.md +146 -0
  124. package/.codex/skills/banana-image/SKILL.md +164 -0
  125. package/.codex/skills/banana-image/assets/logo.png +0 -0
  126. package/.codex/skills/banana-image/references/advanced-usage.md +189 -0
  127. package/.codex/skills/banana-image/scripts/apply_template.py +125 -0
  128. package/.codex/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  129. package/.codex/skills/banana-image/scripts/batch_prep.py +82 -0
  130. package/.codex/skills/banana-image/scripts/package-lock.json +1437 -0
  131. package/.codex/skills/banana-image/scripts/package.json +18 -0
  132. package/.codex/skills/banana-image/scripts/requirements.txt +10 -0
  133. package/.codex/skills/banana-image/templates/poster.json +22 -0
  134. package/.codex/skills/banana-image/templates/product.json +17 -0
  135. package/.codex/skills/banana-image/templates/social.json +22 -0
  136. package/.codex/skills/banana-image/templates/thumbnail.json +17 -0
  137. package/.codex/skills/brainstorm/SKILL.md +648 -0
  138. package/.codex/skills/bug-detective/SKILL.md +1206 -0
  139. package/.codex/skills/check/SKILL.md +367 -0
  140. package/.codex/skills/code-patterns/SKILL.md +442 -0
  141. package/.codex/skills/collaborating-with-codex/SKILL.md +174 -0
  142. package/.codex/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  143. package/.codex/skills/collaborating-with-gemini/SKILL.md +194 -0
  144. package/.codex/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  145. package/.codex/skills/crud/SKILL.md +265 -0
  146. package/.codex/skills/crud-development/SKILL.md +637 -0
  147. package/.codex/skills/data-permission/SKILL.md +591 -0
  148. package/.codex/skills/database-ops/SKILL.md +553 -0
  149. package/.codex/skills/dev/SKILL.md +187 -0
  150. package/.codex/skills/error-handler/SKILL.md +361 -0
  151. package/.codex/skills/file-oss-management/SKILL.md +863 -0
  152. package/.codex/skills/git-workflow/SKILL.md +375 -0
  153. package/.codex/skills/init-docs/SKILL.md +194 -0
  154. package/.codex/skills/json-serialization/SKILL.md +357 -0
  155. package/.codex/skills/leniu-api-development/SKILL.md +803 -0
  156. package/.codex/skills/leniu-architecture-design/SKILL.md +594 -0
  157. package/.codex/skills/leniu-backend-annotations/SKILL.md +662 -0
  158. package/.codex/skills/leniu-code-patterns/SKILL.md +365 -0
  159. package/.codex/skills/leniu-crud-development/SKILL.md +1110 -0
  160. package/.codex/skills/leniu-data-permission/SKILL.md +256 -0
  161. package/.codex/skills/leniu-database-ops/SKILL.md +426 -0
  162. package/.codex/skills/leniu-error-handler/SKILL.md +462 -0
  163. package/.codex/skills/leniu-java-amount-handling/SKILL.md +461 -0
  164. package/.codex/skills/leniu-java-code-style/SKILL.md +510 -0
  165. package/.codex/skills/leniu-java-concurrent/SKILL.md +400 -0
  166. package/.codex/skills/leniu-java-entity/SKILL.md +751 -0
  167. package/.codex/skills/leniu-java-export/SKILL.md +560 -0
  168. package/.codex/skills/leniu-java-logging/SKILL.md +832 -0
  169. package/.codex/skills/leniu-java-mq/SKILL.md +338 -0
  170. package/.codex/skills/leniu-java-mybatis/SKILL.md +640 -0
  171. package/.codex/skills/leniu-java-report-query-param/SKILL.md +291 -0
  172. package/.codex/skills/leniu-java-task/SKILL.md +367 -0
  173. package/.codex/skills/leniu-java-total-line/SKILL.md +195 -0
  174. package/.codex/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  175. package/.codex/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  176. package/.codex/skills/leniu-mealtime/SKILL.md +215 -0
  177. package/.codex/skills/leniu-redis-cache/SKILL.md +316 -0
  178. package/.codex/skills/leniu-security-guard/SKILL.md +520 -0
  179. package/.codex/skills/leniu-utils-toolkit/SKILL.md +378 -0
  180. package/.codex/skills/next/SKILL.md +137 -0
  181. package/.codex/skills/openspec-apply-change/SKILL.md +156 -0
  182. package/.codex/skills/openspec-archive-change/SKILL.md +114 -0
  183. package/.codex/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  184. package/.codex/skills/openspec-continue-change/SKILL.md +118 -0
  185. package/.codex/skills/openspec-explore/SKILL.md +290 -0
  186. package/.codex/skills/openspec-ff-change/SKILL.md +101 -0
  187. package/.codex/skills/openspec-new-change/SKILL.md +74 -0
  188. package/.codex/skills/openspec-onboard/SKILL.md +529 -0
  189. package/.codex/skills/openspec-sync-specs/SKILL.md +138 -0
  190. package/.codex/skills/openspec-verify-change/SKILL.md +168 -0
  191. package/.codex/skills/performance-doctor/SKILL.md +627 -0
  192. package/.codex/skills/progress/SKILL.md +193 -0
  193. package/.codex/skills/project-navigator/SKILL.md +286 -0
  194. package/.codex/skills/redis-cache/SKILL.md +829 -0
  195. package/.codex/skills/scheduled-jobs/SKILL.md +633 -0
  196. package/.codex/skills/security-guard/SKILL.md +739 -0
  197. package/.codex/skills/sms-mail/SKILL.md +766 -0
  198. package/.codex/skills/social-login/SKILL.md +668 -0
  199. package/.codex/skills/start/SKILL.md +154 -0
  200. package/.codex/skills/store-pc/SKILL.md +491 -0
  201. package/.codex/skills/sync/SKILL.md +149 -0
  202. package/.codex/skills/task-tracker/SKILL.md +307 -0
  203. package/.codex/skills/tech-decision/SKILL.md +393 -0
  204. package/.codex/skills/tenant-management/SKILL.md +603 -0
  205. package/.codex/skills/test-development/SKILL.md +755 -0
  206. package/.codex/skills/ui-pc/SKILL.md +475 -0
  207. package/.codex/skills/update-status/SKILL.md +159 -0
  208. package/.codex/skills/utils-toolkit/SKILL.md +593 -0
  209. package/.codex/skills/websocket-sse/SKILL.md +716 -0
  210. package/.codex/skills/workflow-engine/SKILL.md +676 -0
  211. package/.cursor/agents/code-reviewer.md +139 -0
  212. package/.cursor/agents/project-manager.md +159 -0
  213. package/.cursor/commands/opsx-apply.md +152 -0
  214. package/.cursor/commands/opsx-archive.md +157 -0
  215. package/.cursor/commands/opsx-bulk-archive.md +242 -0
  216. package/.cursor/commands/opsx-continue.md +114 -0
  217. package/.cursor/commands/opsx-explore.md +174 -0
  218. package/.cursor/commands/opsx-ff.md +94 -0
  219. package/.cursor/commands/opsx-new.md +69 -0
  220. package/.cursor/commands/opsx-onboard.md +525 -0
  221. package/.cursor/commands/opsx-sync.md +134 -0
  222. package/.cursor/commands/opsx-verify.md +164 -0
  223. package/.cursor/mcp.json +22 -0
  224. package/.cursor/skills/add-skill/SKILL.md +352 -0
  225. package/.cursor/skills/api-development/SKILL.md +560 -0
  226. package/.cursor/skills/architecture-design/SKILL.md +756 -0
  227. package/.cursor/skills/backend-annotations/SKILL.md +674 -0
  228. package/.cursor/skills/banana-image/CHANGELOG.md +37 -0
  229. package/.cursor/skills/banana-image/README.md +146 -0
  230. package/.cursor/skills/banana-image/SKILL.md +164 -0
  231. package/.cursor/skills/banana-image/assets/logo.png +0 -0
  232. package/.cursor/skills/banana-image/references/advanced-usage.md +189 -0
  233. package/.cursor/skills/banana-image/scripts/apply_template.py +125 -0
  234. package/.cursor/skills/banana-image/scripts/banana_image_exec.ts +412 -0
  235. package/.cursor/skills/banana-image/scripts/batch_prep.py +82 -0
  236. package/.cursor/skills/banana-image/scripts/package-lock.json +1437 -0
  237. package/.cursor/skills/banana-image/scripts/package.json +18 -0
  238. package/.cursor/skills/banana-image/scripts/requirements.txt +10 -0
  239. package/.cursor/skills/banana-image/templates/poster.json +22 -0
  240. package/.cursor/skills/banana-image/templates/product.json +17 -0
  241. package/.cursor/skills/banana-image/templates/social.json +22 -0
  242. package/.cursor/skills/banana-image/templates/thumbnail.json +17 -0
  243. package/.cursor/skills/brainstorm/SKILL.md +648 -0
  244. package/.cursor/skills/bug-detective/SKILL.md +1206 -0
  245. package/.cursor/skills/code-patterns/SKILL.md +590 -0
  246. package/.cursor/skills/collaborating-with-codex/SKILL.md +174 -0
  247. package/.cursor/skills/collaborating-with-codex/scripts/codex_bridge.py +275 -0
  248. package/.cursor/skills/collaborating-with-gemini/SKILL.md +194 -0
  249. package/.cursor/skills/collaborating-with-gemini/scripts/gemini_bridge.py +275 -0
  250. package/.cursor/skills/crud-development/SKILL.md +649 -0
  251. package/.cursor/skills/data-permission/SKILL.md +599 -0
  252. package/.cursor/skills/database-ops/SKILL.md +407 -0
  253. package/.cursor/skills/error-handler/SKILL.md +371 -0
  254. package/.cursor/skills/file-oss-management/SKILL.md +863 -0
  255. package/.cursor/skills/git-workflow/SKILL.md +375 -0
  256. package/.cursor/skills/json-serialization/SKILL.md +357 -0
  257. package/.cursor/skills/leniu-api-development/SKILL.md +803 -0
  258. package/.cursor/skills/leniu-architecture-design/SKILL.md +598 -0
  259. package/.cursor/skills/leniu-backend-annotations/SKILL.md +664 -0
  260. package/.cursor/skills/leniu-code-patterns/SKILL.md +365 -0
  261. package/.cursor/skills/leniu-crud-development/SKILL.md +1110 -0
  262. package/.cursor/skills/leniu-data-permission/SKILL.md +256 -0
  263. package/.cursor/skills/leniu-database-ops/SKILL.md +426 -0
  264. package/.cursor/skills/leniu-error-handler/SKILL.md +462 -0
  265. package/.cursor/skills/leniu-java-amount-handling/SKILL.md +461 -0
  266. package/.cursor/skills/leniu-java-code-style/SKILL.md +510 -0
  267. package/.cursor/skills/leniu-java-concurrent/SKILL.md +400 -0
  268. package/.cursor/skills/leniu-java-entity/SKILL.md +751 -0
  269. package/.cursor/skills/leniu-java-export/SKILL.md +560 -0
  270. package/.cursor/skills/leniu-java-logging/SKILL.md +832 -0
  271. package/.cursor/skills/leniu-java-mq/SKILL.md +338 -0
  272. package/.cursor/skills/leniu-java-mybatis/SKILL.md +640 -0
  273. package/.cursor/skills/leniu-java-report-query-param/SKILL.md +291 -0
  274. package/.cursor/skills/leniu-java-task/SKILL.md +367 -0
  275. package/.cursor/skills/leniu-java-total-line/SKILL.md +195 -0
  276. package/.cursor/skills/leniu-marketing-price-rule-customizer/SKILL.md +301 -0
  277. package/.cursor/skills/leniu-marketing-recharge-rule-customizer/SKILL.md +285 -0
  278. package/.cursor/skills/leniu-mealtime/SKILL.md +215 -0
  279. package/.cursor/skills/leniu-redis-cache/SKILL.md +316 -0
  280. package/.cursor/skills/leniu-security-guard/SKILL.md +520 -0
  281. package/.cursor/skills/leniu-utils-toolkit/SKILL.md +380 -0
  282. package/.cursor/skills/openspec-apply-change/SKILL.md +156 -0
  283. package/.cursor/skills/openspec-archive-change/SKILL.md +114 -0
  284. package/.cursor/skills/openspec-bulk-archive-change/SKILL.md +246 -0
  285. package/.cursor/skills/openspec-continue-change/SKILL.md +118 -0
  286. package/.cursor/skills/openspec-explore/SKILL.md +290 -0
  287. package/.cursor/skills/openspec-ff-change/SKILL.md +101 -0
  288. package/.cursor/skills/openspec-new-change/SKILL.md +74 -0
  289. package/.cursor/skills/openspec-onboard/SKILL.md +529 -0
  290. package/.cursor/skills/openspec-sync-specs/SKILL.md +138 -0
  291. package/.cursor/skills/openspec-verify-change/SKILL.md +168 -0
  292. package/.cursor/skills/performance-doctor/SKILL.md +627 -0
  293. package/.cursor/skills/project-navigator/SKILL.md +305 -0
  294. package/.cursor/skills/redis-cache/SKILL.md +839 -0
  295. package/.cursor/skills/scheduled-jobs/SKILL.md +633 -0
  296. package/.cursor/skills/security-guard/SKILL.md +748 -0
  297. package/.cursor/skills/sms-mail/SKILL.md +766 -0
  298. package/.cursor/skills/social-login/SKILL.md +668 -0
  299. package/.cursor/skills/store-pc/SKILL.md +366 -0
  300. package/.cursor/skills/task-tracker/SKILL.md +307 -0
  301. package/.cursor/skills/tech-decision/SKILL.md +393 -0
  302. package/.cursor/skills/tenant-management/SKILL.md +603 -0
  303. package/.cursor/skills/test-development/SKILL.md +755 -0
  304. package/.cursor/skills/ui-pc/SKILL.md +438 -0
  305. package/.cursor/skills/utils-toolkit/SKILL.md +615 -0
  306. package/.cursor/skills/websocket-sse/SKILL.md +716 -0
  307. package/.cursor/skills/workflow-engine/SKILL.md +676 -0
  308. package/AGENTS.md +669 -0
  309. package/CLAUDE.md +205 -0
  310. package/README.md +205 -0
  311. package/bin/index.js +179 -0
  312. package/init.sh +178 -0
  313. package/package.json +27 -0
@@ -0,0 +1,598 @@
1
+ ---
2
+ name: leniu-architecture-design
3
+ description: |
4
+ leniu-yunshitang-core 项目架构设计指南。基于 pigx-framework 框架的云食堂双库架构,包含三层架构规范、双库多租户实现、业务模块划分、Entity 设计规范。
5
+
6
+ 触发场景:
7
+ - 云食堂项目系统整体架构设计
8
+ - 双库架构(系统库+商户库)的业务模块规划
9
+ - 三层架构代码分层与重构策略
10
+ - 多租户数据隔离设计
11
+ - Entity 审计字段与逻辑删除设计
12
+
13
+ 适用项目:
14
+ - leniu-tengyun-core:/Users/xujiajun/Developer/gongsi_proj/leniu-api/leniu-tengyun-core
15
+ - leniu-yunshitang:/Users/xujiajun/Developer/gongsi_proj/leniu-api/leniu-tengyun/leniu-yunshitang
16
+
17
+ 触发词:leniu架构、云食堂架构、双库架构、商户库、系统库、net.xnzn、pigx框架、leniu-yunshitang、leniu-tengyun-core
18
+ ---
19
+
20
+ # leniu-yunshitang-core 架构设计指南
21
+
22
+ ## 项目概述
23
+
24
+ leniu-yunshitang-core 是基于 **pigx-framework** 的智慧食堂云服务平台,采用**双库架构**(系统库 + 商户库)实现多租户隔离。
25
+
26
+ **核心特点:**
27
+ - JDK 21 + Spring Boot 3.x
28
+ - 双库架构:系统库(全局数据)+ 商户库(租户数据)
29
+ - 包名:`net.xnzn.*`
30
+ - 租户识别:请求头 `MERCHANT-ID`
31
+ - 审计字段:`crby/crtime/upby/uptime`
32
+ - 逻辑删除:`del_flag`(1=删除,2=正常,注意与 RuoYi 相反)
33
+
34
+ ---
35
+
36
+ ## 双库架构设计
37
+
38
+ ### 架构说明
39
+
40
+ 本项目采用**物理分离的双库架构**,而非单库多租户:
41
+
42
+ | 库类型 | 说明 | 数据范围 | 访问方式 |
43
+ |--------|------|---------|---------|
44
+ | **系统库** | 全局系统数据 | 租户信息、商户配置、系统字典等 | 默认访问(无 MERCHANT-ID) |
45
+ | **商户库** | 租户业务数据 | 订单、菜品、用户、设备等商户数据 | 请求头携带 MERCHANT-ID 时访问 |
46
+
47
+ **关键区别:**
48
+ - Entity 不需要 `tenant_id` 字段(物理库隔离)
49
+ - 通过 `TenantContextHolder.getTenantId()` 获取当前租户
50
+ - 使用 `Executors.doInTenant()` / `doInSystem()` 切换库
51
+
52
+ ### 双库配置示例
53
+
54
+ ```yaml
55
+ # bootstrap.yml
56
+ dataset:
57
+ system:
58
+ master:
59
+ jdbcUrl: jdbc:mysql://${MYSQL_HOST:mysql}:${MYSQL_PORT:3306}/system
60
+ username: ${MYSQL_USERNAME:root}
61
+ password: ${MYSQL_PASSWORD:do@u.can}
62
+
63
+ tenant:
64
+ carrier-name: MERCHANT-ID
65
+ ```
66
+
67
+ ### 多租户上下文
68
+
69
+ ```java
70
+ // 获取当前租户ID
71
+ Long tenantId = TenantContextHolder.getTenantId();
72
+
73
+ // 在指定租户库执行操作
74
+ Executors.doInTenant(tenantId, () -> {
75
+ // 业务代码 - 访问商户库
76
+ });
77
+
78
+ // 在系统库执行操作
79
+ Executors.doInSystem(() -> {
80
+ // 业务代码 - 访问系统库
81
+ });
82
+
83
+ // 遍历所有租户执行
84
+ Executors.doInAllTenant(tenantId -> {
85
+ // 业务代码
86
+ });
87
+ ```
88
+
89
+ ---
90
+
91
+ ## 本项目技术栈
92
+
93
+ ### 核心技术栈
94
+
95
+ | 层级 | 技术栈 | 版本 | 说明 |
96
+ |------|--------|------|------|
97
+ | **后端框架** | Spring Boot | 3.x | 核心框架 |
98
+ | **开发语言** | Java | 21 | LTS 版本 |
99
+ | **ORM** | MyBatis-Plus | 3.x | 持久层框架 |
100
+ | **基础框架** | pigx-framework | 3.4.7 | 企业级开发框架 |
101
+ | **数据库** | MySQL | 8.0+ | 双库架构 |
102
+ | **缓存** | Redis + Redisson | - | 分布式缓存 |
103
+ | **容器** | Undertow | - | Web 容器(替换 Tomcat) |
104
+
105
+ ### 项目模块结构
106
+
107
+ ```
108
+ leniu-tengyun-core/
109
+ ├── core-base/ # 公共基础模块
110
+ ├── core-aggregator/ # 聚合器
111
+ ├── sys-common/ # 公共业务模块(支付、通知、对接等)
112
+ ├── sys-canteen/ # 食堂业务模块
113
+ ├── sys-kitchen/ # 后场厨房模块
114
+ ├── sys-drp/ # 供应链模块
115
+ ├── sys-logistics/ # 物流模块
116
+ └── sys-open/ # 开放接口模块
117
+ ```
118
+
119
+ ---
120
+
121
+ ## 三层架构规范
122
+
123
+ 本项目采用 **三层架构**:Controller → Service → Mapper
124
+
125
+ **没有独立的 DAO 层!**
126
+
127
+ ```
128
+ ┌──────────────────────────────────────────────────────────────┐
129
+ │ Controller 层 │
130
+ │ • 接收 HTTP 请求、参数校验、返回 Page<T> │
131
+ │ • 使用 LeRequest<T> 封装请求体 │
132
+ │ • 使用 @RequiresAuthentication 权限控制 │
133
+ └──────────────────────────────┬───────────────────────────────┘
134
+
135
+
136
+ ┌──────────────────────────────────────────────────────────────┐
137
+ │ Service 层 │
138
+ │ • 业务逻辑处理、事务管理、编排协调 │
139
+ │ • 直接注入 Mapper(无 DAO 层) │
140
+ │ • 使用 MyBatis-Plus LambdaQueryWrapper │
141
+ └──────────────────────────────┬───────────────────────────────┘
142
+
143
+
144
+ ┌──────────────────────────────────────────────────────────────┐
145
+ │ Mapper 层 │
146
+ │ • extends BaseMapper<Entity> │
147
+ │ • MyBatis-Plus ORM 映射、SQL 执行 │
148
+ └──────────────────────────────────────────────────────────────┘
149
+ ```
150
+
151
+ ### Controller 示例
152
+
153
+ ```java
154
+ package net.xnzn.core.xxx.controller;
155
+
156
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
157
+ import com.pig4cloud.pigx.common.core.util.LeRequest;
158
+ import com.pig4cloud.pigx.common.core.exception.LeException;
159
+ import net.xnzn.framework.secure.filter.annotation.RequiresAuthentication;
160
+ import org.springframework.web.bind.annotation.*;
161
+
162
+ @RestController
163
+ @RequiresAuthentication
164
+ @RequestMapping("/xxx/resource")
165
+ public class XxxResourceController {
166
+
167
+ @Autowired
168
+ private XxxServiceImpl xxxService;
169
+
170
+ @PostMapping("/add")
171
+ public void add(@Validated @RequestBody LeRequest<XxxDTO> request) {
172
+ xxxService.add(request.getContent());
173
+ }
174
+
175
+ @PostMapping("/query")
176
+ public Page<XxxVO> query(@Validated @RequestBody LeRequest<PageDTO> request) {
177
+ return xxxService.query(request.getContent());
178
+ }
179
+ }
180
+ ```
181
+
182
+ ### Service 示例
183
+
184
+ ```java
185
+ package net.xnzn.core.xxx.service.impl;
186
+
187
+ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
188
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
189
+ import net.xnzn.core.common.enums.DelFlagEnum;
190
+ import net.xnzn.framework.id.Id;
191
+ import org.springframework.stereotype.Service;
192
+
193
+ @Service
194
+ public class XxxServiceImpl {
195
+ @Autowired
196
+ private XxxMapper xxxMapper;
197
+
198
+ public void add(XxxDTO dto) {
199
+ long id = Id.next();
200
+ XxxEntity entity = dto.toEntity(id);
201
+ xxxMapper.insert(entity);
202
+ }
203
+
204
+ public Page<XxxVO> query(PageDTO dto) {
205
+ return xxxMapper.page(dto.getMpPage(), dto.getKeyword());
206
+ }
207
+ }
208
+ ```
209
+
210
+ ### Mapper 示例
211
+
212
+ ```java
213
+ package net.xnzn.core.xxx.mapper;
214
+
215
+ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
216
+ import net.xnzn.core.xxx.model.XxxEntity;
217
+ import org.apache.ibatis.annotations.Mapper;
218
+
219
+ @Mapper
220
+ public interface XxxMapper extends BaseMapper<XxxEntity> {
221
+ // 自定义查询方法
222
+ }
223
+ ```
224
+
225
+ ### ⚠️ Mapper XML 文件位置(重要差异)
226
+
227
+ **leniu-yunshitang-core 的 XML 文件与 Java Mapper 放在同一目录**,而非传统的 `resources/mapper/` 目录!
228
+
229
+ ```
230
+ src/main/java/net/xnzn/core/xxx/mapper/
231
+ ├── XxxMapper.java # Java 接口
232
+ └── XxxMapper.xml # XML 映射文件(同目录!)
233
+ ```
234
+
235
+ **对比 RuoYi-Vue-Plus:**
236
+ ```
237
+ # RuoYi-Vue-Plus 传统方式
238
+ src/main/java/.../mapper/XxxMapper.java
239
+ src/main/resources/mapper/XxxMapper.xml # XML 在 resources 目录
240
+ ```
241
+
242
+ **配置要求:**
243
+ 需要在 `pom.xml` 中配置资源过滤,让 Maven 将 Java 目录下的 XML 文件也打包:
244
+
245
+ ```xml
246
+ <build>
247
+ <resources>
248
+ <resource>
249
+ <directory>src/main/java</directory>
250
+ <includes>
251
+ <include>**/*.xml</include>
252
+ </includes>
253
+ </resource>
254
+ <resource>
255
+ <directory>src/main/resources</directory>
256
+ </resource>
257
+ </resources>
258
+ </build>
259
+ ```
260
+
261
+ **XML 文件示例:**
262
+ ```xml
263
+ <!-- XxxMapper.xml -->
264
+ <?xml version="1.0" encoding="UTF-8"?>
265
+ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
266
+ <mapper namespace="net.xnzn.core.xxx.mapper.XxxMapper">
267
+
268
+ <select id="page" resultType="net.xnzn.core.xxx.vo.XxxVO">
269
+ SELECT * FROM xxx_table
270
+ WHERE del_flag = 2
271
+ <if test="keyword != null and keyword != ''">
272
+ AND name LIKE CONCAT('%', #{keyword}, '%')
273
+ </if>
274
+ </select>
275
+
276
+ </mapper>
277
+ ```
278
+
279
+ ---
280
+
281
+ ## Entity 设计规范
282
+
283
+ ### Entity 审计字段
284
+
285
+ ```java
286
+ package net.xnzn.core.xxx.model;
287
+
288
+ import com.baomidou.mybatisplus.annotation.*;
289
+ import lombok.Data;
290
+ import java.time.LocalDateTime;
291
+
292
+ @Data
293
+ @TableName("xxx_table")
294
+ public class XxxEntity {
295
+
296
+ // 主键(雪花ID或自增)
297
+ @TableId(value = "id", type = IdType.AUTO)
298
+ private Long id;
299
+
300
+ // 业务字段
301
+ private String name;
302
+ private Integer status;
303
+
304
+ // 审计字段
305
+ @TableField(fill = FieldFill.INSERT)
306
+ private String crby; // 创建人
307
+
308
+ @TableField(fill = FieldFill.INSERT)
309
+ private LocalDateTime crtime; // 创建时间
310
+
311
+ @TableField(fill = FieldFill.INSERT_UPDATE)
312
+ private String upby; // 更新人
313
+
314
+ @TableField(fill = FieldFill.INSERT_UPDATE)
315
+ private LocalDateTime uptime; // 更新时间
316
+
317
+ // 逻辑删除(注意:1=删除,2=正常,与 RuoYi 相反)
318
+ private Integer delFlag;
319
+ }
320
+ ```
321
+
322
+ ### 审计字段说明
323
+
324
+ | 字段 | 含义 | 自动填充 |
325
+ |------|------|---------|
326
+ | `crby` | 创建人 | INSERT |
327
+ | `crtime` | 创建时间 | INSERT |
328
+ | `upby` | 更新人 | INSERT_UPDATE |
329
+ | `uptime` | 更新时间 | INSERT_UPDATE |
330
+ | `delFlag` | 逻辑删除(1=删除,2=正常) | 手动设置 |
331
+
332
+ **注意:**
333
+ - `del_flag` 值与 RuoYi-Vue-Plus 相反!
334
+ - leniu:1=删除,2=正常
335
+ - RuoYi:0=正常,1=删除
336
+
337
+ ### DelFlagEnum 示例
338
+
339
+ ```java
340
+ public enum DelFlagEnum {
341
+ DEL_TRUE(1, "删除"),
342
+ DEL_FALSE(2, "正常");
343
+
344
+ private final Integer key;
345
+ private final String val;
346
+ }
347
+ ```
348
+
349
+ ---
350
+
351
+ ## 请求响应封装
352
+
353
+ ### LeRequest 请求封装
354
+
355
+ ```java
356
+ @Data
357
+ public class LeRequest<T> {
358
+ @NotNull(message = "请求内容不能为空")
359
+ private T content; // 实际请求数据
360
+ }
361
+
362
+ // 使用方式
363
+ @PostMapping("/add")
364
+ public void add(@RequestBody LeRequest<XxxDTO> request) {
365
+ XxxDTO dto = request.getContent(); // 获取实际数据
366
+ }
367
+ ```
368
+
369
+ ### PageDTO 分页参数
370
+
371
+ ```java
372
+ @Data
373
+ public class PageDTO {
374
+ @NotNull
375
+ @Min(1)
376
+ private Integer pageNum; // 当前页
377
+
378
+ @NotNull
379
+ @Min(1)
380
+ private Integer pageSize; // 每页条数
381
+
382
+ private String keyword; // 搜索关键词
383
+
384
+ // 转换为 MyBatis-Plus Page
385
+ public Page<Object> getMpPage() {
386
+ return new Page<>(pageNum, pageSize);
387
+ }
388
+ }
389
+ ```
390
+
391
+ ### 分页响应
392
+
393
+ ```java
394
+ // 直接返回 MyBatis-Plus Page
395
+ public Page<XxxVO> query(PageDTO dto) {
396
+ return xxxMapper.page(dto.getMpPage(), dto.getKeyword());
397
+ }
398
+ ```
399
+
400
+ ---
401
+
402
+ ## 异常处理
403
+
404
+ ### LeException 业务异常
405
+
406
+ ```java
407
+ import com.pig4cloud.pigx.common.core.exception.LeException;
408
+
409
+ // 抛出业务异常
410
+ throw new LeException("业务错误信息");
411
+
412
+ // 带国际化消息
413
+ import net.xnzn.framework.config.i18n.I18n;
414
+ throw new LeException(I18n.getMessage("error.key"));
415
+ ```
416
+
417
+ ---
418
+
419
+ ## 国际化
420
+
421
+ ### 消息文件配置
422
+
423
+ ```yaml
424
+ # bootstrap.yml
425
+ spring:
426
+ messages:
427
+ basename: "message_canteen_ext,message_common_ext,..."
428
+ ```
429
+
430
+ ### 使用方式
431
+
432
+ ```java
433
+ import net.xnzn.framework.config.i18n.I18n;
434
+
435
+ // 获取国际化消息
436
+ String message = I18n.getMessage("key");
437
+ throw new LeException(I18n.getMessage("error.key"));
438
+ ```
439
+
440
+ ---
441
+
442
+ ## 权限控制
443
+
444
+ ### @RequiresAuthentication 注解
445
+
446
+ ```java
447
+ import net.xnzn.framework.secure.filter.annotation.RequiresAuthentication;
448
+
449
+ @RestController
450
+ @RequiresAuthentication // 需要认证
451
+ @RequestMapping("/xxx")
452
+ public class XxxController {
453
+ }
454
+ ```
455
+
456
+ ---
457
+
458
+ ## 双库路由最佳实践
459
+
460
+ ### 场景1:商户业务(默认)
461
+
462
+ ```java
463
+ @PostMapping("/order/add")
464
+ public void addOrder(@RequestBody LeRequest<OrderDTO> request) {
465
+ // 前端请求头携带 MERCHANT-ID
466
+ // 自动路由到商户库,无需额外处理
467
+ orderService.add(request.getContent());
468
+ }
469
+ ```
470
+
471
+ ### 场景2:系统配置操作
472
+
473
+ ```java
474
+ @PostMapping("/merchant/config")
475
+ public void updateMerchantConfig(@RequestBody LeRequest<ConfigDTO> request) {
476
+ // 强制在系统库执行
477
+ Executors.doInSystem(() -> {
478
+ configService.update(request.getContent());
479
+ });
480
+ }
481
+ ```
482
+
483
+ ### 场景3:跨租户操作(定时任务)
484
+
485
+ ```java
486
+ @Component
487
+ public class DailyDataTask {
488
+
489
+ public void execute() {
490
+ // 遍历所有租户执行
491
+ Executors.doInAllTenant(tenantId -> {
492
+ dailyReportService.generateReport(tenantId);
493
+ });
494
+ }
495
+ }
496
+ ```
497
+
498
+ ### 场景4:消息消费指定租户
499
+
500
+ ```java
501
+ @RabbitListener(queues = "order.queue")
502
+ public void consumeOrder(Message message) {
503
+ Long tenantId = getTenantFromMessage(message);
504
+ // 在指定租户库执行
505
+ Executors.doInTenant(tenantId, () -> {
506
+ orderService.process(message);
507
+ });
508
+ }
509
+ ```
510
+
511
+ ---
512
+
513
+ ## 常见设计规范
514
+
515
+ ### 模块包结构
516
+
517
+ ```
518
+ net.xnzn.core.xxx/
519
+ ├── controller/ # 控制器
520
+ ├── service/
521
+ │ └── impl/ # 服务实现(不要求接口)
522
+ ├── mapper/ # MyBatis Mapper
523
+ ├── model/ # 实体类
524
+ ├── dto/ # 数据传输对象
525
+ ├── vo/ # 视图对象
526
+ └── util/ # 工具类
527
+ ```
528
+
529
+ ### 命名规范
530
+
531
+ | 类型 | 命名规则 | 示例 |
532
+ |------|---------|------|
533
+ | Controller | `XxxResourceController` | `OrderResourceController` |
534
+ | Service | `XxxService` / `XxxServiceImpl` | `OrderService` |
535
+ | Mapper | `XxxMapper` | `OrderMapper` |
536
+ | Entity | `XxxEntity` | `OrderEntity` |
537
+ | DTO | `XxxDTO` | `OrderDTO` |
538
+ | VO | `XxxVO` | `OrderVO` |
539
+
540
+ ### ID 生成
541
+
542
+ ```java
543
+ import net.xnzn.framework.id.Id;
544
+
545
+ // 生成雪花ID
546
+ long id = Id.next();
547
+ ```
548
+
549
+ ---
550
+
551
+ ## 与 RuoYi-Vue-Plus 对比
552
+
553
+ | 特征 | RuoYi-Vue-Plus | leniu-tengyun-core |
554
+ |------|----------------|-------------------|
555
+ | **包名** | `org.dromara.*` | `net.xnzn.*` |
556
+ | **JDK** | 17 | 21 |
557
+ | **租户模式** | 单库多租户(tenant_id 字段) | 双库架构(物理库隔离) |
558
+ | **请求封装** | `Bo` | `LeRequest<T>` |
559
+ | **响应封装** | `R<T>`, `TableDataInfo<T>` | `Page<T>`, `void` |
560
+ | **异常类** | `ServiceException` | `LeException` |
561
+ | **国际化** | `MessageUtils.message()` | `I18n.getMessage()` |
562
+ | **权限注解** | `@SaCheckPermission` | `@RequiresAuthentication` |
563
+ | **审计字段** | `create_by/create_time/update_by/update_time` | `crby/crtime/upby/uptime` |
564
+ | **逻辑删除** | `del_flag` (0=正常, 1=删除) | `del_flag` (2=正常, 1=删除) |
565
+
566
+ ---
567
+
568
+ ## 快速检查清单
569
+
570
+ ### 新模块设计检查
571
+
572
+ - [ ] **包路径正确**:`net.xnzn.xxx.*`
573
+ - [ ] **Entity 审计字段**:`crby/crtime/upby/uptime`
574
+ - [ ] **逻辑删除**:`delFlag`(1=删除,2=正常)
575
+ - [ ] **三层架构**:Controller → Service → Mapper
576
+ - [ ] **异常处理**:使用 `LeException`
577
+ - [ ] **权限控制**:`@RequiresAuthentication`
578
+ - [ ] **国际化**:使用 `I18n.getMessage()`
579
+ - [ ] **双库路由**:根据需要使用 `Executors.doInTenant/doInSystem`
580
+
581
+ ### Entity 检查
582
+
583
+ - [ ] 主键配置:`@TableId(value = "id", type = IdType.AUTO)`
584
+ - [ ] 表名注解:`@TableName("table_name")`
585
+ - [ ] 审计字段自动填充:`@TableField(fill = FieldFill.INSERT/INSERT_UPDATE)`
586
+ - [ ] Lombok 注解:`@Data @Accessors(chain = true)`
587
+
588
+ ---
589
+
590
+ ## 参考代码位置
591
+
592
+ | 类型 | 路径 |
593
+ |------|------|
594
+ | Controller 示例 | `sys-kitchen/.../backfield/attendance/scheduling/controller/BackAttendanceWorkShiftController.java` |
595
+ | Service 示例 | `sys-kitchen/.../backfield/attendance/scheduling/service/impl/BackAttendanceWorkShiftServiceImpl.java` |
596
+ | Mapper 示例 | `sys-kitchen/.../backfield/attendance/scheduling/mapper/BackAttendanceWorkShiftMapper.java` |
597
+ | Entity 示例 | `sys-kitchen/.../backfield/attendance/scheduling/model/BackAttendanceWorkShift.java` |
598
+ | 配置文件 | `core-base/src/main/resources/bootstrap.yml` |