@qlover/create-app 0.7.14 → 0.8.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 (361) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/configs/_common/.gitignore.template +6 -0
  3. package/dist/configs/_common/.prettierignore +17 -5
  4. package/dist/configs/_common/.vscode/settings.json +6 -1
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/templates/next-app/.env.template +1 -1
  8. package/dist/templates/next-app/README.en.md +130 -0
  9. package/dist/templates/next-app/README.md +114 -20
  10. package/dist/templates/next-app/config/Identifier/api.ts +5 -5
  11. package/dist/templates/next-app/config/Identifier/common/admint.table.ts +69 -0
  12. package/dist/templates/next-app/config/Identifier/common/common.ts +76 -0
  13. package/dist/templates/next-app/config/Identifier/common/index.ts +3 -0
  14. package/dist/templates/next-app/config/Identifier/{validator.ts → common/validators.ts} +5 -5
  15. package/dist/templates/next-app/config/Identifier/index.ts +2 -12
  16. package/dist/templates/next-app/config/Identifier/pages/index.ts +6 -0
  17. package/dist/templates/next-app/config/Identifier/pages/page.admin.home.ts +27 -0
  18. package/dist/templates/next-app/config/Identifier/pages/page.admin.locales.ts +266 -0
  19. package/dist/templates/next-app/config/Identifier/pages/page.admin.user.ts +293 -0
  20. package/dist/templates/{react-app/config/Identifier → next-app/config/Identifier/pages}/page.home.ts +15 -22
  21. package/dist/templates/next-app/config/Identifier/{page.login.ts → pages/page.login.ts} +28 -34
  22. package/dist/templates/next-app/config/Identifier/{page.register.ts → pages/page.register.ts} +30 -29
  23. package/dist/templates/next-app/config/adminNavs.ts +19 -0
  24. package/dist/templates/next-app/config/common.ts +22 -13
  25. package/dist/templates/next-app/config/i18n/HomeI18n.ts +5 -5
  26. package/dist/templates/next-app/config/i18n/admin18n.ts +61 -19
  27. package/dist/templates/next-app/config/i18n/i18nConfig.ts +2 -0
  28. package/dist/templates/next-app/config/i18n/i18nKeyScheam.ts +36 -0
  29. package/dist/templates/next-app/config/i18n/loginI18n.ts +22 -22
  30. package/dist/templates/next-app/config/i18n/register18n.ts +23 -24
  31. package/dist/templates/next-app/docs/en/api.md +387 -0
  32. package/dist/templates/next-app/docs/en/component.md +544 -0
  33. package/dist/templates/next-app/docs/en/database.md +496 -0
  34. package/dist/templates/next-app/docs/en/development-guide.md +727 -0
  35. package/dist/templates/next-app/docs/en/env.md +563 -0
  36. package/dist/templates/next-app/docs/en/i18n.md +287 -0
  37. package/dist/templates/next-app/docs/en/index.md +165 -0
  38. package/dist/templates/next-app/docs/en/page.md +457 -0
  39. package/dist/templates/next-app/docs/en/project-structure.md +176 -0
  40. package/dist/templates/next-app/docs/en/router.md +427 -0
  41. package/dist/templates/next-app/docs/en/theme.md +532 -0
  42. package/dist/templates/next-app/docs/en/validator.md +478 -0
  43. package/dist/templates/next-app/docs/zh/api.md +387 -0
  44. package/dist/templates/next-app/docs/zh/component.md +544 -0
  45. package/dist/templates/next-app/docs/zh/database.md +496 -0
  46. package/dist/templates/next-app/docs/zh/development-guide.md +727 -0
  47. package/dist/templates/next-app/docs/zh/env.md +563 -0
  48. package/dist/templates/next-app/docs/zh/i18n.md +287 -0
  49. package/dist/templates/next-app/docs/zh/index.md +165 -0
  50. package/dist/templates/next-app/docs/zh/page.md +457 -0
  51. package/dist/templates/next-app/docs/zh/project-structure.md +176 -0
  52. package/dist/templates/next-app/docs/zh/router.md +427 -0
  53. package/dist/templates/next-app/docs/zh/theme.md +532 -0
  54. package/dist/templates/next-app/docs/zh/validator.md +476 -0
  55. package/dist/templates/next-app/make/generateLocales.ts +19 -12
  56. package/dist/templates/next-app/migrations/schema/LocalesSchema.ts +15 -0
  57. package/dist/templates/next-app/migrations/sql/1694244000000.sql +11 -0
  58. package/dist/templates/next-app/package.json +7 -3
  59. package/dist/templates/next-app/public/locales/en.json +172 -207
  60. package/dist/templates/next-app/public/locales/zh.json +172 -207
  61. package/dist/templates/next-app/src/app/[locale]/admin/locales/page.tsx +153 -0
  62. package/dist/templates/next-app/src/app/[locale]/admin/users/page.tsx +48 -50
  63. package/dist/templates/next-app/src/app/[locale]/login/LoginForm.tsx +2 -2
  64. package/dist/templates/next-app/src/app/api/admin/locales/create/route.ts +34 -0
  65. package/dist/templates/next-app/src/app/api/admin/locales/import/route.ts +40 -0
  66. package/dist/templates/next-app/src/app/api/admin/locales/route.ts +42 -0
  67. package/dist/templates/next-app/src/app/api/admin/locales/update/route.ts +32 -0
  68. package/dist/templates/next-app/src/app/api/locales/json/route.ts +44 -0
  69. package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +1 -13
  70. package/dist/templates/next-app/src/base/cases/Datetime.ts +18 -0
  71. package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +12 -6
  72. package/dist/templates/next-app/src/base/cases/ResourceState.ts +17 -0
  73. package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +25 -0
  74. package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +200 -0
  75. package/dist/templates/next-app/src/base/port/ZodBuilderInterface.ts +8 -0
  76. package/dist/templates/next-app/src/base/services/AdminLocalesService.ts +20 -0
  77. package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +26 -0
  78. package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +42 -0
  79. package/dist/templates/next-app/src/base/services/ResourceService.ts +122 -0
  80. package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +104 -0
  81. package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +38 -5
  82. package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +1 -1
  83. package/dist/templates/next-app/src/i18n/request.ts +30 -1
  84. package/dist/templates/next-app/src/server/PageParams.ts +2 -10
  85. package/dist/templates/next-app/src/server/port/DBBridgeInterface.ts +5 -0
  86. package/dist/templates/next-app/src/server/port/DBTableInterface.ts +2 -0
  87. package/dist/templates/next-app/src/server/port/LocalesRepositoryInterface.ts +43 -0
  88. package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +197 -0
  89. package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +122 -0
  90. package/dist/templates/next-app/src/server/sqlBridges/SupabaseBridge.ts +60 -11
  91. package/dist/templates/next-app/src/server/validators/ExtendedExecutorError.ts +6 -0
  92. package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +131 -0
  93. package/dist/templates/next-app/src/server/validators/LoginValidator.ts +2 -5
  94. package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +32 -16
  95. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/_default.css +2 -1
  96. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/dark.css +28 -29
  97. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/pink.css +2 -1
  98. package/dist/templates/next-app/src/uikit/components/AdminLayout.tsx +17 -3
  99. package/dist/templates/next-app/src/uikit/components/BaseHeader.tsx +5 -4
  100. package/dist/templates/next-app/src/uikit/components/BaseLayout.tsx +5 -4
  101. package/dist/templates/next-app/src/uikit/components/BootstrapsProvider.tsx +3 -2
  102. package/dist/templates/next-app/src/uikit/components/ComboProvider.tsx +1 -1
  103. package/dist/templates/next-app/src/uikit/components/EditableCell.tsx +118 -0
  104. package/dist/templates/next-app/src/uikit/components/LogoutButton.tsx +5 -6
  105. package/dist/templates/next-app/src/uikit/components/ThemeSwitcher.tsx +1 -1
  106. package/dist/templates/next-app/src/uikit/components/With.tsx +2 -2
  107. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportButton.tsx +62 -0
  108. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +28 -0
  109. package/dist/templates/next-app/src/uikit/components/localesImportButton/import.module.css +6 -0
  110. package/dist/templates/next-app/src/uikit/hook/useI18nInterface.ts +8 -14
  111. package/dist/templates/next-app/src/uikit/hook/useWarnTranslations.ts +25 -0
  112. package/dist/templates/react-app/.prettierignore +17 -0
  113. package/dist/templates/react-app/README.en.md +71 -54
  114. package/dist/templates/react-app/README.md +35 -18
  115. package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +14 -0
  116. package/dist/templates/react-app/__tests__/__mocks__/MockAppConfit.ts +1 -1
  117. package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +2 -2
  118. package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +1 -1
  119. package/dist/templates/react-app/__tests__/__mocks__/components/TestApp.tsx +45 -0
  120. package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +34 -0
  121. package/dist/templates/react-app/__tests__/__mocks__/components/TestRouter.tsx +46 -0
  122. package/dist/templates/react-app/__tests__/__mocks__/components/index.ts +12 -0
  123. package/dist/templates/react-app/__tests__/__mocks__/createMockGlobals.ts +1 -2
  124. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +51 -0
  125. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +69 -0
  126. package/dist/templates/react-app/__tests__/setup/index.ts +1 -51
  127. package/dist/templates/react-app/__tests__/setup/setupGlobal.ts +51 -0
  128. package/dist/templates/react-app/__tests__/src/App.structure.test.tsx +115 -0
  129. package/dist/templates/react-app/__tests__/src/base/cases/AppConfig.test.ts +2 -2
  130. package/dist/templates/react-app/__tests__/src/base/cases/AppError.test.ts +1 -1
  131. package/dist/templates/react-app/__tests__/src/base/cases/DialogHandler.test.ts +3 -5
  132. package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +13 -2
  133. package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +1 -1
  134. package/dist/templates/react-app/__tests__/src/base/cases/PublicAssetsPath.test.ts +1 -1
  135. package/dist/templates/react-app/__tests__/src/base/cases/RequestLogger.test.ts +5 -5
  136. package/dist/templates/react-app/__tests__/src/base/cases/RequestStatusCatcher.test.ts +1 -2
  137. package/dist/templates/react-app/__tests__/src/base/cases/RouterLoader.test.ts +25 -15
  138. package/dist/templates/react-app/__tests__/src/base/services/I18nService.test.ts +29 -15
  139. package/dist/templates/react-app/__tests__/src/core/IOC.test.ts +19 -9
  140. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +153 -0
  141. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapsApp.test.ts +9 -7
  142. package/dist/templates/react-app/__tests__/src/main.integration.test.tsx +4 -5
  143. package/dist/templates/react-app/__tests__/src/main.test.tsx +4 -4
  144. package/dist/templates/react-app/__tests__/src/uikit/components/BaseHeader.test.tsx +68 -59
  145. package/dist/templates/react-app/config/IOCIdentifier.ts +8 -8
  146. package/dist/templates/react-app/config/Identifier/{common.error.ts → common/common.error.ts} +5 -5
  147. package/dist/templates/react-app/config/Identifier/{common.ts → common/common.ts} +9 -9
  148. package/dist/templates/react-app/config/Identifier/common/index.ts +2 -0
  149. package/dist/templates/react-app/config/Identifier/index.ts +1 -9
  150. package/dist/templates/react-app/config/Identifier/pages/index.ts +8 -0
  151. package/dist/templates/react-app/config/Identifier/{page.about.ts → pages/page.about.ts} +34 -26
  152. package/dist/templates/react-app/config/Identifier/{page.executor.ts → pages/page.executor.ts} +47 -39
  153. package/dist/templates/{next-app/config/Identifier → react-app/config/Identifier/pages}/page.home.ts +24 -23
  154. package/dist/templates/react-app/config/Identifier/pages/page.identifiter.ts +102 -0
  155. package/dist/templates/react-app/config/Identifier/{page.jsonStorage.ts → pages/page.jsonStorage.ts} +18 -11
  156. package/dist/templates/react-app/config/Identifier/{page.login.ts → pages/page.login.ts} +37 -27
  157. package/dist/templates/react-app/config/Identifier/{page.register.ts → pages/page.register.ts} +37 -25
  158. package/dist/templates/react-app/config/Identifier/{page.request.ts → pages/page.request.ts} +34 -44
  159. package/dist/templates/react-app/config/app.router.ts +66 -69
  160. package/dist/templates/react-app/config/i18n/PageI18nInterface.ts +51 -0
  161. package/dist/templates/react-app/config/i18n/aboutI18n.ts +42 -0
  162. package/dist/templates/react-app/config/i18n/executorI18n.ts +51 -0
  163. package/dist/templates/react-app/config/i18n/homeI18n.ts +24 -0
  164. package/dist/templates/react-app/config/i18n/i18nConfig.ts +30 -0
  165. package/dist/templates/react-app/config/i18n/identifiter18n.ts +30 -0
  166. package/dist/templates/react-app/config/i18n/jsonStorage18n.ts +27 -0
  167. package/dist/templates/react-app/config/i18n/login18n.ts +42 -0
  168. package/dist/templates/react-app/config/i18n/notFoundI18n.ts +34 -0
  169. package/dist/templates/react-app/config/i18n/register18n.ts +40 -0
  170. package/dist/templates/react-app/config/i18n/request18n.ts +41 -0
  171. package/dist/templates/react-app/config/theme.ts +14 -4
  172. package/dist/templates/react-app/docs/en/bootstrap.md +1670 -341
  173. package/dist/templates/react-app/docs/en/development-guide.md +1021 -345
  174. package/dist/templates/react-app/docs/en/env.md +1132 -278
  175. package/dist/templates/react-app/docs/en/i18n.md +858 -147
  176. package/dist/templates/react-app/docs/en/index.md +733 -104
  177. package/dist/templates/react-app/docs/en/ioc.md +1228 -287
  178. package/dist/templates/react-app/docs/en/playwright/e2e-tests.md +321 -0
  179. package/dist/templates/react-app/docs/en/playwright/index.md +19 -0
  180. package/dist/templates/react-app/docs/en/playwright/installation-summary.md +332 -0
  181. package/dist/templates/react-app/docs/en/playwright/overview.md +222 -0
  182. package/dist/templates/react-app/docs/en/playwright/quickstart.md +325 -0
  183. package/dist/templates/react-app/docs/en/playwright/reorganization-notes.md +340 -0
  184. package/dist/templates/react-app/docs/en/playwright/setup-complete.md +290 -0
  185. package/dist/templates/react-app/docs/en/playwright/testing-guide.md +565 -0
  186. package/dist/templates/react-app/docs/en/store.md +1194 -184
  187. package/dist/templates/react-app/docs/en/why-no-globals.md +797 -0
  188. package/dist/templates/react-app/docs/zh/bootstrap.md +1670 -341
  189. package/dist/templates/react-app/docs/zh/development-guide.md +1021 -345
  190. package/dist/templates/react-app/docs/zh/env.md +1132 -275
  191. package/dist/templates/react-app/docs/zh/i18n.md +858 -147
  192. package/dist/templates/react-app/docs/zh/index.md +717 -104
  193. package/dist/templates/react-app/docs/zh/ioc.md +1229 -287
  194. package/dist/templates/react-app/docs/zh/playwright/e2e-tests.md +321 -0
  195. package/dist/templates/react-app/docs/zh/playwright/index.md +19 -0
  196. package/dist/templates/react-app/docs/zh/playwright/installation-summary.md +332 -0
  197. package/dist/templates/react-app/docs/zh/playwright/overview.md +222 -0
  198. package/dist/templates/react-app/docs/zh/playwright/quickstart.md +325 -0
  199. package/dist/templates/react-app/docs/zh/playwright/reorganization-notes.md +340 -0
  200. package/dist/templates/react-app/docs/zh/playwright/setup-complete.md +290 -0
  201. package/dist/templates/react-app/docs/zh/playwright/testing-guide.md +565 -0
  202. package/dist/templates/react-app/docs/zh/store.md +1192 -184
  203. package/dist/templates/react-app/docs/zh/why-no-globals.md +797 -0
  204. package/dist/templates/react-app/e2e/App.spec.ts +319 -0
  205. package/dist/templates/react-app/e2e/fixtures/base.fixture.ts +40 -0
  206. package/dist/templates/react-app/e2e/main.spec.ts +20 -0
  207. package/dist/templates/react-app/e2e/utils/test-helpers.ts +19 -0
  208. package/dist/templates/react-app/eslint.config.mjs +247 -0
  209. package/dist/templates/react-app/makes/eslint-utils.mjs +195 -0
  210. package/dist/templates/react-app/makes/generateTs2LocalesOptions.ts +26 -0
  211. package/dist/templates/react-app/package.json +31 -3
  212. package/dist/templates/react-app/playwright.config.ts +79 -0
  213. package/dist/templates/react-app/public/locales/en/common.json +190 -179
  214. package/dist/templates/react-app/public/locales/zh/common.json +190 -179
  215. package/dist/templates/react-app/src/App.tsx +15 -42
  216. package/dist/templates/react-app/src/base/apis/AiApi.ts +5 -5
  217. package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +1 -1
  218. package/dist/templates/react-app/src/base/apis/feApi/FeApiAdapter.ts +1 -1
  219. package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +8 -8
  220. package/dist/templates/react-app/src/base/apis/feApi/FeApiType.ts +1 -1
  221. package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +6 -6
  222. package/dist/templates/react-app/src/base/apis/userApi/UserApiAdapter.ts +1 -1
  223. package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -14
  224. package/dist/templates/react-app/src/base/apis/userApi/UserApiType.ts +1 -1
  225. package/dist/templates/react-app/src/base/cases/DialogHandler.ts +5 -2
  226. package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +3 -3
  227. package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +3 -3
  228. package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +2 -2
  229. package/dist/templates/react-app/src/base/cases/RequestLogger.ts +4 -4
  230. package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +1 -1
  231. package/dist/templates/react-app/src/base/cases/ResourceState.ts +23 -0
  232. package/dist/templates/react-app/src/base/cases/RouterLoader.ts +4 -4
  233. package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +26 -0
  234. package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -3
  235. package/dist/templates/react-app/src/base/port/I18nServiceInterface.ts +1 -1
  236. package/dist/templates/react-app/src/base/port/IOCInterface.ts +36 -0
  237. package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +2 -1
  238. package/dist/templates/react-app/src/base/port/ProcesserExecutorInterface.ts +1 -1
  239. package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +2 -2
  240. package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +9 -5
  241. package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +1 -1
  242. package/dist/templates/react-app/src/base/services/I18nService.ts +29 -29
  243. package/dist/templates/react-app/src/base/services/IdentifierService.ts +143 -0
  244. package/dist/templates/react-app/src/base/services/ProcesserExecutor.ts +3 -3
  245. package/dist/templates/react-app/src/base/services/RouteService.ts +27 -8
  246. package/dist/templates/react-app/src/base/services/UserService.ts +8 -8
  247. package/dist/templates/react-app/src/base/types/Page.ts +14 -2
  248. package/dist/templates/react-app/src/base/types/global.d.ts +1 -1
  249. package/dist/templates/react-app/src/core/IOC.ts +5 -46
  250. package/dist/templates/react-app/src/core/bootstraps/{BootstrapApp.ts → BootstrapClient.ts} +44 -17
  251. package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +14 -7
  252. package/dist/templates/react-app/src/core/bootstraps/IocIdentifierTest.ts +1 -1
  253. package/dist/templates/react-app/src/core/bootstraps/PrintBootstrap.ts +1 -1
  254. package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +40 -0
  255. package/dist/templates/react-app/src/core/{IocRegisterImpl.ts → clientIoc/ClientIOCRegister.ts} +35 -24
  256. package/dist/templates/react-app/src/core/globals.ts +9 -9
  257. package/dist/templates/react-app/src/main.tsx +4 -4
  258. package/dist/templates/react-app/src/pages/404.tsx +6 -3
  259. package/dist/templates/react-app/src/pages/500.tsx +5 -2
  260. package/dist/templates/react-app/src/pages/NoRouteFound.tsx +5 -0
  261. package/dist/templates/react-app/src/pages/auth/Layout.tsx +9 -6
  262. package/dist/templates/react-app/src/pages/auth/LoginPage.tsx +46 -56
  263. package/dist/templates/react-app/src/pages/auth/RegisterPage.tsx +46 -58
  264. package/dist/templates/react-app/src/pages/base/AboutPage.tsx +35 -40
  265. package/dist/templates/react-app/src/pages/base/ExecutorPage.tsx +51 -51
  266. package/dist/templates/react-app/src/pages/base/HomePage.tsx +14 -15
  267. package/dist/templates/react-app/src/pages/base/IdentifierPage.tsx +70 -11
  268. package/dist/templates/react-app/src/pages/base/JSONStoragePage.tsx +24 -25
  269. package/dist/templates/react-app/src/pages/base/Layout.tsx +2 -2
  270. package/dist/templates/react-app/src/pages/base/RedirectPathname.tsx +3 -2
  271. package/dist/templates/react-app/src/pages/base/RequestPage.tsx +41 -59
  272. package/dist/templates/react-app/src/styles/css/antd-themes/{_default.css → _common/_default.css} +85 -0
  273. package/dist/templates/react-app/src/styles/css/antd-themes/{dark.css → _common/dark.css} +99 -0
  274. package/dist/templates/react-app/src/styles/css/antd-themes/_common/index.css +3 -0
  275. package/dist/templates/react-app/src/styles/css/antd-themes/{pink.css → _common/pink.css} +86 -0
  276. package/dist/templates/react-app/src/styles/css/antd-themes/index.css +4 -3
  277. package/dist/templates/react-app/src/styles/css/antd-themes/menu/_default.css +108 -0
  278. package/dist/templates/react-app/src/styles/css/antd-themes/menu/dark.css +67 -0
  279. package/dist/templates/react-app/src/styles/css/antd-themes/menu/index.css +3 -0
  280. package/dist/templates/react-app/src/styles/css/antd-themes/menu/pink.css +67 -0
  281. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/_default.css +34 -0
  282. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/dark.css +31 -0
  283. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/index.css +3 -0
  284. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/pink.css +36 -0
  285. package/dist/templates/react-app/src/styles/css/antd-themes/table/_default.css +44 -0
  286. package/dist/templates/react-app/src/styles/css/antd-themes/table/dark.css +43 -0
  287. package/dist/templates/react-app/src/styles/css/antd-themes/table/index.css +3 -0
  288. package/dist/templates/react-app/src/styles/css/antd-themes/table/pink.css +43 -0
  289. package/dist/templates/react-app/src/styles/css/page.css +4 -3
  290. package/dist/templates/react-app/src/styles/css/themes/_default.css +1 -0
  291. package/dist/templates/react-app/src/styles/css/themes/dark.css +1 -0
  292. package/dist/templates/react-app/src/styles/css/themes/pink.css +1 -0
  293. package/dist/templates/react-app/src/styles/css/zIndex.css +1 -1
  294. package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +3 -3
  295. package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +2 -2
  296. package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +1 -1
  297. package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +3 -3
  298. package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +35 -0
  299. package/dist/templates/react-app/src/uikit/components/BaseHeader.tsx +15 -11
  300. package/dist/templates/react-app/src/uikit/components/BaseRouteProvider.tsx +14 -11
  301. package/dist/templates/react-app/src/uikit/components/BaseRouteSeo.tsx +18 -0
  302. package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +13 -0
  303. package/dist/templates/react-app/src/uikit/components/ClientSeo.tsx +62 -0
  304. package/dist/templates/react-app/src/uikit/components/ComboProvider.tsx +38 -0
  305. package/dist/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +48 -27
  306. package/dist/templates/react-app/src/uikit/components/Loading.tsx +4 -2
  307. package/dist/templates/react-app/src/uikit/components/LocaleLink.tsx +4 -5
  308. package/dist/templates/react-app/src/uikit/components/LogoutButton.tsx +34 -11
  309. package/dist/templates/react-app/src/uikit/components/ProcessExecutorProvider.tsx +9 -5
  310. package/dist/templates/react-app/src/uikit/components/RouterRenderComponent.tsx +6 -3
  311. package/dist/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +97 -40
  312. package/dist/templates/react-app/src/uikit/components/UserAuthProvider.tsx +5 -5
  313. package/dist/templates/react-app/src/uikit/components/With.tsx +17 -0
  314. package/dist/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +17 -11
  315. package/dist/templates/react-app/src/uikit/contexts/IOCContext.ts +13 -0
  316. package/dist/templates/react-app/src/uikit/hooks/useAppTranslation.ts +26 -0
  317. package/dist/templates/react-app/src/uikit/hooks/useI18nGuard.ts +8 -11
  318. package/dist/templates/react-app/src/uikit/hooks/useI18nInterface.ts +25 -0
  319. package/dist/templates/react-app/src/uikit/hooks/useIOC.ts +35 -0
  320. package/dist/templates/react-app/src/uikit/hooks/useNavigateBridge.ts +3 -3
  321. package/dist/templates/react-app/src/uikit/hooks/useStrictEffect.ts +0 -1
  322. package/dist/templates/react-app/tsconfig.e2e.json +21 -0
  323. package/dist/templates/react-app/tsconfig.json +8 -1
  324. package/dist/templates/react-app/tsconfig.node.json +1 -1
  325. package/dist/templates/react-app/tsconfig.test.json +3 -1
  326. package/dist/templates/react-app/vite.config.ts +50 -34
  327. package/package.json +2 -1
  328. package/dist/configs/react-app/eslint.config.js +0 -94
  329. package/dist/templates/next-app/config/Identifier/common.error.ts +0 -41
  330. package/dist/templates/next-app/config/Identifier/common.ts +0 -69
  331. package/dist/templates/next-app/config/Identifier/page.about.ts +0 -181
  332. package/dist/templates/next-app/config/Identifier/page.admin.ts +0 -48
  333. package/dist/templates/next-app/config/Identifier/page.executor.ts +0 -272
  334. package/dist/templates/next-app/config/Identifier/page.identifiter.ts +0 -39
  335. package/dist/templates/next-app/config/Identifier/page.jsonStorage.ts +0 -72
  336. package/dist/templates/next-app/config/Identifier/page.request.ts +0 -182
  337. package/dist/templates/next-app/docs/env.md +0 -94
  338. package/dist/templates/next-app/src/base/cases/ChatAction.ts +0 -21
  339. package/dist/templates/next-app/src/base/cases/FocusBarAction.ts +0 -36
  340. package/dist/templates/next-app/src/base/cases/RequestState.ts +0 -20
  341. package/dist/templates/next-app/src/base/port/AdminPageInterface.ts +0 -85
  342. package/dist/templates/next-app/src/base/port/AsyncStateInterface.ts +0 -7
  343. package/dist/templates/next-app/src/base/services/AdminUserService.ts +0 -45
  344. package/dist/templates/next-app/src/uikit/components/ChatRoot.tsx +0 -17
  345. package/dist/templates/next-app/src/uikit/components/chat/ChatActionInterface.ts +0 -30
  346. package/dist/templates/next-app/src/uikit/components/chat/ChatFocusBar.tsx +0 -65
  347. package/dist/templates/next-app/src/uikit/components/chat/ChatMessages.tsx +0 -59
  348. package/dist/templates/next-app/src/uikit/components/chat/ChatWrap.tsx +0 -28
  349. package/dist/templates/next-app/src/uikit/components/chat/FocusBarActionInterface.ts +0 -19
  350. package/dist/templates/next-app/src/uikit/hook/useMountedClient.ts +0 -17
  351. package/dist/templates/next-app/src/uikit/hook/useStore.ts +0 -15
  352. package/dist/templates/react-app/__tests__/__mocks__/I18nService.ts +0 -13
  353. package/dist/templates/react-app/__tests__/src/App.test.tsx +0 -139
  354. package/dist/templates/react-app/config/Identifier/page.identifiter.ts +0 -39
  355. package/dist/templates/react-app/config/i18n.ts +0 -15
  356. package/dist/templates/react-app/docs/en/project-structure.md +0 -434
  357. package/dist/templates/react-app/docs/zh/project-structure.md +0 -434
  358. package/dist/templates/react-app/src/base/cases/RequestState.ts +0 -20
  359. package/dist/templates/react-app/src/base/port/AsyncStateInterface.ts +0 -7
  360. package/dist/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +0 -15
  361. package/dist/templates/react-app/src/uikit/hooks/useStore.ts +0 -15
