sa2kit 1.6.59 → 1.6.62

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 (335) hide show
  1. package/dist/UniversalFileService-C3WQAFOV.js +15 -0
  2. package/dist/{UniversalFileService-J6ET6KZK.js.map → UniversalFileService-C3WQAFOV.js.map} +1 -1
  3. package/dist/UniversalFileService-O3IEROBN.mjs +6 -0
  4. package/dist/{UniversalFileService-336GFY6N.mjs.map → UniversalFileService-O3IEROBN.mjs.map} +1 -1
  5. package/dist/ai/llm/index.d.mts +70 -0
  6. package/dist/ai/llm/index.d.ts +70 -0
  7. package/dist/ai/llm/index.js +54 -0
  8. package/dist/ai/llm/index.js.map +1 -0
  9. package/dist/ai/llm/index.mjs +5 -0
  10. package/dist/ai/llm/index.mjs.map +1 -0
  11. package/dist/ai/llm/ui/electron/index.d.mts +5 -0
  12. package/dist/ai/llm/ui/electron/index.d.ts +5 -0
  13. package/dist/ai/llm/ui/electron/index.js +21 -0
  14. package/dist/ai/llm/ui/electron/index.js.map +1 -0
  15. package/dist/ai/llm/ui/electron/index.mjs +8 -0
  16. package/dist/ai/llm/ui/electron/index.mjs.map +1 -0
  17. package/dist/ai/llm/ui/miniapp/index.d.mts +9 -0
  18. package/dist/ai/llm/ui/miniapp/index.d.ts +9 -0
  19. package/dist/ai/llm/ui/miniapp/index.js +107 -0
  20. package/dist/ai/llm/ui/miniapp/index.js.map +1 -0
  21. package/dist/ai/llm/ui/miniapp/index.mjs +101 -0
  22. package/dist/ai/llm/ui/miniapp/index.mjs.map +1 -0
  23. package/dist/ai/llm/ui/rn/index.d.mts +9 -0
  24. package/dist/ai/llm/ui/rn/index.d.ts +9 -0
  25. package/dist/ai/llm/ui/rn/index.js +249 -0
  26. package/dist/ai/llm/ui/rn/index.js.map +1 -0
  27. package/dist/ai/llm/ui/rn/index.mjs +243 -0
  28. package/dist/ai/llm/ui/rn/index.mjs.map +1 -0
  29. package/dist/ai/llm/ui/web/index.d.mts +15 -0
  30. package/dist/ai/llm/ui/web/index.d.ts +15 -0
  31. package/dist/ai/llm/ui/web/index.js +21 -0
  32. package/dist/ai/llm/ui/web/index.js.map +1 -0
  33. package/dist/ai/llm/ui/web/index.mjs +8 -0
  34. package/dist/ai/llm/ui/web/index.mjs.map +1 -0
  35. package/dist/ar/index.d.mts +7 -0
  36. package/dist/ar/index.d.ts +7 -0
  37. package/dist/ar/index.js +17 -0
  38. package/dist/ar/index.js.map +1 -0
  39. package/dist/ar/index.mjs +4 -0
  40. package/dist/ar/index.mjs.map +1 -0
  41. package/dist/auth/index.js +22 -22
  42. package/dist/auth/index.mjs +2 -2
  43. package/dist/auth/legacy/db/index.d.mts +5 -0
  44. package/dist/auth/legacy/db/index.d.ts +5 -0
  45. package/dist/auth/legacy/db/index.js +34 -0
  46. package/dist/auth/legacy/db/index.js.map +1 -0
  47. package/dist/auth/legacy/db/index.mjs +5 -0
  48. package/dist/auth/legacy/db/index.mjs.map +1 -0
  49. package/dist/auth/legacy/index.d.mts +51 -0
  50. package/dist/auth/legacy/index.d.ts +51 -0
  51. package/dist/auth/legacy/index.js +146 -0
  52. package/dist/auth/legacy/index.js.map +1 -0
  53. package/dist/auth/legacy/index.mjs +13 -0
  54. package/dist/auth/legacy/index.mjs.map +1 -0
  55. package/dist/auth/legacy/logic/index.d.mts +9 -0
  56. package/dist/auth/legacy/logic/index.d.ts +9 -0
  57. package/dist/auth/legacy/logic/index.js +18 -0
  58. package/dist/auth/legacy/logic/index.js.map +1 -0
  59. package/dist/auth/legacy/logic/index.mjs +5 -0
  60. package/dist/auth/legacy/logic/index.mjs.map +1 -0
  61. package/dist/auth/legacy/routes/index.d.mts +50 -0
  62. package/dist/auth/legacy/routes/index.d.ts +50 -0
  63. package/dist/auth/legacy/routes/index.js +34 -0
  64. package/dist/auth/legacy/routes/index.js.map +1 -0
  65. package/dist/auth/legacy/routes/index.mjs +5 -0
  66. package/dist/auth/legacy/routes/index.mjs.map +1 -0
  67. package/dist/auth/legacy/schema/index.d.mts +401 -0
  68. package/dist/auth/legacy/schema/index.d.ts +401 -0
  69. package/dist/auth/legacy/schema/index.js +29 -0
  70. package/dist/auth/legacy/schema/index.js.map +1 -0
  71. package/dist/auth/legacy/schema/index.mjs +4 -0
  72. package/dist/auth/legacy/schema/index.mjs.map +1 -0
  73. package/dist/auth/legacy/server/index.d.mts +15 -0
  74. package/dist/auth/legacy/server/index.d.ts +15 -0
  75. package/dist/auth/legacy/server/index.js +65 -0
  76. package/dist/auth/legacy/server/index.js.map +1 -0
  77. package/dist/auth/legacy/server/index.mjs +8 -0
  78. package/dist/auth/legacy/server/index.mjs.map +1 -0
  79. package/dist/auth/legacy/services/index.d.mts +40 -0
  80. package/dist/auth/legacy/services/index.d.ts +40 -0
  81. package/dist/auth/legacy/services/index.js +14 -0
  82. package/dist/auth/legacy/services/index.js.map +1 -0
  83. package/dist/auth/legacy/services/index.mjs +5 -0
  84. package/dist/auth/legacy/services/index.mjs.map +1 -0
  85. package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
  86. package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
  87. package/dist/auth/legacy/ui/miniapp/index.js +23 -0
  88. package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
  89. package/dist/auth/legacy/ui/miniapp/index.mjs +6 -0
  90. package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
  91. package/dist/auth/legacy/ui/web/index.d.mts +22 -0
  92. package/dist/auth/legacy/ui/web/index.d.ts +22 -0
  93. package/dist/auth/legacy/ui/web/index.js +31 -0
  94. package/dist/auth/legacy/ui/web/index.js.map +1 -0
  95. package/dist/auth/legacy/ui/web/index.mjs +6 -0
  96. package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
  97. package/dist/booking-B0BM8grt.d.mts +141 -0
  98. package/dist/booking-CUy8u7Za.d.ts +141 -0
  99. package/dist/{bookingAdminService-Dmg7dC6V.d.mts → bookingAdminService-BNEDyw7U.d.mts} +1 -1
  100. package/dist/{bookingAdminService-B2QDjSHJ.d.ts → bookingAdminService-BtOtG96L.d.ts} +1 -1
  101. package/dist/calendar/index.d.mts +390 -237
  102. package/dist/calendar/index.d.ts +390 -237
  103. package/dist/calendar/index.js +3825 -3785
  104. package/dist/calendar/index.js.map +1 -1
  105. package/dist/calendar/index.mjs +3730 -3696
  106. package/dist/calendar/index.mjs.map +1 -1
  107. package/dist/calendar/routes/index.js +30 -327
  108. package/dist/calendar/routes/index.js.map +1 -1
  109. package/dist/calendar/routes/index.mjs +1 -323
  110. package/dist/calendar/routes/index.mjs.map +1 -1
  111. package/dist/calendar/server.d.mts +6 -0
  112. package/dist/calendar/server.d.ts +6 -0
  113. package/dist/calendar/server.js +41 -13
  114. package/dist/calendar/server.js.map +1 -1
  115. package/dist/calendar/server.mjs +2 -2
  116. package/dist/calendar/server.mjs.map +1 -1
  117. package/dist/{cart-D3o67Q3H.d.ts → cart-Cw3i0Dy6.d.ts} +1 -1
  118. package/dist/{cart-CcZ7rQyG.d.mts → cart-DLSbsihH.d.mts} +1 -1
  119. package/dist/chunk-24F7KUED.js +263 -0
  120. package/dist/chunk-24F7KUED.js.map +1 -0
  121. package/dist/{chunk-YMS6BPXS.js → chunk-27IUMDDK.js} +3 -3
  122. package/dist/{chunk-YMS6BPXS.js.map → chunk-27IUMDDK.js.map} +1 -1
  123. package/dist/chunk-37M6NZIF.js +279 -0
  124. package/dist/chunk-37M6NZIF.js.map +1 -0
  125. package/dist/chunk-3JMUNOUT.js +144 -0
  126. package/dist/chunk-3JMUNOUT.js.map +1 -0
  127. package/dist/chunk-3PFCOTJP.mjs +256 -0
  128. package/dist/chunk-3PFCOTJP.mjs.map +1 -0
  129. package/dist/{chunk-SKCMZYSQ.js → chunk-3YSRTVIY.js} +31 -15
  130. package/dist/chunk-3YSRTVIY.js.map +1 -0
  131. package/dist/{chunk-NZZZUMMX.mjs → chunk-57MVE5LL.mjs} +3 -3
  132. package/dist/{chunk-NZZZUMMX.mjs.map → chunk-57MVE5LL.mjs.map} +1 -1
  133. package/dist/{chunk-622Y6LTH.mjs → chunk-5BLZEVWK.mjs} +196 -468
  134. package/dist/chunk-5BLZEVWK.mjs.map +1 -0
  135. package/dist/{chunk-UVHPCLP6.js → chunk-5LCGOCKG.js} +5 -5
  136. package/dist/{chunk-UVHPCLP6.js.map → chunk-5LCGOCKG.js.map} +1 -1
  137. package/dist/chunk-6XUQ2B4K.js +219 -0
  138. package/dist/chunk-6XUQ2B4K.js.map +1 -0
  139. package/dist/{chunk-NCOXT7SK.js → chunk-77UEPWVQ.js} +4 -4
  140. package/dist/{chunk-NCOXT7SK.js.map → chunk-77UEPWVQ.js.map} +1 -1
  141. package/dist/chunk-C76U5FF4.mjs +10 -0
  142. package/dist/chunk-C76U5FF4.mjs.map +1 -0
  143. package/dist/chunk-CFM56MGO.mjs +35 -0
  144. package/dist/chunk-CFM56MGO.mjs.map +1 -0
  145. package/dist/{chunk-LJGJPAQ4.js → chunk-COOI6MT3.js} +2 -11
  146. package/dist/chunk-COOI6MT3.js.map +1 -0
  147. package/dist/chunk-CPSFYP34.mjs +140 -0
  148. package/dist/chunk-CPSFYP34.mjs.map +1 -0
  149. package/dist/chunk-D22QBOCM.mjs +336 -0
  150. package/dist/chunk-D22QBOCM.mjs.map +1 -0
  151. package/dist/chunk-DA4QV64P.mjs +35 -0
  152. package/dist/chunk-DA4QV64P.mjs.map +1 -0
  153. package/dist/{chunk-FVDPGX6A.mjs → chunk-DWJLOHAE.mjs} +2 -11
  154. package/dist/chunk-DWJLOHAE.mjs.map +1 -0
  155. package/dist/chunk-EKDLZND6.js +275 -0
  156. package/dist/chunk-EKDLZND6.js.map +1 -0
  157. package/dist/chunk-EKQPFZXQ.js +12 -0
  158. package/dist/chunk-EKQPFZXQ.js.map +1 -0
  159. package/dist/chunk-ERAAB5VG.js +324 -0
  160. package/dist/chunk-ERAAB5VG.js.map +1 -0
  161. package/dist/chunk-ESLY72VI.mjs +175 -0
  162. package/dist/chunk-ESLY72VI.mjs.map +1 -0
  163. package/dist/chunk-FGQGWW73.js +38 -0
  164. package/dist/chunk-FGQGWW73.js.map +1 -0
  165. package/dist/chunk-FXQOXLDE.js +120 -0
  166. package/dist/chunk-FXQOXLDE.js.map +1 -0
  167. package/dist/chunk-FZELCJR7.mjs +19 -0
  168. package/dist/chunk-FZELCJR7.mjs.map +1 -0
  169. package/dist/{chunk-HHVDOIPV.js → chunk-H3P2PGZL.js} +3 -3
  170. package/dist/{chunk-HHVDOIPV.js.map → chunk-H3P2PGZL.js.map} +1 -1
  171. package/dist/chunk-HBQMN5QM.mjs +10 -0
  172. package/dist/chunk-HBQMN5QM.mjs.map +1 -0
  173. package/dist/chunk-ITRIXMXF.mjs +862 -0
  174. package/dist/chunk-ITRIXMXF.mjs.map +1 -0
  175. package/dist/chunk-IUWSCUDC.js +4 -0
  176. package/dist/chunk-IUWSCUDC.js.map +1 -0
  177. package/dist/chunk-JCKCKRC2.js +50 -0
  178. package/dist/chunk-JCKCKRC2.js.map +1 -0
  179. package/dist/chunk-L7GQNY54.mjs +286 -0
  180. package/dist/chunk-L7GQNY54.mjs.map +1 -0
  181. package/dist/{chunk-ZRWED7Q6.js → chunk-LDVJ7URJ.js} +235 -520
  182. package/dist/chunk-LDVJ7URJ.js.map +1 -0
  183. package/dist/{chunk-WK3HTUID.js → chunk-MLP74E3O.js} +609 -1643
  184. package/dist/chunk-MLP74E3O.js.map +1 -0
  185. package/dist/chunk-NAX4TUT7.js +182 -0
  186. package/dist/chunk-NAX4TUT7.js.map +1 -0
  187. package/dist/chunk-NW4EN4YI.mjs +213 -0
  188. package/dist/chunk-NW4EN4YI.mjs.map +1 -0
  189. package/dist/{chunk-7CMGQX3S.mjs → chunk-OX6VMQDU.mjs} +14 -13
  190. package/dist/chunk-OX6VMQDU.mjs.map +1 -0
  191. package/dist/chunk-P3QMT3AY.mjs +44 -0
  192. package/dist/chunk-P3QMT3AY.mjs.map +1 -0
  193. package/dist/chunk-PJ4KYAQZ.mjs +631 -0
  194. package/dist/chunk-PJ4KYAQZ.mjs.map +1 -0
  195. package/dist/chunk-PLSEAREM.js +345 -0
  196. package/dist/chunk-PLSEAREM.js.map +1 -0
  197. package/dist/{chunk-EGJPS7OL.mjs → chunk-QZU4UJZG.mjs} +3 -3
  198. package/dist/{chunk-EGJPS7OL.mjs.map → chunk-QZU4UJZG.mjs.map} +1 -1
  199. package/dist/chunk-RJVR33ME.mjs +3 -0
  200. package/dist/chunk-RJVR33ME.mjs.map +1 -0
  201. package/dist/chunk-SYBHDB2D.js +650 -0
  202. package/dist/chunk-SYBHDB2D.js.map +1 -0
  203. package/dist/chunk-TVKVM7JT.js +21 -0
  204. package/dist/chunk-TVKVM7JT.js.map +1 -0
  205. package/dist/{chunk-UZB4IO3T.mjs → chunk-UTB72ZJ7.mjs} +415 -1449
  206. package/dist/chunk-UTB72ZJ7.mjs.map +1 -0
  207. package/dist/chunk-V5HE6IYN.js +12 -0
  208. package/dist/chunk-V5HE6IYN.js.map +1 -0
  209. package/dist/chunk-V7EVKD5G.mjs +116 -0
  210. package/dist/chunk-V7EVKD5G.mjs.map +1 -0
  211. package/dist/chunk-VGPR3KLR.js +872 -0
  212. package/dist/chunk-VGPR3KLR.js.map +1 -0
  213. package/dist/chunk-VS7WATQD.js +255 -0
  214. package/dist/chunk-VS7WATQD.js.map +1 -0
  215. package/dist/chunk-VSP7XJT5.mjs +272 -0
  216. package/dist/chunk-VSP7XJT5.mjs.map +1 -0
  217. package/dist/{chunk-SNBILYSH.mjs → chunk-VTKAIOP5.mjs} +5 -5
  218. package/dist/{chunk-SNBILYSH.mjs.map → chunk-VTKAIOP5.mjs.map} +1 -1
  219. package/dist/chunk-VULJUXTF.mjs +267 -0
  220. package/dist/chunk-VULJUXTF.mjs.map +1 -0
  221. package/dist/chunk-XAHM6B3V.js +44 -0
  222. package/dist/chunk-XAHM6B3V.js.map +1 -0
  223. package/dist/chunk-YSF5YISM.mjs +248 -0
  224. package/dist/chunk-YSF5YISM.mjs.map +1 -0
  225. package/dist/{chunk-OFYBMMWT.mjs → chunk-YYJEVAJI.mjs} +3 -3
  226. package/dist/{chunk-OFYBMMWT.mjs.map → chunk-YYJEVAJI.mjs.map} +1 -1
  227. package/dist/components/index.d.mts +1 -0
  228. package/dist/components/index.d.ts +1 -0
  229. package/dist/components/index.js +182 -181
  230. package/dist/components/index.mjs +4 -3
  231. package/dist/{booking-BXtkG2ns.d.mts → index-Bi666jIm.d.mts} +1 -139
  232. package/dist/{booking-BXtkG2ns.d.ts → index-Bi666jIm.d.ts} +1 -139
  233. package/dist/index-DNKZ7-R_.d.mts +184 -0
  234. package/dist/index-DNKZ7-R_.d.ts +184 -0
  235. package/dist/index.d.mts +4 -1
  236. package/dist/index.d.ts +4 -1
  237. package/dist/index.js +285 -229
  238. package/dist/index.js.map +1 -1
  239. package/dist/index.mjs +15 -10
  240. package/dist/index.mjs.map +1 -1
  241. package/dist/mikuFusionGame/index.js +3 -3
  242. package/dist/mikuFusionGame/index.mjs +2 -2
  243. package/dist/mmd/index.d.mts +67 -9
  244. package/dist/mmd/index.d.ts +67 -9
  245. package/dist/mmd/index.js +969 -625
  246. package/dist/mmd/index.js.map +1 -1
  247. package/dist/mmd/index.mjs +969 -628
  248. package/dist/mmd/index.mjs.map +1 -1
  249. package/dist/portfolio/index.js +10 -9
  250. package/dist/portfolio/index.mjs +5 -4
  251. package/dist/qqbot/index.d.mts +2 -0
  252. package/dist/qqbot/index.d.ts +2 -0
  253. package/dist/qqbot/index.js +21 -0
  254. package/dist/qqbot/index.js.map +1 -0
  255. package/dist/qqbot/index.mjs +4 -0
  256. package/dist/qqbot/index.mjs.map +1 -0
  257. package/dist/qqbot/server/index.d.mts +91 -0
  258. package/dist/qqbot/server/index.d.ts +91 -0
  259. package/dist/qqbot/server/index.js +21 -0
  260. package/dist/qqbot/server/index.js.map +1 -0
  261. package/dist/qqbot/server/index.mjs +4 -0
  262. package/dist/qqbot/server/index.mjs.map +1 -0
  263. package/dist/qqbot/ui/web/index.d.mts +10 -0
  264. package/dist/qqbot/ui/web/index.d.ts +10 -0
  265. package/dist/qqbot/ui/web/index.js +105 -0
  266. package/dist/qqbot/ui/web/index.js.map +1 -0
  267. package/dist/qqbot/ui/web/index.mjs +99 -0
  268. package/dist/qqbot/ui/web/index.mjs.map +1 -0
  269. package/dist/screenReceiver/index.d.mts +78 -0
  270. package/dist/screenReceiver/index.d.ts +78 -0
  271. package/dist/screenReceiver/index.js +17 -0
  272. package/dist/screenReceiver/index.js.map +1 -0
  273. package/dist/screenReceiver/index.mjs +4 -0
  274. package/dist/screenReceiver/index.mjs.map +1 -0
  275. package/dist/screenReceiver/server/index.d.mts +36 -0
  276. package/dist/screenReceiver/server/index.d.ts +36 -0
  277. package/dist/screenReceiver/server/index.js +160 -0
  278. package/dist/screenReceiver/server/index.js.map +1 -0
  279. package/dist/screenReceiver/server/index.mjs +157 -0
  280. package/dist/screenReceiver/server/index.mjs.map +1 -0
  281. package/dist/showmasterpiece/db/index.js +42 -42
  282. package/dist/showmasterpiece/db/index.mjs +1 -1
  283. package/dist/showmasterpiece/index.d.mts +8 -6
  284. package/dist/showmasterpiece/index.d.ts +8 -6
  285. package/dist/showmasterpiece/index.js +142 -130
  286. package/dist/showmasterpiece/index.js.map +1 -1
  287. package/dist/showmasterpiece/index.mjs +18 -6
  288. package/dist/showmasterpiece/index.mjs.map +1 -1
  289. package/dist/showmasterpiece/logic/index.d.mts +9 -17
  290. package/dist/showmasterpiece/logic/index.d.ts +9 -17
  291. package/dist/showmasterpiece/logic/index.js +35 -34
  292. package/dist/showmasterpiece/logic/index.mjs +3 -2
  293. package/dist/showmasterpiece/logic/miniapp/index.d.mts +15 -0
  294. package/dist/showmasterpiece/logic/miniapp/index.d.ts +15 -0
  295. package/dist/showmasterpiece/logic/miniapp/index.js +42 -0
  296. package/dist/showmasterpiece/logic/miniapp/index.js.map +1 -0
  297. package/dist/showmasterpiece/logic/miniapp/index.mjs +5 -0
  298. package/dist/showmasterpiece/logic/miniapp/index.mjs.map +1 -0
  299. package/dist/showmasterpiece/server/index.js +42 -42
  300. package/dist/showmasterpiece/server/index.mjs +1 -1
  301. package/dist/showmasterpiece/ui/miniapp/index.d.mts +5 -2
  302. package/dist/showmasterpiece/ui/miniapp/index.d.ts +5 -2
  303. package/dist/showmasterpiece/ui/miniapp/index.js +83 -55
  304. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
  305. package/dist/showmasterpiece/ui/miniapp/index.mjs +83 -55
  306. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
  307. package/dist/showmasterpiece/ui/web/index.d.mts +3 -2
  308. package/dist/showmasterpiece/ui/web/index.d.ts +3 -2
  309. package/dist/showmasterpiece/ui/web/index.js +44 -33
  310. package/dist/showmasterpiece/ui/web/index.mjs +16 -5
  311. package/dist/testYourself/index.js +13 -13
  312. package/dist/testYourself/index.mjs +2 -2
  313. package/dist/types-B-hOccQw.d.mts +122 -0
  314. package/dist/types-B8rGXc4e.d.mts +38 -0
  315. package/dist/types-Cg89HGz2.d.ts +38 -0
  316. package/dist/types-CvKvpyN8.d.mts +48 -0
  317. package/dist/types-CvKvpyN8.d.ts +48 -0
  318. package/dist/types-Dy6x2gJW.d.ts +122 -0
  319. package/dist/universalFile/server/index.js +11 -11
  320. package/dist/universalFile/server/index.mjs +4 -4
  321. package/package.json +106 -1
  322. package/dist/UniversalFileService-336GFY6N.mjs +0 -6
  323. package/dist/UniversalFileService-J6ET6KZK.js +0 -15
  324. package/dist/chunk-622Y6LTH.mjs.map +0 -1
  325. package/dist/chunk-7CMGQX3S.mjs.map +0 -1
  326. package/dist/chunk-FVDPGX6A.mjs.map +0 -1
  327. package/dist/chunk-GVVS4IMM.mjs +0 -302
  328. package/dist/chunk-GVVS4IMM.mjs.map +0 -1
  329. package/dist/chunk-LJGJPAQ4.js.map +0 -1
  330. package/dist/chunk-SKCMZYSQ.js.map +0 -1
  331. package/dist/chunk-UZB4IO3T.mjs.map +0 -1
  332. package/dist/chunk-WC5QFO3T.js +0 -314
  333. package/dist/chunk-WC5QFO3T.js.map +0 -1
  334. package/dist/chunk-WK3HTUID.js.map +0 -1
  335. package/dist/chunk-ZRWED7Q6.js.map +0 -1
