sa2kit 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/README.md +1 -1
  2. package/dist/CollisionBalls-BpHufX3H.d.mts +41 -0
  3. package/dist/CollisionBalls-BpHufX3H.d.ts +41 -0
  4. package/dist/ConfigService-BxK06xP6.d.mts +262 -0
  5. package/dist/ConfigService-BxK06xP6.d.ts +262 -0
  6. package/dist/UniversalFileService-BpvbZitV.d.mts +139 -0
  7. package/dist/UniversalFileService-GsP6D3Rc.d.ts +139 -0
  8. package/dist/audioDetection/index.d.mts +449 -0
  9. package/dist/audioDetection/index.d.ts +449 -0
  10. package/dist/audioDetection/index.js +1244 -0
  11. package/dist/audioDetection/index.js.map +1 -0
  12. package/dist/audioDetection/index.mjs +1227 -0
  13. package/dist/audioDetection/index.mjs.map +1 -0
  14. package/dist/auth/legacy/core/index.d.mts +42 -0
  15. package/dist/auth/legacy/core/index.d.ts +42 -0
  16. package/dist/auth/legacy/core/index.js +242 -0
  17. package/dist/auth/legacy/core/index.js.map +1 -0
  18. package/dist/auth/legacy/core/index.mjs +226 -0
  19. package/dist/auth/legacy/core/index.mjs.map +1 -0
  20. package/dist/auth/legacy/db/index.d.mts +5 -0
  21. package/dist/auth/legacy/db/index.d.ts +5 -0
  22. package/dist/auth/legacy/db/index.js +261 -0
  23. package/dist/auth/legacy/db/index.js.map +1 -0
  24. package/dist/auth/legacy/db/index.mjs +250 -0
  25. package/dist/auth/legacy/db/index.mjs.map +1 -0
  26. package/dist/auth/legacy/index.d.mts +5 -0
  27. package/dist/auth/legacy/index.d.ts +5 -0
  28. package/dist/auth/legacy/index.js +1107 -0
  29. package/dist/auth/legacy/index.js.map +1 -0
  30. package/dist/auth/legacy/index.mjs +1086 -0
  31. package/dist/auth/legacy/index.mjs.map +1 -0
  32. package/dist/auth/legacy/logic/index.d.mts +9 -0
  33. package/dist/auth/legacy/logic/index.d.ts +9 -0
  34. package/dist/auth/legacy/logic/index.js +194 -0
  35. package/dist/auth/legacy/logic/index.js.map +1 -0
  36. package/dist/auth/legacy/logic/index.mjs +187 -0
  37. package/dist/auth/legacy/logic/index.mjs.map +1 -0
  38. package/dist/auth/legacy/miniapp/index.d.mts +5 -0
  39. package/dist/auth/legacy/miniapp/index.d.ts +5 -0
  40. package/dist/auth/legacy/miniapp/index.js +506 -0
  41. package/dist/auth/legacy/miniapp/index.js.map +1 -0
  42. package/dist/auth/legacy/miniapp/index.mjs +487 -0
  43. package/dist/auth/legacy/miniapp/index.mjs.map +1 -0
  44. package/dist/auth/legacy/routes/index.d.mts +53 -0
  45. package/dist/auth/legacy/routes/index.d.ts +53 -0
  46. package/dist/auth/legacy/routes/index.js +278 -0
  47. package/dist/auth/legacy/routes/index.js.map +1 -0
  48. package/dist/auth/legacy/routes/index.mjs +271 -0
  49. package/dist/auth/legacy/routes/index.mjs.map +1 -0
  50. package/dist/auth/legacy/schema/index.d.mts +401 -0
  51. package/dist/auth/legacy/schema/index.d.ts +401 -0
  52. package/dist/auth/legacy/schema/index.js +50 -0
  53. package/dist/auth/legacy/schema/index.js.map +1 -0
  54. package/dist/auth/legacy/schema/index.mjs +44 -0
  55. package/dist/auth/legacy/schema/index.mjs.map +1 -0
  56. package/dist/auth/legacy/server/index.d.mts +13 -0
  57. package/dist/auth/legacy/server/index.d.ts +13 -0
  58. package/dist/auth/legacy/server/index.js +21 -0
  59. package/dist/auth/legacy/server/index.js.map +1 -0
  60. package/dist/auth/legacy/server/index.mjs +19 -0
  61. package/dist/auth/legacy/server/index.mjs.map +1 -0
  62. package/dist/auth/legacy/services/index.d.mts +40 -0
  63. package/dist/auth/legacy/services/index.d.ts +40 -0
  64. package/dist/auth/legacy/services/index.js +258 -0
  65. package/dist/auth/legacy/services/index.js.map +1 -0
  66. package/dist/auth/legacy/services/index.mjs +252 -0
  67. package/dist/auth/legacy/services/index.mjs.map +1 -0
  68. package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
  69. package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
  70. package/dist/auth/legacy/ui/miniapp/index.js +298 -0
  71. package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
  72. package/dist/auth/legacy/ui/miniapp/index.mjs +290 -0
  73. package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
  74. package/dist/auth/legacy/ui/web/index.d.mts +22 -0
  75. package/dist/auth/legacy/ui/web/index.d.ts +22 -0
  76. package/dist/auth/legacy/ui/web/index.js +899 -0
  77. package/dist/auth/legacy/ui/web/index.js.map +1 -0
  78. package/dist/auth/legacy/ui/web/index.mjs +889 -0
  79. package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
  80. package/dist/auth/legacy/web/index.d.mts +5 -0
  81. package/dist/auth/legacy/web/index.d.ts +5 -0
  82. package/dist/auth/legacy/web/index.js +1107 -0
  83. package/dist/auth/legacy/web/index.js.map +1 -0
  84. package/dist/auth/legacy/web/index.mjs +1086 -0
  85. package/dist/auth/legacy/web/index.mjs.map +1 -0
  86. package/dist/auth/rn/index.d.mts +64 -0
  87. package/dist/auth/rn/index.d.ts +64 -0
  88. package/dist/auth/rn/index.js +765 -0
  89. package/dist/auth/rn/index.js.map +1 -0
  90. package/dist/auth/rn/index.mjs +754 -0
  91. package/dist/auth/rn/index.mjs.map +1 -0
  92. package/dist/base-api-client-ACKKt13v.d.mts +277 -0
  93. package/dist/base-api-client-ACKKt13v.d.ts +277 -0
  94. package/dist/boothVaultService-Cn4WPhjg.d.mts +83 -0
  95. package/dist/boothVaultService-Cn4WPhjg.d.ts +83 -0
  96. package/dist/business/index.d.mts +6 -0
  97. package/dist/business/index.d.ts +6 -0
  98. package/dist/business/index.js +1682 -0
  99. package/dist/business/index.js.map +1 -0
  100. package/dist/business/index.mjs +1675 -0
  101. package/dist/business/index.mjs.map +1 -0
  102. package/dist/calendar/index.d.mts +1325 -0
  103. package/dist/calendar/index.d.ts +1325 -0
  104. package/dist/calendar/index.js +5964 -0
  105. package/dist/calendar/index.js.map +1 -0
  106. package/dist/calendar/index.mjs +5878 -0
  107. package/dist/calendar/index.mjs.map +1 -0
  108. package/dist/components/index.d.mts +405 -0
  109. package/dist/components/index.d.ts +405 -0
  110. package/dist/components/index.js +2516 -0
  111. package/dist/components/index.js.map +1 -0
  112. package/dist/components/index.mjs +2396 -0
  113. package/dist/components/index.mjs.map +1 -0
  114. package/dist/drizzle-schema-BNhqj2AZ.d.mts +1114 -0
  115. package/dist/drizzle-schema-BNhqj2AZ.d.ts +1114 -0
  116. package/dist/festivalCard/index.d.mts +75 -0
  117. package/dist/festivalCard/index.d.ts +75 -0
  118. package/dist/festivalCard/index.js +1492 -0
  119. package/dist/festivalCard/index.js.map +1 -0
  120. package/dist/festivalCard/index.mjs +1475 -0
  121. package/dist/festivalCard/index.mjs.map +1 -0
  122. package/dist/festivalCard/server/index.d.mts +120 -0
  123. package/dist/festivalCard/server/index.d.ts +120 -0
  124. package/dist/festivalCard/server/index.js +272 -0
  125. package/dist/festivalCard/server/index.js.map +1 -0
  126. package/dist/festivalCard/server/index.mjs +265 -0
  127. package/dist/festivalCard/server/index.mjs.map +1 -0
  128. package/dist/festivalCardService-CZomuQ4E.d.mts +80 -0
  129. package/dist/festivalCardService-CZomuQ4E.d.ts +80 -0
  130. package/dist/index-1Ag7IBXN.d.ts +144 -0
  131. package/dist/index-DNKZ7-R_.d.mts +184 -0
  132. package/dist/index-DNKZ7-R_.d.ts +184 -0
  133. package/dist/index-DSel44Ke.d.mts +93 -0
  134. package/dist/index-DSel44Ke.d.ts +93 -0
  135. package/dist/index-DdeZSeTJ.d.mts +144 -0
  136. package/dist/index-DrPcMJPc.d.mts +250 -0
  137. package/dist/index-DrPcMJPc.d.ts +250 -0
  138. package/dist/index.d.mts +5333 -0
  139. package/dist/index.d.ts +5333 -0
  140. package/dist/index.js +18809 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/index.mjs +18533 -0
  143. package/dist/index.mjs.map +1 -0
  144. package/dist/mikuContest/ui/web/index.d.mts +2 -0
  145. package/dist/mikuContest/ui/web/index.d.ts +2 -0
  146. package/dist/mikuContest/ui/web/index.js +353 -0
  147. package/dist/mikuContest/ui/web/index.js.map +1 -0
  148. package/dist/mikuContest/ui/web/index.mjs +343 -0
  149. package/dist/mikuContest/ui/web/index.mjs.map +1 -0
  150. package/dist/mikuFireworks3D/index.d.mts +268 -0
  151. package/dist/mikuFireworks3D/index.d.ts +268 -0
  152. package/dist/mikuFireworks3D/index.js +1267 -0
  153. package/dist/mikuFireworks3D/index.js.map +1 -0
  154. package/dist/mikuFireworks3D/index.mjs +1228 -0
  155. package/dist/mikuFireworks3D/index.mjs.map +1 -0
  156. package/dist/mikuFusionGame/index.d.mts +117 -0
  157. package/dist/mikuFusionGame/index.d.ts +117 -0
  158. package/dist/mikuFusionGame/index.js +1208 -0
  159. package/dist/mikuFusionGame/index.js.map +1 -0
  160. package/dist/mikuFusionGame/index.mjs +1195 -0
  161. package/dist/mikuFusionGame/index.mjs.map +1 -0
  162. package/dist/mmd/admin/index.d.mts +487 -0
  163. package/dist/mmd/admin/index.d.ts +487 -0
  164. package/dist/mmd/admin/index.js +1058 -0
  165. package/dist/mmd/admin/index.js.map +1 -0
  166. package/dist/mmd/admin/index.mjs +1027 -0
  167. package/dist/mmd/admin/index.mjs.map +1 -0
  168. package/dist/mmd/index.d.mts +2467 -0
  169. package/dist/mmd/index.d.ts +2467 -0
  170. package/dist/mmd/index.js +10119 -0
  171. package/dist/mmd/index.js.map +1 -0
  172. package/dist/mmd/index.mjs +10028 -0
  173. package/dist/mmd/index.mjs.map +1 -0
  174. package/dist/mmd/server/index.d.mts +139 -0
  175. package/dist/mmd/server/index.d.ts +139 -0
  176. package/dist/mmd/server/index.js +424 -0
  177. package/dist/mmd/server/index.js.map +1 -0
  178. package/dist/mmd/server/index.mjs +404 -0
  179. package/dist/mmd/server/index.mjs.map +1 -0
  180. package/dist/music/index.d.mts +74 -0
  181. package/dist/music/index.d.ts +74 -0
  182. package/dist/music/index.js +830 -0
  183. package/dist/music/index.js.map +1 -0
  184. package/dist/music/index.mjs +809 -0
  185. package/dist/music/index.mjs.map +1 -0
  186. package/dist/music/server/index.d.mts +1 -0
  187. package/dist/music/server/index.d.ts +1 -0
  188. package/dist/music/server/index.js +194 -0
  189. package/dist/music/server/index.js.map +1 -0
  190. package/dist/music/server/index.mjs +182 -0
  191. package/dist/music/server/index.mjs.map +1 -0
  192. package/dist/navigation/index.d.mts +93 -0
  193. package/dist/navigation/index.d.ts +93 -0
  194. package/dist/navigation/index.js +453 -0
  195. package/dist/navigation/index.js.map +1 -0
  196. package/dist/navigation/index.mjs +443 -0
  197. package/dist/navigation/index.mjs.map +1 -0
  198. package/dist/portfolio/index.d.mts +66 -0
  199. package/dist/portfolio/index.d.ts +66 -0
  200. package/dist/portfolio/index.js +736 -0
  201. package/dist/portfolio/index.js.map +1 -0
  202. package/dist/portfolio/index.mjs +724 -0
  203. package/dist/portfolio/index.mjs.map +1 -0
  204. package/dist/qqbot/server/index.d.mts +216 -0
  205. package/dist/qqbot/server/index.d.ts +216 -0
  206. package/dist/qqbot/server/index.js +394 -0
  207. package/dist/qqbot/server/index.js.map +1 -0
  208. package/dist/qqbot/server/index.mjs +385 -0
  209. package/dist/qqbot/server/index.mjs.map +1 -0
  210. package/dist/qqbot/ui/web/index.d.mts +10 -0
  211. package/dist/qqbot/ui/web/index.d.ts +10 -0
  212. package/dist/qqbot/ui/web/index.js +105 -0
  213. package/dist/qqbot/ui/web/index.js.map +1 -0
  214. package/dist/qqbot/ui/web/index.mjs +99 -0
  215. package/dist/qqbot/ui/web/index.mjs.map +1 -0
  216. package/dist/screenReceiver/index.d.mts +86 -0
  217. package/dist/screenReceiver/index.d.ts +86 -0
  218. package/dist/screenReceiver/index.js +281 -0
  219. package/dist/screenReceiver/index.js.map +1 -0
  220. package/dist/screenReceiver/index.mjs +273 -0
  221. package/dist/screenReceiver/index.mjs.map +1 -0
  222. package/dist/testYourself/admin/index.d.mts +58 -0
  223. package/dist/testYourself/admin/index.d.ts +58 -0
  224. package/dist/testYourself/admin/index.js +1009 -0
  225. package/dist/testYourself/admin/index.js.map +1 -0
  226. package/dist/testYourself/admin/index.mjs +1002 -0
  227. package/dist/testYourself/admin/index.mjs.map +1 -0
  228. package/dist/testYourself/index.d.mts +53 -0
  229. package/dist/testYourself/index.d.ts +53 -0
  230. package/dist/testYourself/index.js +2551 -0
  231. package/dist/testYourself/index.js.map +1 -0
  232. package/dist/testYourself/index.mjs +2531 -0
  233. package/dist/testYourself/index.mjs.map +1 -0
  234. package/dist/testYourself/server/index.d.mts +1029 -0
  235. package/dist/testYourself/server/index.d.ts +1029 -0
  236. package/dist/testYourself/server/index.js +825 -0
  237. package/dist/testYourself/server/index.js.map +1 -0
  238. package/dist/testYourself/server/index.mjs +816 -0
  239. package/dist/testYourself/server/index.mjs.map +1 -0
  240. package/dist/types-BTiaMsBz.d.mts +292 -0
  241. package/dist/types-DyG3ZV9V.d.mts +270 -0
  242. package/dist/types-DyG3ZV9V.d.ts +270 -0
  243. package/dist/types-ERmJyjx8.d.ts +292 -0
  244. package/dist/types-HorDyIRv.d.mts +303 -0
  245. package/dist/types-HorDyIRv.d.ts +303 -0
  246. package/dist/vocaloidBooth/index.d.mts +64 -0
  247. package/dist/vocaloidBooth/index.d.ts +64 -0
  248. package/dist/vocaloidBooth/index.js +376 -0
  249. package/dist/vocaloidBooth/index.js.map +1 -0
  250. package/dist/vocaloidBooth/index.mjs +362 -0
  251. package/dist/vocaloidBooth/index.mjs.map +1 -0
  252. package/dist/vocaloidBooth/server/index.d.mts +111 -0
  253. package/dist/vocaloidBooth/server/index.d.ts +111 -0
  254. package/dist/vocaloidBooth/server/index.js +247 -0
  255. package/dist/vocaloidBooth/server/index.js.map +1 -0
  256. package/dist/vocaloidBooth/server/index.mjs +237 -0
  257. package/dist/vocaloidBooth/server/index.mjs.map +1 -0
  258. package/dist/vocaloidBooth/web/index.d.mts +3 -0
  259. package/dist/vocaloidBooth/web/index.d.ts +3 -0
  260. package/dist/vocaloidBooth/web/index.js +376 -0
  261. package/dist/vocaloidBooth/web/index.js.map +1 -0
  262. package/dist/vocaloidBooth/web/index.mjs +362 -0
  263. package/dist/vocaloidBooth/web/index.mjs.map +1 -0
  264. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/testYourself/server/ConfigService.ts","../../../src/testYourself/server/drizzle-schema.ts","../../../src/testYourself/server/DatabaseConfigAdapter.ts"],"names":["index","pgTable","uuid","varchar","text","json","integer","boolean","timestamp","eq","sql","and","or","desc"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 测测你是什么 - 配置管理服务\n * Test Yourself - Configuration Management Service\n * \n * 服务端逻辑:配置的增删改查\n */\n\nimport type { SavedConfig, TestConfig, ConfigListItem } from '../types';\n\nexport interface ConfigServiceOptions {\n /** 存储类型 */\n storageType?: 'localStorage' | 'memory' | 'custom';\n /** 自定义存储适配器 */\n customStorage?: IConfigStorage;\n /** 是否启用缓存 */\n enableCache?: boolean;\n}\n\n/**\n * 配置存储适配器接口\n */\nexport interface IConfigStorage {\n /** 保存配置 */\n saveConfig(config: SavedConfig): Promise<void>;\n /** 获取配置 */\n getConfig(id: string): Promise<SavedConfig | null>;\n /** 获取所有配置列表 */\n getAllConfigs(): Promise<SavedConfig[]>;\n /** 删除配置 */\n deleteConfig(id: string): Promise<void>;\n /** 更新配置 */\n updateConfig(id: string, config: SavedConfig): Promise<void>;\n /** 设置默认配置 */\n setDefaultConfig(id: string): Promise<void>;\n /** 获取默认配置 */\n getDefaultConfig(): Promise<SavedConfig | null>;\n}\n\n/**\n * LocalStorage 存储适配器\n */\nclass LocalStorageAdapter implements IConfigStorage {\n private readonly STORAGE_KEY = 'test-yourself-configs';\n private readonly DEFAULT_KEY = 'test-yourself-default-config';\n\n private async getAllConfigsData(): Promise<SavedConfig[]> {\n if (typeof window === 'undefined') return [];\n \n try {\n const data = localStorage.getItem(this.STORAGE_KEY);\n return data ? JSON.parse(data) : [];\n } catch (error) {\n console.error('读取配置失败:', error);\n return [];\n }\n }\n\n private async saveAllConfigsData(configs: SavedConfig[]): Promise<void> {\n if (typeof window === 'undefined') return;\n \n try {\n localStorage.setItem(this.STORAGE_KEY, JSON.stringify(configs));\n } catch (error) {\n console.error('保存配置失败:', error);\n throw error;\n }\n }\n\n async saveConfig(config: SavedConfig): Promise<void> {\n const configs = await this.getAllConfigsData();\n const existingIndex = configs.findIndex(c => c.id === config.id);\n \n if (existingIndex >= 0) {\n configs[existingIndex] = config;\n } else {\n configs.push(config);\n }\n \n await this.saveAllConfigsData(configs);\n }\n\n async getConfig(id: string): Promise<SavedConfig | null> {\n const configs = await this.getAllConfigsData();\n return configs.find(c => c.id === id) || null;\n }\n\n async getAllConfigs(): Promise<SavedConfig[]> {\n return this.getAllConfigsData();\n }\n\n async deleteConfig(id: string): Promise<void> {\n const configs = await this.getAllConfigsData();\n const filtered = configs.filter(c => c.id !== id);\n await this.saveAllConfigsData(filtered);\n }\n\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n const configs = await this.getAllConfigsData();\n const index = configs.findIndex(c => c.id === id);\n \n if (index >= 0) {\n configs[index] = { ...config, updatedAt: Date.now() };\n await this.saveAllConfigsData(configs);\n } else {\n throw new Error('配置不存在: ' + (id));\n }\n }\n\n async setDefaultConfig(id: string): Promise<void> {\n if (typeof window === 'undefined') return;\n \n const config = await this.getConfig(id);\n if (!config) {\n throw new Error('配置不存在: ' + (id));\n }\n \n // 清除其他配置的默认标记\n const configs = await this.getAllConfigsData();\n configs.forEach(c => c.isDefault = c.id === id);\n await this.saveAllConfigsData(configs);\n \n // 保存默认配置ID\n localStorage.setItem(this.DEFAULT_KEY, id);\n }\n\n async getDefaultConfig(): Promise<SavedConfig | null> {\n if (typeof window === 'undefined') return null;\n \n try {\n const defaultId = localStorage.getItem(this.DEFAULT_KEY);\n if (defaultId) {\n return await this.getConfig(defaultId);\n }\n \n // 如果没有设置默认配置,返回第一个标记为默认的配置\n const configs = await this.getAllConfigsData();\n return configs.find(c => c.isDefault) || null;\n } catch (error) {\n console.error('获取默认配置失败:', error);\n return null;\n }\n }\n}\n\n/**\n * 内存存储适配器(用于测试或SSR)\n */\nclass MemoryStorageAdapter implements IConfigStorage {\n private configs: Map<string, SavedConfig> = new Map();\n private defaultConfigId: string | null = null;\n\n async saveConfig(config: SavedConfig): Promise<void> {\n this.configs.set(config.id, config);\n }\n\n async getConfig(id: string): Promise<SavedConfig | null> {\n return this.configs.get(id) || null;\n }\n\n async getAllConfigs(): Promise<SavedConfig[]> {\n return Array.from(this.configs.values());\n }\n\n async deleteConfig(id: string): Promise<void> {\n this.configs.delete(id);\n if (this.defaultConfigId === id) {\n this.defaultConfigId = null;\n }\n }\n\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n if (!this.configs.has(id)) {\n throw new Error('配置不存在: ' + (id));\n }\n this.configs.set(id, { ...config, updatedAt: Date.now() });\n }\n\n async setDefaultConfig(id: string): Promise<void> {\n if (!this.configs.has(id)) {\n throw new Error('配置不存在: ' + (id));\n }\n \n // 清除其他配置的默认标记\n this.configs.forEach(c => c.isDefault = c.id === id);\n this.defaultConfigId = id;\n }\n\n async getDefaultConfig(): Promise<SavedConfig | null> {\n if (this.defaultConfigId) {\n return this.configs.get(this.defaultConfigId) || null;\n }\n \n // 返回第一个标记为默认的配置\n for (const config of this.configs.values()) {\n if (config.isDefault) {\n return config;\n }\n }\n \n return null;\n }\n}\n\n/**\n * 配置管理服务\n */\nexport class ConfigService {\n private storage: IConfigStorage;\n private cache: Map<string, SavedConfig> = new Map();\n private enableCache: boolean;\n\n constructor(options: ConfigServiceOptions = {}) {\n const {\n storageType = 'localStorage',\n customStorage,\n enableCache = true,\n } = options;\n\n this.enableCache = enableCache;\n\n if (customStorage) {\n this.storage = customStorage;\n } else if (storageType === 'memory') {\n this.storage = new MemoryStorageAdapter();\n } else {\n this.storage = new LocalStorageAdapter();\n }\n }\n\n /**\n * 初始化服务(如果需要)\n */\n async init(): Promise<void> {\n // 基础类不需要初始化,但子类或适配器可能需要\n }\n\n /**\n * 生成唯一ID\n */\n private generateId(): string {\n return 'config_' + (Date.now()) + '_' + (Math.random().toString(36).substring(2, 9));\n }\n\n /**\n * 保存配置\n */\n async saveConfig(config: SavedConfig): Promise<void> {\n await this.storage.saveConfig(config);\n\n if (config.isDefault) {\n await this.storage.setDefaultConfig(config.id);\n }\n\n if (this.enableCache) {\n this.cache.set(config.id, config);\n }\n }\n\n /**\n * 创建新配置\n */\n async createConfig(\n name: string,\n config: TestConfig,\n description?: string,\n isDefault = false\n ): Promise<SavedConfig> {\n const savedConfig: SavedConfig = {\n id: this.generateId(),\n name,\n description,\n config,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault,\n };\n\n await this.storage.saveConfig(savedConfig);\n\n if (isDefault) {\n await this.storage.setDefaultConfig(savedConfig.id);\n }\n\n if (this.enableCache) {\n this.cache.set(savedConfig.id, savedConfig);\n }\n\n return savedConfig;\n }\n\n /**\n * 获取配置\n */\n async getConfig(id: string): Promise<SavedConfig | null> {\n // 先查缓存\n if (this.enableCache && this.cache.has(id)) {\n return this.cache.get(id)!;\n }\n\n const config = await this.storage.getConfig(id);\n\n if (config && this.enableCache) {\n this.cache.set(id, config);\n }\n\n return config;\n }\n\n /**\n * 获取所有配置列表\n */\n async getAllConfigs(): Promise<SavedConfig[]> {\n return await this.storage.getAllConfigs();\n }\n\n /**\n * 获取配置列表(精简版)\n */\n async getConfigList(): Promise<ConfigListItem[]> {\n const configs = await this.getAllConfigs();\n return configs.map(c => ({\n id: c.id,\n name: c.name,\n description: c.description,\n resultCount: c.config.results.length,\n createdAt: c.createdAt,\n updatedAt: c.updatedAt,\n isDefault: c.isDefault,\n }));\n }\n\n /**\n * 更新配置\n */\n async updateConfig(\n id: string,\n updates: {\n name?: string;\n description?: string;\n config?: TestConfig;\n isDefault?: boolean;\n }\n ): Promise<SavedConfig> {\n const existing = await this.getConfig(id);\n if (!existing) {\n throw new Error('配置不存在: ' + (id));\n }\n\n const updated: SavedConfig = {\n ...existing,\n ...updates,\n updatedAt: Date.now(),\n };\n\n await this.storage.updateConfig(id, updated);\n\n if (updates.isDefault) {\n await this.storage.setDefaultConfig(id);\n }\n\n if (this.enableCache) {\n this.cache.set(id, updated);\n }\n\n return updated;\n }\n\n /**\n * 删除配置\n */\n async deleteConfig(id: string): Promise<void> {\n await this.storage.deleteConfig(id);\n\n if (this.enableCache) {\n this.cache.delete(id);\n }\n }\n\n /**\n * 设置默认配置\n */\n async setDefaultConfig(id: string): Promise<void> {\n await this.storage.setDefaultConfig(id);\n\n // 清理缓存,让下次获取时重新加载\n if (this.enableCache) {\n this.cache.clear();\n }\n }\n\n /**\n * 获取默认配置\n */\n async getDefaultConfig(): Promise<SavedConfig | null> {\n return await this.storage.getDefaultConfig();\n }\n\n /**\n * 清空缓存\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * 导出配置(JSON格式)\n */\n async exportConfig(id: string): Promise<string> {\n const config = await this.getConfig(id);\n if (!config) {\n throw new Error('配置不存在: ' + (id));\n }\n return JSON.stringify(config, null, 2);\n }\n\n /**\n * 导入配置\n */\n async importConfig(jsonString: string): Promise<SavedConfig> {\n try {\n const data = JSON.parse(jsonString) as SavedConfig;\n \n // 生成新ID,避免冲突\n const newConfig: SavedConfig = {\n ...data,\n id: this.generateId(),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault: false, // 导入的配置不设为默认\n };\n\n await this.storage.saveConfig(newConfig);\n\n if (this.enableCache) {\n this.cache.set(newConfig.id, newConfig);\n }\n\n return newConfig;\n } catch (error) {\n throw new Error('导入配置失败: ' + (error));\n }\n }\n\n /**\n * 复制配置\n */\n async duplicateConfig(id: string, newName?: string): Promise<SavedConfig> {\n const original = await this.getConfig(id);\n if (!original) {\n throw new Error('配置不存在: ' + (id));\n }\n\n const duplicated: SavedConfig = {\n ...original,\n id: this.generateId(),\n name: newName || (original.name) + ' (副本)',\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault: false,\n };\n\n await this.storage.saveConfig(duplicated);\n\n if (this.enableCache) {\n this.cache.set(duplicated.id, duplicated);\n }\n\n return duplicated;\n }\n\n /**\n * 批量删除配置\n */\n async deleteConfigs(ids: string[]): Promise<void> {\n for (const id of ids) {\n await this.deleteConfig(id);\n }\n }\n}\n\n/**\n * 创建默认配置服务实例\n */\nexport function createConfigService(options?: ConfigServiceOptions): ConfigService {\n return new ConfigService(options);\n}\n\n/**\n * 默认配置服务实例(单例)\n */\nlet defaultServiceInstance: ConfigService | null = null;\n\nexport function getDefaultConfigService(): ConfigService {\n if (!defaultServiceInstance) {\n defaultServiceInstance = createConfigService();\n }\n return defaultServiceInstance;\n}\n\n\n","/**\n * TestYourself 模块数据库表结构定义\n * Database Schema for TestYourself Module\n * \n * 使用 Drizzle ORM 定义配置表\n */\n\nimport {\n pgTable,\n uuid,\n varchar,\n text,\n timestamp,\n boolean,\n json,\n integer,\n index,\n} from 'drizzle-orm/pg-core';\nimport type { TestConfig } from '../types';\n\n/**\n * 测试配置表 (test_yourself_configs)\n * \n * 存储所有测试配置,支持多租户、版本控制等企业级功能\n */\nexport const testYourselfConfigs = pgTable(\n 'test_yourself_configs',\n {\n // ========== 主键 ==========\n /** 配置唯一ID */\n id: uuid('id').primaryKey().defaultRandom(),\n\n // ========== 基本信息 ==========\n /** 配置名称 */\n name: varchar('name', { length: 255 }).notNull(),\n \n /** 配置描述 */\n description: text('description'),\n \n /** 配置标签(用于分类和搜索) */\n tags: json('tags').$type<string[]>().default([]),\n\n // ========== 配置数据 ==========\n /** 测试配置内容(JSON格式) */\n config: json('config').$type<TestConfig>().notNull(),\n \n /** 结果数量(冗余字段,便于查询) */\n resultCount: integer('result_count').notNull().default(0),\n\n // ========== 状态字段 ==========\n /** 是否为默认配置 */\n isDefault: boolean('is_default').notNull().default(false),\n \n /** 是否已发布(草稿/发布) */\n isPublished: boolean('is_published').notNull().default(true),\n \n /** 是否已归档 */\n isArchived: boolean('is_archived').notNull().default(false),\n \n /** 是否已删除(软删除) */\n isDeleted: boolean('is_deleted').notNull().default(false),\n\n // ========== 权限和所有权 ==========\n /** 创建者ID */\n createdBy: varchar('created_by', { length: 255 }).notNull(),\n \n /** 最后更新者ID */\n updatedBy: varchar('updated_by', { length: 255 }),\n \n /** 所属组织/租户ID(多租户支持) */\n organizationId: varchar('organization_id', { length: 255 }),\n\n // ========== 统计信息 ==========\n /** 使用次数 */\n usageCount: integer('usage_count').notNull().default(0),\n \n /** 最后使用时间 */\n lastUsedAt: timestamp('last_used_at'),\n \n /** 浏览次数 */\n viewCount: integer('view_count').notNull().default(0),\n\n // ========== 版本控制 ==========\n /** 配置版本号 */\n version: integer('version').notNull().default(1),\n \n /** 父配置ID(用于版本追踪) */\n parentId: uuid('parent_id'),\n\n // ========== 自定义字段 ==========\n /** 自定义元数据(扩展字段) */\n metadata: json('metadata').$type<Record<string, any>>(),\n \n /** 配置来源(web/api/import) */\n source: varchar('source', { length: 50 }),\n\n // ========== 时间戳 ==========\n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n \n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n \n /** 发布时间 */\n publishedAt: timestamp('published_at'),\n \n /** 归档时间 */\n archivedAt: timestamp('archived_at'),\n \n /** 删除时间 */\n deletedAt: timestamp('deleted_at'),\n },\n (table) => ({\n // ========== 索引设计 ==========\n \n /** 名称搜索索引 */\n nameIndex: index('test_configs_name_idx').on(table.name),\n \n /** 创建者索引 */\n createdByIndex: index('test_configs_created_by_idx').on(table.createdBy),\n \n /** 组织索引(多租户) */\n organizationIndex: index('test_configs_organization_idx').on(table.organizationId),\n \n /** 默认配置索引 */\n isDefaultIndex: index('test_configs_is_default_idx').on(table.isDefault),\n \n /** 发布状态索引 */\n isPublishedIndex: index('test_configs_is_published_idx').on(table.isPublished),\n \n /** 删除状态索引 */\n isDeletedIndex: index('test_configs_is_deleted_idx').on(table.isDeleted),\n \n /** 创建时间索引 */\n createdAtIndex: index('test_configs_created_at_idx').on(table.createdAt),\n \n /** 最后使用时间索引 */\n lastUsedAtIndex: index('test_configs_last_used_at_idx').on(table.lastUsedAt),\n \n /** 组合索引:组织+删除状态+发布状态 */\n orgDeletedPublishedIndex: index('test_configs_org_deleted_published_idx').on(\n table.organizationId,\n table.isDeleted,\n table.isPublished\n ),\n \n /** 组合索引:创建者+删除状态 */\n createdByDeletedIndex: index('test_configs_created_by_deleted_idx').on(\n table.createdBy,\n table.isDeleted\n ),\n })\n);\n\n/**\n * 配置使用记录表 (test_yourself_config_usage)\n * \n * 记录配置的每次使用情况,用于统计分析\n */\nexport const testYourselfConfigUsage = pgTable(\n 'test_yourself_config_usage',\n {\n /** 记录ID */\n id: uuid('id').primaryKey().defaultRandom(),\n \n /** 配置ID */\n configId: uuid('config_id')\n .references(() => testYourselfConfigs.id, { onDelete: 'cascade' })\n .notNull(),\n \n /** 用户ID */\n userId: varchar('user_id', { length: 255 }),\n \n /** 设备指纹 */\n fingerprint: text('fingerprint'),\n \n /** 测试结果ID */\n resultId: varchar('result_id', { length: 255 }),\n \n /** IP地址 */\n ipAddress: varchar('ip_address', { length: 45 }),\n \n /** User Agent */\n userAgent: text('user_agent'),\n \n /** 来源页面 */\n referer: text('referer'),\n \n /** 使用时间 */\n usedAt: timestamp('used_at').defaultNow().notNull(),\n \n /** 完成时间(毫秒) */\n completionTime: integer('completion_time'),\n \n /** 额外数据 */\n metadata: json('metadata').$type<Record<string, any>>(),\n },\n (table) => ({\n /** 配置ID索引 */\n configIndex: index('test_usage_config_idx').on(table.configId),\n \n /** 用户ID索引 */\n userIndex: index('test_usage_user_idx').on(table.userId),\n \n /** 使用时间索引 */\n usedAtIndex: index('test_usage_used_at_idx').on(table.usedAt),\n \n /** 指纹索引 */\n fingerprintIndex: index('test_usage_fingerprint_idx').on(table.fingerprint),\n })\n);\n\n/**\n * 配置分享表 (test_yourself_config_shares)\n * \n * 管理配置的公开分享功能\n */\nexport const testYourselfConfigShares = pgTable(\n 'test_yourself_config_shares',\n {\n /** 分享ID */\n id: uuid('id').primaryKey().defaultRandom(),\n \n /** 分享代码(短链接标识) */\n shareCode: varchar('share_code', { length: 20 }).notNull().unique(),\n \n /** 配置ID */\n configId: uuid('config_id')\n .references(() => testYourselfConfigs.id, { onDelete: 'cascade' })\n .notNull(),\n \n /** 分享标题 */\n title: varchar('title', { length: 255 }),\n \n /** 分享描述 */\n description: text('description'),\n \n /** 访问密码 */\n password: varchar('password', { length: 100 }),\n \n /** 最大访问次数 */\n maxAccess: integer('max_access'),\n \n /** 当前访问次数 */\n accessCount: integer('access_count').notNull().default(0),\n \n /** 是否启用 */\n isActive: boolean('is_active').notNull().default(true),\n \n /** 过期时间 */\n expiresAt: timestamp('expires_at'),\n \n /** 创建者ID */\n createdBy: varchar('created_by', { length: 255 }).notNull(),\n \n /** 创建时间 */\n createdAt: timestamp('created_at').defaultNow().notNull(),\n \n /** 更新时间 */\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n },\n (table) => ({\n /** 分享代码索引 */\n shareCodeIndex: index('test_shares_share_code_idx').on(table.shareCode),\n \n /** 配置ID索引 */\n configIndex: index('test_shares_config_idx').on(table.configId),\n \n /** 创建者索引 */\n createdByIndex: index('test_shares_created_by_idx').on(table.createdBy),\n \n /** 活跃状态索引 */\n isActiveIndex: index('test_shares_is_active_idx').on(table.isActive),\n })\n);\n\n// ========== 类型导出 ==========\n\nexport type TestYourselfConfig = typeof testYourselfConfigs.$inferSelect;\nexport type NewTestYourselfConfig = typeof testYourselfConfigs.$inferInsert;\n\nexport type TestYourselfConfigUsage = typeof testYourselfConfigUsage.$inferSelect;\nexport type NewTestYourselfConfigUsage = typeof testYourselfConfigUsage.$inferInsert;\n\nexport type TestYourselfConfigShare = typeof testYourselfConfigShares.$inferSelect;\nexport type NewTestYourselfConfigShare = typeof testYourselfConfigShares.$inferInsert;\n","/**\n * TestYourself 数据库配置适配器\n * Database Configuration Adapter\n * \n * 实现基于数据库的配置存储\n */\n\nimport { eq, and, desc, sql, or } from 'drizzle-orm';\nimport type { IConfigStorage } from './ConfigService';\nimport type { SavedConfig } from '../types';\nimport { testYourselfConfigs } from './drizzle-schema';\nimport type { TestYourselfConfig } from './drizzle-schema';\n\n/**\n * Drizzle 数据库连接类型\n */\nexport type DrizzleDb = any;\n\n/**\n * 数据库适配器配置\n */\nexport interface DatabaseConfigAdapterOptions {\n /** Drizzle 数据库实例 */\n db: DrizzleDb;\n /** 当前用户ID(用于创建和更新) */\n userId?: string;\n /** 组织ID(多租户支持) */\n organizationId?: string;\n /** 是否启用软删除(默认 true) */\n softDelete?: boolean;\n}\n\n/**\n * 数据库配置适配器\n * \n * 实现 IConfigStorage 接口,将配置存储在数据库中\n */\nexport class DatabaseConfigAdapter implements IConfigStorage {\n private db: DrizzleDb;\n private userId: string;\n private organizationId?: string;\n private softDelete: boolean;\n\n constructor(options: DatabaseConfigAdapterOptions) {\n this.db = options.db;\n this.userId = options.userId || 'system';\n this.organizationId = options.organizationId;\n this.softDelete = options.softDelete !== false;\n }\n\n /**\n * 设置当前用户ID\n */\n setUserId(userId: string): void {\n this.userId = userId;\n }\n\n /**\n * 设置组织ID\n */\n setOrganizationId(organizationId: string): void {\n this.organizationId = organizationId;\n }\n\n /**\n * 将数据库记录转换为 SavedConfig\n */\n private toSavedConfig(dbConfig: TestYourselfConfig): SavedConfig {\n return {\n id: dbConfig.id,\n name: dbConfig.name,\n description: dbConfig.description || undefined,\n config: dbConfig.config,\n createdAt: dbConfig.createdAt.getTime(),\n updatedAt: dbConfig.updatedAt.getTime(),\n isDefault: dbConfig.isDefault,\n };\n }\n\n /**\n * 保存配置\n */\n async saveConfig(config: SavedConfig): Promise<void> {\n try {\n // 检查是否已存在\n const existing = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(eq(testYourselfConfigs.id, config.id))\n .limit(1);\n\n const resultCount = config.config.results?.length || 0;\n\n if (existing && existing.length > 0) {\n // 更新现有配置\n await this.db\n .update(testYourselfConfigs)\n .set({\n name: config.name,\n description: config.description || null,\n config: config.config,\n resultCount,\n isDefault: config.isDefault || false,\n updatedBy: this.userId,\n updatedAt: new Date(),\n version: sql`${testYourselfConfigs.version} + 1`, // 版本号递增\n })\n .where(eq(testYourselfConfigs.id, config.id));\n\n console.log('✅ [DatabaseAdapter] 配置已更新:', config.id);\n } else {\n // 插入新配置\n await this.db.insert(testYourselfConfigs).values({\n id: config.id,\n name: config.name,\n description: config.description || null,\n config: config.config,\n resultCount,\n isDefault: config.isDefault || false,\n createdBy: this.userId,\n organizationId: this.organizationId,\n createdAt: new Date(config.createdAt),\n updatedAt: new Date(config.updatedAt),\n });\n\n console.log('✅ [DatabaseAdapter] 配置已创建:', config.id);\n }\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 保存配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取配置\n */\n async getConfig(id: string): Promise<SavedConfig | null> {\n try {\n const conditions = [eq(testYourselfConfigs.id, id)];\n\n // 如果启用软删除,过滤已删除的记录\n if (this.softDelete) {\n conditions.push(eq(testYourselfConfigs.isDeleted, false));\n }\n\n const result = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(and(...conditions))\n .limit(1);\n\n if (!result || result.length === 0) {\n return null;\n }\n\n return this.toSavedConfig(result[0]);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 获取配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取所有配置列表\n */\n async getAllConfigs(): Promise<SavedConfig[]> {\n try {\n const conditions = [];\n\n // 如果启用软删除,过滤已删除的记录\n if (this.softDelete) {\n conditions.push(eq(testYourselfConfigs.isDeleted, false));\n }\n\n // 如果设置了组织ID,只查询该组织的配置\n if (this.organizationId) {\n conditions.push(\n or(\n eq(testYourselfConfigs.organizationId, this.organizationId),\n sql`${testYourselfConfigs.organizationId} IS NULL` // 包含全局配置\n )\n );\n }\n\n const result = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(conditions.length > 0 ? and(...conditions) : undefined)\n .orderBy(desc(testYourselfConfigs.createdAt));\n\n return result.map((config: TestYourselfConfig) => this.toSavedConfig(config));\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 获取配置列表失败:', error);\n throw error;\n }\n }\n\n /**\n * 删除配置\n */\n async deleteConfig(id: string): Promise<void> {\n try {\n if (this.softDelete) {\n // 软删除\n await this.db\n .update(testYourselfConfigs)\n .set({\n isDeleted: true,\n deletedAt: new Date(),\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('🗑️ [DatabaseAdapter] 配置已软删除:', id);\n } else {\n // 硬删除\n await this.db\n .delete(testYourselfConfigs)\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('🗑️ [DatabaseAdapter] 配置已硬删除:', id);\n }\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 删除配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 更新配置\n */\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n try {\n const resultCount = config.config.results?.length || 0;\n\n await this.db\n .update(testYourselfConfigs)\n .set({\n name: config.name,\n description: config.description || null,\n config: config.config,\n resultCount,\n isDefault: config.isDefault || false,\n updatedBy: this.userId,\n updatedAt: new Date(config.updatedAt),\n version: sql`${testYourselfConfigs.version} + 1`,\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('✅ [DatabaseAdapter] 配置已更新:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 更新配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 设置默认配置\n */\n async setDefaultConfig(id: string): Promise<void> {\n try {\n // 使用事务确保原子性\n await this.db.transaction(async (tx: any) => {\n // 1. 清除所有默认配置标记\n const conditions = [eq(testYourselfConfigs.isDefault, true)];\n \n if (this.organizationId) {\n conditions.push(\n eq(testYourselfConfigs.organizationId, this.organizationId)\n );\n }\n\n await tx\n .update(testYourselfConfigs)\n .set({\n isDefault: false,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(and(...conditions));\n\n // 2. 设置新的默认配置\n await tx\n .update(testYourselfConfigs)\n .set({\n isDefault: true,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n });\n\n console.log('✅ [DatabaseAdapter] 默认配置已设置:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 设置默认配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取默认配置\n */\n async getDefaultConfig(): Promise<SavedConfig | null> {\n try {\n const conditions = [eq(testYourselfConfigs.isDefault, true)];\n\n // 如果启用软删除,过滤已删除的记录\n if (this.softDelete) {\n conditions.push(eq(testYourselfConfigs.isDeleted, false));\n }\n\n // 如果设置了组织ID,只查询该组织的配置\n if (this.organizationId) {\n conditions.push(\n eq(testYourselfConfigs.organizationId, this.organizationId)\n );\n }\n\n const result = await this.db\n .select()\n .from(testYourselfConfigs)\n .where(and(...conditions))\n .limit(1);\n\n if (!result || result.length === 0) {\n return null;\n }\n\n return this.toSavedConfig(result[0]);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 获取默认配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 恢复已删除的配置(软删除时可用)\n */\n async restoreConfig(id: string): Promise<void> {\n if (!this.softDelete) {\n throw new Error('恢复功能仅在启用软删除时可用');\n }\n\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n isDeleted: false,\n deletedAt: null,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('♻️ [DatabaseAdapter] 配置已恢复:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 恢复配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 归档配置\n */\n async archiveConfig(id: string): Promise<void> {\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n isArchived: true,\n archivedAt: new Date(),\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('📦 [DatabaseAdapter] 配置已归档:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 归档配置失败:', error);\n throw error;\n }\n }\n\n /**\n * 取消归档\n */\n async unarchiveConfig(id: string): Promise<void> {\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n isArchived: false,\n archivedAt: null,\n updatedBy: this.userId,\n updatedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n\n console.log('📂 [DatabaseAdapter] 配置已取消归档:', id);\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 取消归档失败:', error);\n throw error;\n }\n }\n\n /**\n * 记录使用次数\n */\n async incrementUsageCount(id: string): Promise<void> {\n try {\n await this.db\n .update(testYourselfConfigs)\n .set({\n usageCount: sql`${testYourselfConfigs.usageCount} + 1`,\n lastUsedAt: new Date(),\n })\n .where(eq(testYourselfConfigs.id, id));\n } catch (error) {\n console.error('❌ [DatabaseAdapter] 更新使用次数失败:', error);\n // 不抛出错误,避免影响主流程\n }\n }\n}\n\n/**\n * 创建数据库配置适配器\n * \n * @example\n * ```typescript\n * import { drizzle } from 'drizzle-orm/postgres-js';\n * import { createDatabaseConfigAdapter } from './DatabaseConfigAdapter';\n * \n * const db = drizzle(connection);\n * const adapter = createDatabaseConfigAdapter({\n * db,\n * userId: 'user-123',\n * organizationId: 'org-456',\n * });\n * \n * // 在 ConfigService 中使用\n * const configService = new ConfigService({\n * storageType: 'custom',\n * customStorage: adapter,\n * });\n * ```\n */\nexport function createDatabaseConfigAdapter(\n options: DatabaseConfigAdapterOptions\n): DatabaseConfigAdapter {\n return new DatabaseConfigAdapter(options);\n}\n"]}