@@ -0,0 +1,457 @@
1
+ # Next.js Page Development Guide
2
+
3
+ ## Table of Contents
4
+
5
+ 1. [Page Development Overview](#page-development-overview)
6
+ 2. [Server Components in Detail](#server-components-in-detail)
7
+ 3. [Client Components in Detail](#client-components-in-detail)
8
+ 4. [Data Fetching and State Management](#data-fetching-and-state-management)
9
+ 5. [Page Routing and Metadata](#page-routing-and-metadata)
10
+ 6. [Best Practices and Performance Optimization](#best-practices-and-performance-optimization)
11
+
12
+ ## Page Development Overview
13
+
14
+ ### 1. Server Components vs Client Components
15
+
16
+ In Next.js 13+, all components are Server Components by default unless explicitly declared as Client Components.
17
+
18
+ ```typescript
19
+ // Server Component (default)
20
+ // page.tsx
21
+ export default function Page() {
22
+ return <div>Server-rendered content</div>;
23
+ }
24
+
25
+ // Client Component
26
+ // Requires 'use client' directive at the top of the file
27
+ 'use client';
28
+
29
+ export function ClientComponent() {
30
+ return <div>Client-rendered content</div>;
31
+ }
32
+ ```
33
+
34
+ ### 2. Selection Guide
35
+
36
+ **Use Server Components when**:
37
+
38
+ - Direct access to backend resources is needed
39
+ - Contains sensitive information (API keys, tokens, etc.)
40
+ - Depends on heavy backend operations
41
+ - Need to reduce client-side JavaScript bundle size
42
+ - SEO optimization is required
43
+ - For page-level components
44
+ - No client-side interaction needed
45
+ - No browser APIs needed
46
+
47
+ **Use Client Components when**:
48
+
49
+ - Need to add interactions and event handling
50
+ - Using browser APIs
51
+ - Using React hooks
52
+ - Need to maintain component state
53
+ - Need client-specific lifecycles
54
+ - Using third-party libraries that depend on browser APIs
55
+
56
+ ## Server Components in Detail
57
+
58
+ ### 1. Basic Structure
59
+
60
+ ```typescript
61
+ // app/[locale]/login/page.tsx
62
+ export default async function LoginPage(props: PageParamsProps) {
63
+ // 1. Parameter validation
64
+ if (!props.params) {
65
+ return notFound();
66
+ }
67
+
68
+ // 2. Server initialization
69
+ const params = await props.params;
70
+ const pageParams = new PageParams(params);
71
+ const server = new BootstrapServer();
72
+
73
+ // 3. Server-side data fetching and validation
74
+ if (await server.getIOC(ServerAuth).hasAuth()) {
75
+ return redirect({ href: '/', locale: params.locale! });
76
+ }
77
+
78
+ // 4. Get internationalized text
79
+ const tt = await pageParams.getI18nInterface(loginI18n);
80
+
81
+ // 5. Render page
82
+ return (
83
+ <BaseLayout>
84
+ <div>{/* Page content */}</div>
85
+ <ClientComponent /> {/* Embed client component */}
86
+ </BaseLayout>
87
+ );
88
+ }
89
+ ```
90
+
91
+ ### 2. Server-Side Data Fetching
92
+
93
+ ```typescript
94
+ // Fetch data directly in server component
95
+ export default async function UsersPage() {
96
+ const server = new BootstrapServer();
97
+
98
+ const result = await server
99
+ .use(new AdminAuthPlugin()) // Use server middleware
100
+ .execNoError(async ({ parameters: { IOC } }) => {
101
+ const userService = IOC(UserService);
102
+ return userService.getUsers();
103
+ });
104
+
105
+ // Pass data directly to client component
106
+ return <UserList initialData={result.data} />;
107
+ }
108
+ ```
109
+
110
+ ### 3. Static Generation and Dynamic Rendering
111
+
112
+ ```typescript
113
+ // Static page generation
114
+ export const dynamic = 'force-static'; // Force static generation
115
+ export const revalidate = 3600; // Regenerate every hour
116
+
117
+ // Dynamic page generation
118
+ export const dynamic = 'force-dynamic'; // Force dynamic generation
119
+
120
+ // Generate static route parameters
121
+ export async function generateStaticParams() {
122
+ return [{ locale: 'en' }, { locale: 'zh' }];
123
+ }
124
+ ```
125
+
126
+ ## Client Components in Detail
127
+
128
+ ### 1. Basic Structure
129
+
130
+ ```typescript
131
+ 'use client'; // Declare as client component
132
+
133
+ export function LoginForm(props: { tt: LoginI18nInterface }) {
134
+ // 1. Hooks usage
135
+ const [loading, setLoading] = useState(false);
136
+ const userService = useIOC(I.UserServiceInterface);
137
+
138
+ // 2. Event handling
139
+ const handleLogin = async (values: LoginFormData) => {
140
+ try {
141
+ setLoading(true);
142
+ await userService.login(values);
143
+ routerService.gotoHome();
144
+ } catch (error) {
145
+ logger.error(error);
146
+ } finally {
147
+ setLoading(false);
148
+ }
149
+ };
150
+
151
+ // 3. Render UI
152
+ return (
153
+ <Form onFinish={handleLogin}>
154
+ {/* Form content */}
155
+ </Form>
156
+ );
157
+ }
158
+ ```
159
+
160
+ ### 2. Client-Side State Management
161
+
162
+ ```typescript
163
+ 'use client';
164
+
165
+ export function UserProfile() {
166
+ // 1. Local state
167
+ const [isEditing, setIsEditing] = useState(false);
168
+
169
+ // 2. Service state
170
+ const userStore = useIOC(UserStore);
171
+ const user = useStore(userStore, userStore.selector.currentUser);
172
+
173
+ // 3. Form state
174
+ const [form] = Form.useForm();
175
+
176
+ // 4. Side effects
177
+ useEffect(() => {
178
+ if (user) {
179
+ form.setFieldsValue(user);
180
+ }
181
+ }, [user, form]);
182
+
183
+ return (
184
+ <div>{/* Component content */}</div>
185
+ );
186
+ }
187
+ ```
188
+
189
+ ### 3. Interaction with Server Components
190
+
191
+ ```typescript
192
+ // 1. Receive server data through props
193
+ interface Props {
194
+ initialData: UserData; // Initial data from server
195
+ tt: I18nInterface; // Translation text from server
196
+ }
197
+
198
+ 'use client';
199
+ export function UserList({ initialData, tt }: Props) {
200
+ const [data, setData] = useState(initialData);
201
+
202
+ // Initialize client state with server data
203
+ useEffect(() => {
204
+ setData(initialData);
205
+ }, [initialData]);
206
+
207
+ return (
208
+ <div>{/* Component content */}</div>
209
+ );
210
+ }
211
+ ```
212
+
213
+ ## Data Fetching and State Management
214
+
215
+ ### 1. Server-Side Data Fetching
216
+
217
+ ```typescript
218
+ // 1. Fetch data in server component
219
+ export default async function DashboardPage() {
220
+ const server = new BootstrapServer();
221
+
222
+ // Parallel data fetching
223
+ const [userData, statsData] = await Promise.all([
224
+ server.execNoError(async ({ IOC }) => IOC(UserService).getCurrentUser()),
225
+ server.execNoError(async ({ IOC }) => IOC(StatsService).getStats())
226
+ ]);
227
+
228
+ return (
229
+ <Dashboard
230
+ userData={userData}
231
+ statsData={statsData}
232
+ />
233
+ );
234
+ }
235
+
236
+ // 2. Use server action
237
+ export async function fetchUserData(userId: string) {
238
+ 'use server'; // Declare as server action
239
+
240
+ const server = new BootstrapServer();
241
+ return server.execNoError(async ({ IOC }) => {
242
+ return IOC(UserService).getUserById(userId);
243
+ });
244
+ }
245
+ ```
246
+
247
+ ### 2. Client-Side State Management
248
+
249
+ ```typescript
250
+ 'use client';
251
+
252
+ // 1. Use Store for state management
253
+ @injectable()
254
+ export class UserProfileStore extends StoreInterface<UserProfileState> {
255
+ constructor() {
256
+ super(() => ({
257
+ user: null,
258
+ loading: false,
259
+ error: null
260
+ }));
261
+ }
262
+
263
+ async fetchUser(id: string) {
264
+ this.emit({ ...this.state, loading: true });
265
+ try {
266
+ const user = await this.userService.getUser(id);
267
+ this.emit({ ...this.state, user, loading: false });
268
+ } catch (error) {
269
+ this.emit({ ...this.state, error, loading: false });
270
+ }
271
+ }
272
+ }
273
+
274
+ // 2. Use Store in component
275
+ export function UserProfile() {
276
+ const store = useIOC(UserProfileStore);
277
+ const user = useStore(store, store.selector.user);
278
+ const loading = useStore(store, store.selector.loading);
279
+
280
+ return (
281
+ <div>
282
+ {loading ? <Loading /> : <UserInfo user={user} />}
283
+ </div>
284
+ );
285
+ }
286
+ ```
287
+
288
+ ## Page Routing and Metadata
289
+
290
+ ### 1. Dynamic Routing
291
+
292
+ ```typescript
293
+ // app/[locale]/users/[id]/page.tsx
294
+ export default async function UserPage({
295
+ params: { locale, id }
296
+ }: {
297
+ params: { locale: string; id: string };
298
+ }) {
299
+ // Handle route parameters
300
+ }
301
+
302
+ // Generate static routes
303
+ export async function generateStaticParams() {
304
+ const users = await fetchUsers();
305
+
306
+ return users.map((user) => ({
307
+ locale: ['en', 'zh'],
308
+ id: user.id
309
+ }));
310
+ }
311
+ ```
312
+
313
+ ### 2. Metadata Generation
314
+
315
+ ```typescript
316
+ // 1. Static metadata
317
+ export const metadata: Metadata = {
318
+ title: 'User Profile',
319
+ description: 'User profile page'
320
+ };
321
+
322
+ // 2. Dynamic metadata
323
+ export async function generateMetadata({
324
+ params
325
+ }: {
326
+ params: PageParamsType;
327
+ }): Promise<Metadata> {
328
+ const pageParams = new PageParams(await params);
329
+ const tt = await pageParams.getI18nInterface(userI18n);
330
+
331
+ return {
332
+ title: tt.pageTitle,
333
+ description: tt.pageDescription
334
+ };
335
+ }
336
+ ```
337
+
338
+ ## Best Practices and Performance Optimization
339
+
340
+ ### 1. Component Splitting Principles
341
+
342
+ ```typescript
343
+ // ❌ Wrong: Mixing server and client logic in one component
344
+ export default function Page() {
345
+ const [state, setState] = useState(); // Error: Server components can't use hooks
346
+ const data = await fetchData(); // Correct: Server-side data fetching
347
+
348
+ return <div>{/* ... */}</div>;
349
+ }
350
+
351
+ // ✅ Correct: Separate server and client logic
352
+ // page.tsx (Server Component)
353
+ export default async function Page() {
354
+ const data = await fetchData(); // Server-side data fetching
355
+ return <ClientComponent data={data} />;
356
+ }
357
+
358
+ // ClientComponent.tsx (Client Component)
359
+ 'use client';
360
+ export function ClientComponent({ data }) {
361
+ const [state, setState] = useState(); // Client-side state management
362
+ return <div>{/* ... */}</div>;
363
+ }
364
+ ```
365
+
366
+ ### 2. Performance Optimization Strategies
367
+
368
+ ```typescript
369
+ // 1. Component-level caching
370
+ export default async function UserList() {
371
+ const users = await fetchUsers();
372
+
373
+ return (
374
+ <div>
375
+ {users.map(user => (
376
+ <Suspense key={user.id} fallback={<Loading />}>
377
+ <UserCard user={user} />
378
+ </Suspense>
379
+ ))}
380
+ </div>
381
+ );
382
+ }
383
+
384
+ // 2. Route-level caching
385
+ export const revalidate = 3600; // Cache for one hour
386
+
387
+ // 3. Selective hydration
388
+ export default function Page() {
389
+ return (
390
+ <>
391
+ <StaticContent />
392
+ <Suspense fallback={<Loading />}>
393
+ <DynamicContent />
394
+ </Suspense>
395
+ </>
396
+ );
397
+ }
398
+ ```
399
+
400
+ ### 3. Error Handling
401
+
402
+ ```typescript
403
+ // 1. Error boundary
404
+ 'use client';
405
+ export function ErrorBoundary({
406
+ error,
407
+ reset
408
+ }: {
409
+ error: Error;
410
+ reset: () => void;
411
+ }) {
412
+ return (
413
+ <div>
414
+ <h2>Something went wrong!</h2>
415
+ <button onClick={reset}>Try again</button>
416
+ </div>
417
+ );
418
+ }
419
+
420
+ // 2. Loading state
421
+ export default async function Page() {
422
+ return (
423
+ <Suspense fallback={<Loading />}>
424
+ <SlowComponent />
425
+ </Suspense>
426
+ );
427
+ }
428
+ ```
429
+
430
+ ## Summary
431
+
432
+ Key points for Next.js 13+ page development:
433
+
434
+ 1. **Component Type Selection**:
435
+ - Use Server Components by default
436
+ - Use Client Components only when necessary
437
+ - Properly split component responsibilities
438
+
439
+ 2. **Data Flow Handling**:
440
+ - Prioritize server-side data fetching
441
+ - Pass data to client through props
442
+ - Use Store for client-side state management
443
+
444
+ 3. **Performance Optimization**:
445
+ - Use caching strategies appropriately
446
+ - Implement selective hydration
447
+ - Optimize loading performance
448
+
449
+ 4. **Development Experience**:
450
+ - Clear code organization
451
+ - Type safety
452
+ - Comprehensive error handling
453
+
454
+ 5. **Best Practices**:
455
+ - Follow Single Responsibility Principle
456
+ - Implement graceful degradation
457
+ - Maintain code maintainability
@@ -0,0 +1,176 @@
1
+ # Detailed Project Structure
2
+
3
+ ## Directory Structure Overview
4
+
5
+ ```
6
+ next-app/
7
+ ├── config/ # Global configuration files
8
+ ├── src/ # Source code directory
9
+ │ ├── app/ # Next.js app router
10
+ │ ├── base/ # Client core code
11
+ │ ├── core/ # Core bootstrap and IOC configuration
12
+ │ ├── server/ # Server-side code
13
+ │ ├── styles/ # Style files
14
+ │ └── uikit/ # UI component library
15
+ └── public/ # Static assets
16
+ ```
17
+
18
+ ## Detailed Structure Explanation
19
+
20
+ ### 1. Client Architecture (src/base)
21
+
22
+ #### 1.1 Interface Layer (src/base/port)
23
+
24
+ - `AdminLayoutInterface.ts` - Admin layout interface
25
+ - `AppApiInterface.ts` - Application API interface
26
+ - `AppUserApiInterface.ts` - User API interface
27
+ - `AsyncStateInterface.ts` - Asynchronous state interface
28
+ - `I18nServiceInterface.ts` - Internationalization service interface
29
+ - `IOCInterface.ts` - Dependency injection interface
30
+ - `RouterInterface.ts` - Router interface
31
+ - `UserServiceInterface.ts` - User service interface
32
+
33
+ #### 1.2 Business Logic Layer (src/base/cases)
34
+
35
+ - State management controllers
36
+ - Dialog handling
37
+ - Router service
38
+ - User service
39
+ - Encryption service
40
+
41
+ #### 1.3 Service Implementation Layer (src/base/services)
42
+
43
+ - `AdminUserService.ts` - Admin user service
44
+ - `I18nService.ts` - Internationalization service
45
+ - `UserService.ts` - User service
46
+ - `adminApi/` - Admin API implementation
47
+ - `appApi/` - Application API implementation
48
+
49
+ ### 2. Server Architecture (src/server)
50
+
51
+ #### 2.1 Interface Layer (src/server/port)
52
+
53
+ - `CrentialTokenInterface.ts` - Credential token interface
54
+ - `DBBridgeInterface.ts` - Database bridge interface
55
+ - `DBTableInterface.ts` - Database table interface
56
+ - `PaginationInterface.ts` - Pagination interface
57
+ - `ParamsHandlerInterface.ts` - Parameter handling interface
58
+ - `ServerAuthInterface.ts` - Server authentication interface
59
+ - `ServerInterface.ts` - Server interface
60
+ - `UserRepositoryInterface.ts` - User repository interface
61
+ - `ValidatorInterface.ts` - Validator interface
62
+
63
+ #### 2.2 Core Implementation
64
+
65
+ - `AppErrorApi.ts` - API error handling
66
+ - `AppSuccessApi.ts` - API success response
67
+ - `ServerAuth.ts` - Server authentication implementation
68
+ - `UserCredentialToken.ts` - User credential token
69
+
70
+ #### 2.3 Service Layer (src/server/services)
71
+
72
+ - `AdminAuthPlugin.ts` - Admin authentication plugin
73
+ - `AIService.ts` - AI service
74
+ - `ApiUserService.ts` - API user service
75
+ - `UserService.ts` - User service
76
+
77
+ #### 2.4 Data Access Layer
78
+
79
+ - `repositorys/UserRepository.ts` - User data repository
80
+ - `sqlBridges/SupabaseBridge.ts` - Supabase database bridge
81
+
82
+ #### 2.5 Validators (src/server/validators)
83
+
84
+ - `LoginValidator.ts` - Login validation
85
+ - `PaginationValidator.ts` - Pagination validation
86
+
87
+ ### 3. API Route Structure (src/app/api)
88
+
89
+ ```
90
+ api/
91
+ ├── admin/ # Admin endpoints
92
+ │ └── users/ # User management
93
+ ├── ai/ # AI-related endpoints
94
+ │ └── completions/ # AI completions
95
+ └── user/ # User endpoints
96
+ ├── login/ # Login
97
+ ├── logout/ # Logout
98
+ └── register/ # Registration
99
+ ```
100
+
101
+ ### 4. Page Route Structure (src/app/[locale])
102
+
103
+ ```
104
+ [locale]/
105
+ ├── admin/ # Admin pages
106
+ │ └── users/ # User management
107
+ ├── login/ # Login page
108
+ ├── register/ # Registration page
109
+ └── page.tsx # Homepage
110
+ ```
111
+
112
+ ### 5. UI Component Library (src/uikit)
113
+
114
+ #### 5.1 Components (components)
115
+
116
+ - `AdminLayout.tsx` - Admin layout
117
+ - `BaseHeader.tsx` - Base header
118
+ - `BaseLayout.tsx` - Base layout
119
+ - `ChatRoot.tsx` - Chat root component
120
+ - `LanguageSwitcher.tsx` - Language switcher
121
+ - `ThemeSwitcher.tsx` - Theme switcher
122
+ - Other common components
123
+
124
+ #### 5.2 Hooks and Context
125
+
126
+ - `useI18nInterface.ts` - Internationalization hook
127
+ - `useIOC.ts` - IOC container hook
128
+ - `useStore.ts` - State management hook
129
+ - `IOCContext.ts` - IOC context
130
+
131
+ ## Technical Features
132
+
133
+ 1. **Dependency Injection Pattern**
134
+ - Using IOC container for dependency management
135
+ - Separate IOC containers for client and server
136
+ - Decoupling through interfaces
137
+
138
+ 2. **Layered Architecture**
139
+ - Clear interface definitions
140
+ - Well-defined implementation layers
141
+ - Loosely coupled module design
142
+
143
+ 3. **State Management**
144
+ - Controller-based state management
145
+ - Reactive data flow
146
+ - Predictable state changes
147
+
148
+ 4. **Internationalization Support**
149
+ - Multi-language support based on next-intl
150
+ - Dynamic language switching
151
+ - Route-level language isolation
152
+
153
+ 5. **Theme System**
154
+ - Based on Tailwind CSS
155
+ - Dark mode support
156
+ - Configurable theme variables
157
+
158
+ ## Development Workflow
159
+
160
+ 1. **API Development**
161
+ - Define interface (port)
162
+ - Implement validator (validators)
163
+ - Implement service (services)
164
+ - Create API route (api)
165
+
166
+ 2. **Page Development**
167
+ - Create page component
168
+ - Implement controller
169
+ - Register dependencies
170
+ - Add route
171
+
172
+ 3. **Component Development**
173
+ - Create UI component
174
+ - Implement business logic
175
+ - Inject dependencies
176
+ - Add styles