@@ -1,314 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkSVWQN2LR_js = require('./chunk-SVWQN2LR.js');
4
- var pgCore = require('drizzle-orm/pg-core');
5
- var drizzleOrm = require('drizzle-orm');
6
-
7
- var calendarEvents = pgCore.pgTable("calendar_events", {
8
- id: pgCore.serial("id").primaryKey(),
9
- title: pgCore.varchar("title", { length: 255 }).notNull(),
10
- description: pgCore.text("description"),
11
- startTime: pgCore.timestamp("start_time").notNull(),
12
- endTime: pgCore.timestamp("end_time").notNull(),
13
- allDay: pgCore.boolean("all_day").notNull().default(false),
14
- location: pgCore.varchar("location", { length: 500 }),
15
- color: pgCore.varchar("color", { length: 7 }).notNull().default("#3B82F6"),
16
- // 十六进制颜色值
17
- priority: pgCore.varchar("priority", { length: 10 }).notNull().default("normal"),
18
- // low, normal, high, urgent
19
- userId: pgCore.integer("user_id").notNull().references(() => chunkSVWQN2LR_js.user.id, { onDelete: "cascade" }),
20
- createdAt: pgCore.timestamp("created_at").defaultNow().notNull(),
21
- updatedAt: pgCore.timestamp("updated_at").defaultNow().notNull()
22
- });
23
- var recurrenceRules = pgCore.pgTable("recurrence_rules", {
24
- id: pgCore.serial("id").primaryKey(),
25
- eventId: pgCore.integer("event_id").notNull().references(() => calendarEvents.id, { onDelete: "cascade" }),
26
- ruleType: pgCore.varchar("rule_type", { length: 20 }).notNull(),
27
- // daily, weekly, monthly, yearly, custom
28
- interval: pgCore.integer("interval").notNull().default(1),
29
- // 间隔
30
- endDate: pgCore.timestamp("end_date"),
31
- // 结束日期
32
- count: pgCore.integer("count"),
33
- // 重复次数
34
- byWeekday: pgCore.json("by_weekday").$type(),
35
- // 周几重复 [0,1,2,3,4,5,6],0=周日
36
- byMonthday: pgCore.json("by_monthday").$type(),
37
- // 月中的第几天 [1,2,...,31]
38
- byMonth: pgCore.json("by_month").$type(),
39
- // 第几月 [1,2,...,12]
40
- createdAt: pgCore.timestamp("created_at").defaultNow().notNull()
41
- });
42
- var reminders = pgCore.pgTable("reminders", {
43
- id: pgCore.serial("id").primaryKey(),
44
- eventId: pgCore.integer("event_id").notNull().references(() => calendarEvents.id, { onDelete: "cascade" }),
45
- reminderTime: pgCore.timestamp("reminder_time").notNull(),
46
- // 提醒时间
47
- reminderType: pgCore.varchar("reminder_type", { length: 20 }).notNull(),
48
- // notification, email, sms
49
- status: pgCore.varchar("status", { length: 20 }).notNull().default("pending"),
50
- // pending, sent, failed
51
- createdAt: pgCore.timestamp("created_at").defaultNow().notNull(),
52
- updatedAt: pgCore.timestamp("updated_at").defaultNow().notNull()
53
- });
54
- var calendarConfigs = pgCore.pgTable("calendar_configs", {
55
- id: pgCore.serial("id").primaryKey(),
56
- userId: pgCore.integer("user_id").notNull().references(() => chunkSVWQN2LR_js.user.id, { onDelete: "cascade" }).unique(),
57
- firstDayOfWeek: pgCore.integer("first_day_of_week").notNull().default(1),
58
- // 0=周日, 1=周一
59
- workingHoursStart: pgCore.varchar("working_hours_start", { length: 5 }).notNull().default("09:00"),
60
- workingHoursEnd: pgCore.varchar("working_hours_end", { length: 5 }).notNull().default("18:00"),
61
- timeZone: pgCore.varchar("time_zone", { length: 50 }).notNull().default("Asia/Shanghai"),
62
- dateFormat: pgCore.varchar("date_format", { length: 20 }).notNull().default("YYYY-MM-DD"),
63
- timeFormat: pgCore.varchar("time_format", { length: 20 }).notNull().default("HH:mm"),
64
- defaultView: pgCore.varchar("default_view", { length: 20 }).notNull().default("month"),
65
- // month, week, day, agenda
66
- defaultEventColor: pgCore.varchar("default_event_color", { length: 7 }).notNull().default("#3B82F6"),
67
- weekends: pgCore.boolean("weekends").notNull().default(true),
68
- eventColors: pgCore.json("event_colors").$type().default({
69
- blue: "#3B82F6",
70
- green: "#10B981",
71
- purple: "#8B5CF6",
72
- red: "#EF4444",
73
- yellow: "#F59E0B",
74
- pink: "#EC4899",
75
- indigo: "#6366F1",
76
- gray: "#6B7280"
77
- }),
78
- createdAt: pgCore.timestamp("created_at").defaultNow().notNull(),
79
- updatedAt: pgCore.timestamp("updated_at").defaultNow().notNull()
80
- });
81
- var eventShares = pgCore.pgTable("event_shares", {
82
- id: pgCore.serial("id").primaryKey(),
83
- eventId: pgCore.integer("event_id").notNull().references(() => calendarEvents.id, { onDelete: "cascade" }),
84
- sharedWithUserId: pgCore.integer("shared_with_user_id").notNull().references(() => chunkSVWQN2LR_js.user.id, { onDelete: "cascade" }),
85
- sharedByUserId: pgCore.integer("shared_by_user_id").notNull().references(() => chunkSVWQN2LR_js.user.id, { onDelete: "cascade" }),
86
- permission: pgCore.varchar("permission", { length: 20 }).notNull().default("read"),
87
- // read, write
88
- createdAt: pgCore.timestamp("created_at").defaultNow().notNull()
89
- });
90
- var calendarEventsRelations = drizzleOrm.relations(calendarEvents, ({ one, many }) => ({
91
- user: one(chunkSVWQN2LR_js.user, {
92
- fields: [calendarEvents.userId],
93
- references: [chunkSVWQN2LR_js.user.id]
94
- }),
95
- recurrenceRule: one(recurrenceRules, {
96
- fields: [calendarEvents.id],
97
- references: [recurrenceRules.eventId]
98
- }),
99
- reminders: many(reminders),
100
- shares: many(eventShares)
101
- }));
102
- var recurrenceRulesRelations = drizzleOrm.relations(recurrenceRules, ({ one }) => ({
103
- event: one(calendarEvents, {
104
- fields: [recurrenceRules.eventId],
105
- references: [calendarEvents.id]
106
- })
107
- }));
108
- var remindersRelations = drizzleOrm.relations(reminders, ({ one }) => ({
109
- event: one(calendarEvents, {
110
- fields: [reminders.eventId],
111
- references: [calendarEvents.id]
112
- })
113
- }));
114
- var calendarConfigsRelations = drizzleOrm.relations(calendarConfigs, ({ one }) => ({
115
- user: one(chunkSVWQN2LR_js.user, {
116
- fields: [calendarConfigs.userId],
117
- references: [chunkSVWQN2LR_js.user.id]
118
- })
119
- }));
120
- var eventSharesRelations = drizzleOrm.relations(eventShares, ({ one }) => ({
121
- event: one(calendarEvents, {
122
- fields: [eventShares.eventId],
123
- references: [calendarEvents.id]
124
- }),
125
- sharedWithUser: one(chunkSVWQN2LR_js.user, {
126
- fields: [eventShares.sharedWithUserId],
127
- references: [chunkSVWQN2LR_js.user.id]
128
- }),
129
- sharedByUser: one(chunkSVWQN2LR_js.user, {
130
- fields: [eventShares.sharedByUserId],
131
- references: [chunkSVWQN2LR_js.user.id]
132
- })
133
- }));
134
- var CalendarDbService = class {
135
- /**
136
- * 设置数据库实例
137
- */
138
- setDb(db) {
139
- this._db = db;
140
- }
141
- /**
142
- * 获取数据库实例
143
- */
144
- get db() {
145
- if (!this._db) {
146
- throw new Error("CalendarDbService: Database instance not set. Call setDb() first.");
147
- }
148
- return this._db;
149
- }
150
- // ===== 事件基础操作 =====
151
- /**
152
- * 获取用户的所有事件(基础版本)
153
- */
154
- async getAllEvents(userId, startDate, endDate) {
155
- const conditions = [drizzleOrm.eq(calendarEvents.userId, userId)];
156
- if (startDate) {
157
- conditions.push(drizzleOrm.gte(calendarEvents.startTime, startDate));
158
- }
159
- if (endDate) {
160
- conditions.push(drizzleOrm.lte(calendarEvents.endTime, endDate));
161
- }
162
- const events = await this.db.select().from(calendarEvents).where(drizzleOrm.and(...conditions)).orderBy(drizzleOrm.asc(calendarEvents.startTime));
163
- return events;
164
- }
165
- /**
166
- * 根据ID获取事件
167
- */
168
- async getEventById(eventId) {
169
- const [event] = await this.db.select().from(calendarEvents).where(drizzleOrm.eq(calendarEvents.id, eventId)).limit(1);
170
- return event || null;
171
- }
172
- /**
173
- * 创建事件(基础版本)
174
- */
175
- async createEvent(eventData) {
176
- const [newEvent] = await this.db.insert(calendarEvents).values(eventData).returning();
177
- return newEvent;
178
- }
179
- /**
180
- * 更新事件
181
- */
182
- async updateEvent(eventId, eventData) {
183
- const updateData = {
184
- ...eventData,
185
- updatedAt: /* @__PURE__ */ new Date()
186
- };
187
- const [updatedEvent] = await this.db.update(calendarEvents).set(updateData).where(drizzleOrm.eq(calendarEvents.id, eventId)).returning();
188
- return updatedEvent;
189
- }
190
- /**
191
- * 删除事件
192
- */
193
- async deleteEvent(eventId) {
194
- await this.db.delete(calendarEvents).where(drizzleOrm.eq(calendarEvents.id, eventId));
195
- }
196
- // ===== 用户配置操作 =====
197
- /**
198
- * 获取用户的日历配置
199
- */
200
- async getUserConfig(userId) {
201
- const [config] = await this.db.select().from(calendarConfigs).where(drizzleOrm.eq(calendarConfigs.userId, userId)).limit(1);
202
- return config || null;
203
- }
204
- /**
205
- * 创建或更新用户配置
206
- */
207
- async upsertUserConfig(userId, configData) {
208
- const existingConfig = await this.getUserConfig(userId);
209
- if (existingConfig) {
210
- const [updatedConfig] = await this.db.update(calendarConfigs).set({
211
- ...configData,
212
- updatedAt: /* @__PURE__ */ new Date()
213
- }).where(drizzleOrm.eq(calendarConfigs.userId, userId)).returning();
214
- return updatedConfig;
215
- } else {
216
- const [newConfig] = await this.db.insert(calendarConfigs).values({
217
- userId,
218
- ...configData
219
- }).returning();
220
- return newConfig;
221
- }
222
- }
223
- /**
224
- * 为事件创建重复规则
225
- */
226
- async createRecurrenceRule(ruleData) {
227
- const [newRule] = await this.db.insert(recurrenceRules).values(ruleData).returning();
228
- return newRule;
229
- }
230
- /**
231
- * 获取事件的重复规则
232
- */
233
- async getRecurrenceRule(eventId) {
234
- const [rule] = await this.db.select().from(recurrenceRules).where(drizzleOrm.eq(recurrenceRules.eventId, eventId)).limit(1);
235
- return rule || null;
236
- }
237
- /**
238
- * 删除重复规则
239
- */
240
- async deleteRecurrenceRule(eventId) {
241
- await this.db.delete(recurrenceRules).where(drizzleOrm.eq(recurrenceRules.eventId, eventId));
242
- }
243
- /**
244
- * 为事件创建提醒
245
- */
246
- async createReminder(reminderData) {
247
- const [newReminder] = await this.db.insert(reminders).values({
248
- ...reminderData,
249
- status: reminderData.status || "pending"
250
- }).returning();
251
- return newReminder;
252
- }
253
- /**
254
- * 获取事件的提醒列表
255
- */
256
- async getEventReminders(eventId) {
257
- const remindersList = await this.db.select().from(reminders).where(drizzleOrm.eq(reminders.eventId, eventId)).orderBy(drizzleOrm.asc(reminders.reminderTime));
258
- return remindersList;
259
- }
260
- /**
261
- * 删除事件的所有提醒
262
- */
263
- async deleteEventReminders(eventId) {
264
- await this.db.delete(reminders).where(drizzleOrm.eq(reminders.eventId, eventId));
265
- }
266
- /**
267
- * 获取用户在指定时间范围内的事件数量
268
- */
269
- async getEventCount(userId, startDate, endDate) {
270
- const conditions = [drizzleOrm.eq(calendarEvents.userId, userId)];
271
- if (startDate) {
272
- conditions.push(drizzleOrm.gte(calendarEvents.startTime, startDate));
273
- }
274
- if (endDate) {
275
- conditions.push(drizzleOrm.lte(calendarEvents.endTime, endDate));
276
- }
277
- const result = await this.db.select({ count: calendarEvents.id }).from(calendarEvents).where(drizzleOrm.and(...conditions));
278
- return result.length;
279
- }
280
- /**
281
- * 搜索事件
282
- */
283
- async searchEvents(userId, searchTerm) {
284
- const events = await this.db.select().from(calendarEvents).where(
285
- drizzleOrm.and(
286
- drizzleOrm.eq(calendarEvents.userId, userId)
287
- )
288
- ).orderBy(drizzleOrm.desc(calendarEvents.startTime));
289
- return events.filter(
290
- (event) => event.title.toLowerCase().includes(searchTerm.toLowerCase()) || event.description && event.description.toLowerCase().includes(searchTerm.toLowerCase())
291
- );
292
- }
293
- /**
294
- * 批量删除用户的所有事件
295
- */
296
- async deleteAllUserEvents(userId) {
297
- await this.db.delete(calendarEvents).where(drizzleOrm.eq(calendarEvents.userId, userId));
298
- }
299
- };
300
- var calendarDbService = new CalendarDbService();
301
-
302
- exports.calendarConfigs = calendarConfigs;
303
- exports.calendarConfigsRelations = calendarConfigsRelations;
304
- exports.calendarDbService = calendarDbService;
305
- exports.calendarEvents = calendarEvents;
306
- exports.calendarEventsRelations = calendarEventsRelations;
307
- exports.eventShares = eventShares;
308
- exports.eventSharesRelations = eventSharesRelations;
309
- exports.recurrenceRules = recurrenceRules;
310
- exports.recurrenceRulesRelations = recurrenceRulesRelations;
311
- exports.reminders = reminders;
312
- exports.remindersRelations = remindersRelations;
313
- //# sourceMappingURL=chunk-WC5QFO3T.js.map
314
- //# sourceMappingURL=chunk-WC5QFO3T.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/calendar/db/schema.ts","../src/calendar/db/calendarDbService.ts"],"names":["pgTable","serial","varchar","text","timestamp","boolean","integer","user","json","relations","eq","gte","lte","and","asc","desc"],"mappings":"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","file":"chunk-WC5QFO3T.js","sourcesContent":["import { pgTable, serial, text, timestamp, boolean, varchar, integer, json } from 'drizzle-orm/pg-core';\nimport { relations } from 'drizzle-orm';\nimport { user as users } from '../../auth/schema';\n\n/**\n * 日历事件表\n */\nexport const calendarEvents = pgTable('calendar_events', {\n id: serial('id').primaryKey(),\n title: varchar('title', { length: 255 }).notNull(),\n description: text('description'),\n startTime: timestamp('start_time').notNull(),\n endTime: timestamp('end_time').notNull(),\n allDay: boolean('all_day').notNull().default(false),\n location: varchar('location', { length: 500 }),\n color: varchar('color', { length: 7 }).notNull().default('#3B82F6'), // 十六进制颜色值\n priority: varchar('priority', { length: 10 }).notNull().default('normal'), // low, normal, high, urgent\n userId: integer('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n});\n\n/**\n * 重复规则表\n */\nexport const recurrenceRules = pgTable('recurrence_rules', {\n id: serial('id').primaryKey(),\n eventId: integer('event_id').notNull().references(() => calendarEvents.id, { onDelete: 'cascade' }),\n ruleType: varchar('rule_type', { length: 20 }).notNull(), // daily, weekly, monthly, yearly, custom\n interval: integer('interval').notNull().default(1), // 间隔\n endDate: timestamp('end_date'), // 结束日期\n count: integer('count'), // 重复次数\n byWeekday: json('by_weekday').$type<number[]>(), // 周几重复 [0,1,2,3,4,5,6],0=周日\n byMonthday: json('by_monthday').$type<number[]>(), // 月中的第几天 [1,2,...,31]\n byMonth: json('by_month').$type<number[]>(), // 第几月 [1,2,...,12]\n createdAt: timestamp('created_at').defaultNow().notNull(),\n});\n\n/**\n * 提醒表\n */\nexport const reminders = pgTable('reminders', {\n id: serial('id').primaryKey(),\n eventId: integer('event_id').notNull().references(() => calendarEvents.id, { onDelete: 'cascade' }),\n reminderTime: timestamp('reminder_time').notNull(), // 提醒时间\n reminderType: varchar('reminder_type', { length: 20 }).notNull(), // notification, email, sms\n status: varchar('status', { length: 20 }).notNull().default('pending'), // pending, sent, failed\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n});\n\n/**\n * 日历配置表 - 用户个人日历设置\n */\nexport const calendarConfigs = pgTable('calendar_configs', {\n id: serial('id').primaryKey(),\n userId: integer('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }).unique(),\n firstDayOfWeek: integer('first_day_of_week').notNull().default(1), // 0=周日, 1=周一\n workingHoursStart: varchar('working_hours_start', { length: 5 }).notNull().default('09:00'),\n workingHoursEnd: varchar('working_hours_end', { length: 5 }).notNull().default('18:00'),\n timeZone: varchar('time_zone', { length: 50 }).notNull().default('Asia/Shanghai'),\n dateFormat: varchar('date_format', { length: 20 }).notNull().default('YYYY-MM-DD'),\n timeFormat: varchar('time_format', { length: 20 }).notNull().default('HH:mm'),\n defaultView: varchar('default_view', { length: 20 }).notNull().default('month'), // month, week, day, agenda\n defaultEventColor: varchar('default_event_color', { length: 7 }).notNull().default('#3B82F6'),\n weekends: boolean('weekends').notNull().default(true),\n eventColors: json('event_colors').$type<Record<string, string>>().default({\n blue: '#3B82F6',\n green: '#10B981',\n purple: '#8B5CF6',\n red: '#EF4444',\n yellow: '#F59E0B',\n pink: '#EC4899',\n indigo: '#6366F1',\n gray: '#6B7280'\n }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n});\n\n/**\n * 事件分享表 - 用于共享日历功能\n */\nexport const eventShares = pgTable('event_shares', {\n id: serial('id').primaryKey(),\n eventId: integer('event_id').notNull().references(() => calendarEvents.id, { onDelete: 'cascade' }),\n sharedWithUserId: integer('shared_with_user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),\n sharedByUserId: integer('shared_by_user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),\n permission: varchar('permission', { length: 20 }).notNull().default('read'), // read, write\n createdAt: timestamp('created_at').defaultNow().notNull(),\n});\n\n// ===== 关系定义 =====\n\n/**\n * 日历事件关系\n */\nexport const calendarEventsRelations = relations(calendarEvents, ({ one, many }) => ({\n user: one(users, {\n fields: [calendarEvents.userId],\n references: [users.id],\n }),\n recurrenceRule: one(recurrenceRules, {\n fields: [calendarEvents.id],\n references: [recurrenceRules.eventId],\n }),\n reminders: many(reminders),\n shares: many(eventShares),\n}));\n\n/**\n * 重复规则关系\n */\nexport const recurrenceRulesRelations = relations(recurrenceRules, ({ one }) => ({\n event: one(calendarEvents, {\n fields: [recurrenceRules.eventId],\n references: [calendarEvents.id],\n }),\n}));\n\n/**\n * 提醒关系\n */\nexport const remindersRelations = relations(reminders, ({ one }) => ({\n event: one(calendarEvents, {\n fields: [reminders.eventId],\n references: [calendarEvents.id],\n }),\n}));\n\n/**\n * 日历配置关系\n */\nexport const calendarConfigsRelations = relations(calendarConfigs, ({ one }) => ({\n user: one(users, {\n fields: [calendarConfigs.userId],\n references: [users.id],\n }),\n}));\n\n/**\n * 事件分享关系\n */\nexport const eventSharesRelations = relations(eventShares, ({ one }) => ({\n event: one(calendarEvents, {\n fields: [eventShares.eventId],\n references: [calendarEvents.id],\n }),\n sharedWithUser: one(users, {\n fields: [eventShares.sharedWithUserId],\n references: [users.id],\n }),\n sharedByUser: one(users, {\n fields: [eventShares.sharedByUserId],\n references: [users.id],\n }),\n}));\n\n// 所有表和关系已在上面使用 export 关键字导出 ","import { and, eq, gte, lte, desc, asc } from 'drizzle-orm';\nimport {\n calendarEvents,\n recurrenceRules,\n reminders,\n calendarConfigs,\n eventShares\n} from './schema';\n\n/**\n * 简化版日历数据库服务\n * \n * 提供基础的数据库操作,避免复杂的类型转换\n * 后续可以根据需要逐步完善\n */\nclass CalendarDbService {\n private _db: any;\n\n /**\n * 设置数据库实例\n */\n setDb(db: any) {\n this._db = db;\n }\n\n /**\n * 获取数据库实例\n */\n get db() {\n if (!this._db) {\n throw new Error('CalendarDbService: Database instance not set. Call setDb() first.');\n }\n return this._db;\n }\n \n // ===== 事件基础操作 =====\n\n /**\n * 获取用户的所有事件(基础版本)\n */\n async getAllEvents(userId: number, startDate?: Date, endDate?: Date) {\n const conditions = [eq(calendarEvents.userId, userId)];\n \n if (startDate) {\n conditions.push(gte(calendarEvents.startTime, startDate));\n }\n \n if (endDate) {\n conditions.push(lte(calendarEvents.endTime, endDate));\n }\n\n const events = await this.db\n .select()\n .from(calendarEvents)\n .where(and(...conditions))\n .orderBy(asc(calendarEvents.startTime));\n\n return events;\n }\n\n /**\n * 根据ID获取事件\n */\n async getEventById(eventId: number) {\n const [event] = await this.db\n .select()\n .from(calendarEvents)\n .where(eq(calendarEvents.id, eventId))\n .limit(1);\n\n return event || null;\n }\n\n /**\n * 创建事件(基础版本)\n */\n async createEvent(eventData: {\n title: string;\n description?: string;\n startTime: Date;\n endTime: Date;\n allDay: boolean;\n location?: string;\n color: string;\n userId: number;\n }) {\n const [newEvent] = await this.db\n .insert(calendarEvents)\n .values(eventData)\n .returning();\n\n return newEvent;\n }\n\n /**\n * 更新事件\n */\n async updateEvent(eventId: number, eventData: {\n title?: string;\n description?: string;\n startTime?: Date;\n endTime?: Date;\n allDay?: boolean;\n location?: string;\n color?: string;\n }) {\n const updateData = {\n ...eventData,\n updatedAt: new Date()\n };\n\n const [updatedEvent] = await this.db\n .update(calendarEvents)\n .set(updateData)\n .where(eq(calendarEvents.id, eventId))\n .returning();\n\n return updatedEvent;\n }\n\n /**\n * 删除事件\n */\n async deleteEvent(eventId: number): Promise<void> {\n await this.db\n .delete(calendarEvents)\n .where(eq(calendarEvents.id, eventId));\n }\n\n // ===== 用户配置操作 =====\n\n /**\n * 获取用户的日历配置\n */\n async getUserConfig(userId: number) {\n const [config] = await this.db\n .select()\n .from(calendarConfigs)\n .where(eq(calendarConfigs.userId, userId))\n .limit(1);\n\n return config || null;\n }\n\n /**\n * 创建或更新用户配置\n */\n async upsertUserConfig(userId: number, configData: {\n firstDayOfWeek?: number;\n workingHoursStart?: string;\n workingHoursEnd?: string;\n timeZone?: string;\n dateFormat?: string;\n timeFormat?: string;\n defaultView?: string;\n defaultEventColor?: string;\n weekends?: boolean;\n eventColors?: Record<string, string>;\n }) {\n const existingConfig = await this.getUserConfig(userId);\n\n if (existingConfig) {\n // 更新现有配置\n const [updatedConfig] = await this.db\n .update(calendarConfigs)\n .set({\n ...configData,\n updatedAt: new Date()\n })\n .where(eq(calendarConfigs.userId, userId))\n .returning();\n\n return updatedConfig;\n } else {\n // 创建新配置\n const [newConfig] = await this.db\n .insert(calendarConfigs)\n .values({\n userId,\n ...configData\n })\n .returning();\n\n return newConfig;\n }\n }\n\n /**\n * 为事件创建重复规则\n */\n async createRecurrenceRule(ruleData: {\n eventId: number;\n ruleType: string;\n interval: number;\n endDate?: Date;\n count?: number;\n byWeekday?: number[];\n byMonthday?: number[];\n byMonth?: number[];\n }) {\n const [newRule] = await this.db\n .insert(recurrenceRules)\n .values(ruleData)\n .returning();\n\n return newRule;\n }\n\n /**\n * 获取事件的重复规则\n */\n async getRecurrenceRule(eventId: number) {\n const [rule] = await this.db\n .select()\n .from(recurrenceRules)\n .where(eq(recurrenceRules.eventId, eventId))\n .limit(1);\n\n return rule || null;\n }\n\n /**\n * 删除重复规则\n */\n async deleteRecurrenceRule(eventId: number): Promise<void> {\n await this.db\n .delete(recurrenceRules)\n .where(eq(recurrenceRules.eventId, eventId));\n }\n\n /**\n * 为事件创建提醒\n */\n async createReminder(reminderData: {\n eventId: number;\n reminderTime: Date;\n reminderType: string;\n status?: string;\n }) {\n const [newReminder] = await this.db\n .insert(reminders)\n .values({\n ...reminderData,\n status: reminderData.status || 'pending'\n })\n .returning();\n\n return newReminder;\n }\n\n /**\n * 获取事件的提醒列表\n */\n async getEventReminders(eventId: number) {\n const remindersList = await this.db\n .select()\n .from(reminders)\n .where(eq(reminders.eventId, eventId))\n .orderBy(asc(reminders.reminderTime));\n\n return remindersList;\n }\n\n /**\n * 删除事件的所有提醒\n */\n async deleteEventReminders(eventId: number): Promise<void> {\n await this.db\n .delete(reminders)\n .where(eq(reminders.eventId, eventId));\n }\n\n /**\n * 获取用户在指定时间范围内的事件数量\n */\n async getEventCount(userId: number, startDate?: Date, endDate?: Date): Promise<number> {\n const conditions = [eq(calendarEvents.userId, userId)];\n \n if (startDate) {\n conditions.push(gte(calendarEvents.startTime, startDate));\n }\n \n if (endDate) {\n conditions.push(lte(calendarEvents.endTime, endDate));\n }\n\n const result = await this.db\n .select({ count: calendarEvents.id })\n .from(calendarEvents)\n .where(and(...conditions));\n\n return result.length;\n }\n\n /**\n * 搜索事件\n */\n async searchEvents(userId: number, searchTerm: string) {\n const events = await this.db\n .select()\n .from(calendarEvents)\n .where(\n and(\n eq(calendarEvents.userId, userId),\n )\n )\n .orderBy(desc(calendarEvents.startTime));\n\n return events.filter((event: any) => \n event.title.toLowerCase().includes(searchTerm.toLowerCase()) ||\n (event.description && event.description.toLowerCase().includes(searchTerm.toLowerCase()))\n );\n }\n\n /**\n * 批量删除用户的所有事件\n */\n async deleteAllUserEvents(userId: number): Promise<void> {\n await this.db\n .delete(calendarEvents)\n .where(eq(calendarEvents.userId, userId));\n }\n}\n\n\n// 导出单例实例\nexport const calendarDbService = new CalendarDbService();\nexport default calendarDbService; "]}