sa2kit 3.2.0 → 3.2.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 (227) hide show
  1. package/dist/CollisionBalls-DgKtscU2.d.mts +41 -0
  2. package/dist/CollisionBalls-DgKtscU2.d.ts +41 -0
  3. package/dist/ConfigService-Oga_zFRS.d.mts +262 -0
  4. package/dist/ConfigService-Oga_zFRS.d.ts +262 -0
  5. package/dist/UniversalFileService-CC4d3wkc.d.ts +139 -0
  6. package/dist/UniversalFileService-CzAE_G4V.d.mts +139 -0
  7. package/dist/boothVaultService-lKcnyA-u.d.mts +83 -0
  8. package/dist/boothVaultService-lKcnyA-u.d.ts +83 -0
  9. package/dist/business/audioDetection/index.d.mts +2 -0
  10. package/dist/business/audioDetection/index.d.ts +2 -0
  11. package/dist/business/audioDetection/index.js +1244 -0
  12. package/dist/business/audioDetection/index.js.map +1 -0
  13. package/dist/business/audioDetection/index.mjs +1227 -0
  14. package/dist/business/audioDetection/index.mjs.map +1 -0
  15. package/dist/business/calendar/index.d.mts +6 -0
  16. package/dist/business/calendar/index.d.ts +6 -0
  17. package/dist/business/calendar/index.js +7433 -0
  18. package/dist/business/calendar/index.js.map +1 -0
  19. package/dist/business/calendar/index.mjs +7257 -0
  20. package/dist/business/calendar/index.mjs.map +1 -0
  21. package/dist/business/calendar/routes/index.d.mts +191 -0
  22. package/dist/business/calendar/routes/index.d.ts +191 -0
  23. package/dist/business/calendar/routes/index.js +844 -0
  24. package/dist/business/calendar/routes/index.js.map +1 -0
  25. package/dist/business/calendar/routes/index.mjs +826 -0
  26. package/dist/business/calendar/routes/index.mjs.map +1 -0
  27. package/dist/business/festivalCard/index.d.mts +4 -0
  28. package/dist/business/festivalCard/index.d.ts +4 -0
  29. package/dist/business/festivalCard/index.js +1492 -0
  30. package/dist/business/festivalCard/index.js.map +1 -0
  31. package/dist/business/festivalCard/index.mjs +1475 -0
  32. package/dist/business/festivalCard/index.mjs.map +1 -0
  33. package/dist/business/festivalCard/routes/index.d.mts +42 -0
  34. package/dist/business/festivalCard/routes/index.d.ts +42 -0
  35. package/dist/business/festivalCard/routes/index.js +361 -0
  36. package/dist/business/festivalCard/routes/index.js.map +1 -0
  37. package/dist/business/festivalCard/routes/index.mjs +356 -0
  38. package/dist/business/festivalCard/routes/index.mjs.map +1 -0
  39. package/dist/business/festivalCard/server/index.d.mts +120 -0
  40. package/dist/business/festivalCard/server/index.d.ts +120 -0
  41. package/dist/business/festivalCard/server/index.js +272 -0
  42. package/dist/business/festivalCard/server/index.js.map +1 -0
  43. package/dist/business/festivalCard/server/index.mjs +265 -0
  44. package/dist/business/festivalCard/server/index.mjs.map +1 -0
  45. package/dist/business/index.d.mts +34 -0
  46. package/dist/business/index.d.ts +34 -0
  47. package/dist/business/index.js +29282 -0
  48. package/dist/business/index.js.map +1 -0
  49. package/dist/business/index.mjs +29237 -0
  50. package/dist/business/index.mjs.map +1 -0
  51. package/dist/business/mikuContest/ui/web/index.d.mts +2 -0
  52. package/dist/business/mikuContest/ui/web/index.d.ts +2 -0
  53. package/dist/business/mikuContest/ui/web/index.js +353 -0
  54. package/dist/business/mikuContest/ui/web/index.js.map +1 -0
  55. package/dist/business/mikuContest/ui/web/index.mjs +343 -0
  56. package/dist/business/mikuContest/ui/web/index.mjs.map +1 -0
  57. package/dist/business/mikuFireworks3D/index.d.mts +2 -0
  58. package/dist/business/mikuFireworks3D/index.d.ts +2 -0
  59. package/dist/business/mikuFireworks3D/index.js +1267 -0
  60. package/dist/business/mikuFireworks3D/index.js.map +1 -0
  61. package/dist/business/mikuFireworks3D/index.mjs +1228 -0
  62. package/dist/business/mikuFireworks3D/index.mjs.map +1 -0
  63. package/dist/business/mikuFusionGame/index.d.mts +2 -0
  64. package/dist/business/mikuFusionGame/index.d.ts +2 -0
  65. package/dist/business/mikuFusionGame/index.js +1208 -0
  66. package/dist/business/mikuFusionGame/index.js.map +1 -0
  67. package/dist/business/mikuFusionGame/index.mjs +1195 -0
  68. package/dist/business/mikuFusionGame/index.mjs.map +1 -0
  69. package/dist/business/mmd/admin/index.d.mts +487 -0
  70. package/dist/business/mmd/admin/index.d.ts +487 -0
  71. package/dist/business/mmd/admin/index.js +1058 -0
  72. package/dist/business/mmd/admin/index.js.map +1 -0
  73. package/dist/business/mmd/admin/index.mjs +1027 -0
  74. package/dist/business/mmd/admin/index.mjs.map +1 -0
  75. package/dist/business/mmd/index.d.mts +5 -0
  76. package/dist/business/mmd/index.d.ts +5 -0
  77. package/dist/business/mmd/index.js +10119 -0
  78. package/dist/business/mmd/index.js.map +1 -0
  79. package/dist/business/mmd/index.mjs +10028 -0
  80. package/dist/business/mmd/index.mjs.map +1 -0
  81. package/dist/business/mmd/server/index.d.mts +139 -0
  82. package/dist/business/mmd/server/index.d.ts +139 -0
  83. package/dist/business/mmd/server/index.js +424 -0
  84. package/dist/business/mmd/server/index.js.map +1 -0
  85. package/dist/business/mmd/server/index.mjs +404 -0
  86. package/dist/business/mmd/server/index.mjs.map +1 -0
  87. package/dist/business/music/index.d.mts +3 -0
  88. package/dist/business/music/index.d.ts +3 -0
  89. package/dist/business/music/index.js +830 -0
  90. package/dist/business/music/index.js.map +1 -0
  91. package/dist/business/music/index.mjs +809 -0
  92. package/dist/business/music/index.mjs.map +1 -0
  93. package/dist/business/music/server/index.d.mts +1 -0
  94. package/dist/business/music/server/index.d.ts +1 -0
  95. package/dist/business/music/server/index.js +194 -0
  96. package/dist/business/music/server/index.js.map +1 -0
  97. package/dist/business/music/server/index.mjs +182 -0
  98. package/dist/business/music/server/index.mjs.map +1 -0
  99. package/dist/business/navigation/index.d.mts +2 -0
  100. package/dist/business/navigation/index.d.ts +2 -0
  101. package/dist/business/navigation/index.js +453 -0
  102. package/dist/business/navigation/index.js.map +1 -0
  103. package/dist/business/navigation/index.mjs +443 -0
  104. package/dist/business/navigation/index.mjs.map +1 -0
  105. package/dist/business/portfolio/index.d.mts +3 -0
  106. package/dist/business/portfolio/index.d.ts +3 -0
  107. package/dist/business/portfolio/index.js +736 -0
  108. package/dist/business/portfolio/index.js.map +1 -0
  109. package/dist/business/portfolio/index.mjs +724 -0
  110. package/dist/business/portfolio/index.mjs.map +1 -0
  111. package/dist/business/qqbot/server/index.d.mts +167 -0
  112. package/dist/business/qqbot/server/index.d.ts +167 -0
  113. package/dist/business/qqbot/server/index.js +394 -0
  114. package/dist/business/qqbot/server/index.js.map +1 -0
  115. package/dist/business/qqbot/server/index.mjs +385 -0
  116. package/dist/business/qqbot/server/index.mjs.map +1 -0
  117. package/dist/business/qqbot/ui/web/index.d.mts +10 -0
  118. package/dist/business/qqbot/ui/web/index.d.ts +10 -0
  119. package/dist/business/qqbot/ui/web/index.js +105 -0
  120. package/dist/business/qqbot/ui/web/index.js.map +1 -0
  121. package/dist/business/qqbot/ui/web/index.mjs +99 -0
  122. package/dist/business/qqbot/ui/web/index.mjs.map +1 -0
  123. package/dist/business/screenReceiver/index.d.mts +2 -0
  124. package/dist/business/screenReceiver/index.d.ts +2 -0
  125. package/dist/business/screenReceiver/index.js +281 -0
  126. package/dist/business/screenReceiver/index.js.map +1 -0
  127. package/dist/business/screenReceiver/index.mjs +273 -0
  128. package/dist/business/screenReceiver/index.mjs.map +1 -0
  129. package/dist/business/testYourself/admin/index.d.mts +58 -0
  130. package/dist/business/testYourself/admin/index.d.ts +58 -0
  131. package/dist/business/testYourself/admin/index.js +1009 -0
  132. package/dist/business/testYourself/admin/index.js.map +1 -0
  133. package/dist/business/testYourself/admin/index.mjs +1002 -0
  134. package/dist/business/testYourself/admin/index.mjs.map +1 -0
  135. package/dist/business/testYourself/index.d.mts +6 -0
  136. package/dist/business/testYourself/index.d.ts +6 -0
  137. package/dist/business/testYourself/index.js +2551 -0
  138. package/dist/business/testYourself/index.js.map +1 -0
  139. package/dist/business/testYourself/index.mjs +2531 -0
  140. package/dist/business/testYourself/index.mjs.map +1 -0
  141. package/dist/business/testYourself/server/index.d.mts +1029 -0
  142. package/dist/business/testYourself/server/index.d.ts +1029 -0
  143. package/dist/business/testYourself/server/index.js +825 -0
  144. package/dist/business/testYourself/server/index.js.map +1 -0
  145. package/dist/business/testYourself/server/index.mjs +816 -0
  146. package/dist/business/testYourself/server/index.mjs.map +1 -0
  147. package/dist/business/vocaloidBooth/index.d.mts +2 -0
  148. package/dist/business/vocaloidBooth/index.d.ts +2 -0
  149. package/dist/business/vocaloidBooth/index.js +172 -0
  150. package/dist/business/vocaloidBooth/index.js.map +1 -0
  151. package/dist/business/vocaloidBooth/index.mjs +166 -0
  152. package/dist/business/vocaloidBooth/index.mjs.map +1 -0
  153. package/dist/business/vocaloidBooth/server/index.d.mts +111 -0
  154. package/dist/business/vocaloidBooth/server/index.d.ts +111 -0
  155. package/dist/business/vocaloidBooth/server/index.js +247 -0
  156. package/dist/business/vocaloidBooth/server/index.js.map +1 -0
  157. package/dist/business/vocaloidBooth/server/index.mjs +237 -0
  158. package/dist/business/vocaloidBooth/server/index.mjs.map +1 -0
  159. package/dist/business/vocaloidBooth/web/index.d.mts +45 -0
  160. package/dist/business/vocaloidBooth/web/index.d.ts +45 -0
  161. package/dist/business/vocaloidBooth/web/index.js +376 -0
  162. package/dist/business/vocaloidBooth/web/index.js.map +1 -0
  163. package/dist/business/vocaloidBooth/web/index.mjs +362 -0
  164. package/dist/business/vocaloidBooth/web/index.mjs.map +1 -0
  165. package/dist/common/auth/components/index.js +18 -0
  166. package/dist/common/auth/components/index.js.map +1 -1
  167. package/dist/common/auth/components/index.mjs +18 -0
  168. package/dist/common/auth/components/index.mjs.map +1 -1
  169. package/dist/common/auth/server/index.d.mts +86 -3
  170. package/dist/common/auth/server/index.d.ts +86 -3
  171. package/dist/common/auth/server/index.js +614 -1
  172. package/dist/common/auth/server/index.js.map +1 -1
  173. package/dist/common/auth/server/index.mjs +599 -3
  174. package/dist/common/auth/server/index.mjs.map +1 -1
  175. package/dist/config-BQp3qLAL.d.mts +22 -0
  176. package/dist/config-BQp3qLAL.d.ts +22 -0
  177. package/dist/drizzle-schema-BNhqj2AZ.d.mts +1114 -0
  178. package/dist/drizzle-schema-BNhqj2AZ.d.ts +1114 -0
  179. package/dist/festivalCardService-D60G-sgr.d.mts +13 -0
  180. package/dist/festivalCardService-DnLyJpRh.d.ts +13 -0
  181. package/dist/index-BMgdH5dL.d.mts +1716 -0
  182. package/dist/index-BO9_Do5y.d.mts +93 -0
  183. package/dist/index-BO9_Do5y.d.ts +93 -0
  184. package/dist/index-BSmd4ikf.d.ts +76 -0
  185. package/dist/index-BSwvWYp2.d.mts +2632 -0
  186. package/dist/index-Bo_fW3Tl.d.mts +105 -0
  187. package/dist/index-Bo_fW3Tl.d.ts +105 -0
  188. package/dist/index-BrKazb8M.d.mts +148 -0
  189. package/dist/index-BrKazb8M.d.ts +148 -0
  190. package/dist/index-Bzh6QE4P.d.ts +25 -0
  191. package/dist/index-C5Ic6eSR.d.mts +25 -0
  192. package/dist/index-C8i9SIxk.d.ts +2632 -0
  193. package/dist/index-C_GhVhOT.d.mts +109 -0
  194. package/dist/index-C_GhVhOT.d.ts +109 -0
  195. package/dist/index-Cb3UEpG4.d.mts +101 -0
  196. package/dist/index-CjlkUj01.d.mts +103 -0
  197. package/dist/index-CucXCBNR.d.mts +302 -0
  198. package/dist/index-CucXCBNR.d.ts +302 -0
  199. package/dist/index-DLLPTprx.d.mts +1522 -0
  200. package/dist/index-DRiZy0dv.d.mts +525 -0
  201. package/dist/index-DRiZy0dv.d.ts +525 -0
  202. package/dist/index-Dc_I2t0P.d.mts +103 -0
  203. package/dist/index-DowAHRIP.d.mts +250 -0
  204. package/dist/index-DowAHRIP.d.ts +250 -0
  205. package/dist/index-Dpq_5H2n.d.ts +103 -0
  206. package/dist/index-Ds2M_9zb.d.ts +101 -0
  207. package/dist/index-IXMAeTtN.d.ts +1716 -0
  208. package/dist/index-VFDbZxVM.d.ts +1522 -0
  209. package/dist/index-jadkp96n.d.ts +103 -0
  210. package/dist/index-r2-zE3iC.d.mts +76 -0
  211. package/dist/index.d.mts +10682 -0
  212. package/dist/index.d.ts +10682 -0
  213. package/dist/index.js +38233 -0
  214. package/dist/index.js.map +1 -0
  215. package/dist/index.mjs +37959 -0
  216. package/dist/index.mjs.map +1 -0
  217. package/dist/types-B6B210gX.d.mts +270 -0
  218. package/dist/types-B6B210gX.d.ts +270 -0
  219. package/dist/types-B7voqjjA.d.mts +51 -0
  220. package/dist/types-B7voqjjA.d.ts +51 -0
  221. package/dist/types-Bdnte5EN.d.mts +292 -0
  222. package/dist/types-C2z_QQPI.d.mts +70 -0
  223. package/dist/types-C2z_QQPI.d.ts +70 -0
  224. package/dist/types-HorDyIRv.d.mts +303 -0
  225. package/dist/types-HorDyIRv.d.ts +303 -0
  226. package/dist/types-_rFX1atk.d.ts +292 -0
  227. package/package.json +10 -2
@@ -0,0 +1,826 @@
1
+ import { NextResponse } from 'next/server';
2
+ import { sql, relations, eq, gte, lte, and, asc, desc } from 'drizzle-orm';
3
+ import { pgEnum, pgTable, timestamp, boolean, text, integer, varchar, serial, json } from 'drizzle-orm/pg-core';
4
+
5
+ // src/business/calendar/routes/index.ts
6
+ var userRole = pgEnum("UserRole", ["USER", "ADMIN", "SUPER_ADMIN"]);
7
+ var user = pgTable("user", {
8
+ id: text("id").primaryKey().notNull(),
9
+ name: text("name").notNull(),
10
+ email: text("email").notNull(),
11
+ emailVerified: boolean("emailVerified").default(false).notNull(),
12
+ image: text("image"),
13
+ phoneNumber: text("phoneNumber"),
14
+ phoneNumberVerified: boolean("phoneNumberVerified").default(false),
15
+ role: userRole("role").default("USER").notNull(),
16
+ createdAt: timestamp("createdAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull(),
17
+ updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull()
18
+ });
19
+ var session = pgTable("session", {
20
+ id: text("id").primaryKey().notNull(),
21
+ userId: text("userId").notNull().references(() => user.id, { onDelete: "cascade" }),
22
+ token: text("token").notNull(),
23
+ expiresAt: timestamp("expiresAt", { precision: 3, mode: "date" }).notNull(),
24
+ ipAddress: text("ipAddress"),
25
+ userAgent: text("userAgent"),
26
+ createdAt: timestamp("createdAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull(),
27
+ updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull()
28
+ });
29
+ var account = pgTable("account", {
30
+ id: text("id").primaryKey().notNull(),
31
+ accountId: text("accountId").notNull(),
32
+ providerId: text("providerId").notNull(),
33
+ userId: text("userId").notNull().references(() => user.id, { onDelete: "cascade" }),
34
+ accessToken: text("accessToken"),
35
+ refreshToken: text("refreshToken"),
36
+ idToken: text("idToken"),
37
+ accessTokenExpiresAt: timestamp("accessTokenExpiresAt", { precision: 3, mode: "date" }),
38
+ refreshTokenExpiresAt: timestamp("refreshTokenExpiresAt", { precision: 3, mode: "date" }),
39
+ scope: text("scope"),
40
+ password: text("password"),
41
+ createdAt: timestamp("createdAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull(),
42
+ updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull()
43
+ });
44
+ pgTable("verification", {
45
+ id: text("id").primaryKey().notNull(),
46
+ identifier: text("identifier").notNull(),
47
+ value: text("value").notNull(),
48
+ expiresAt: timestamp("expiresAt", { precision: 3, mode: "date" }).notNull(),
49
+ createdAt: timestamp("createdAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull(),
50
+ updatedAt: timestamp("updatedAt", { precision: 3, mode: "date" }).default(sql`CURRENT_TIMESTAMP`).notNull()
51
+ });
52
+ relations(user, ({ many }) => ({
53
+ sessions: many(session),
54
+ accounts: many(account)
55
+ }));
56
+ relations(session, ({ one }) => ({
57
+ user: one(user, {
58
+ fields: [session.userId],
59
+ references: [user.id]
60
+ })
61
+ }));
62
+ relations(account, ({ one }) => ({
63
+ user: one(user, {
64
+ fields: [account.userId],
65
+ references: [user.id]
66
+ })
67
+ }));
68
+
69
+ // src/business/calendar/db/schema.ts
70
+ var calendarEvents = pgTable("calendar_events", {
71
+ id: serial("id").primaryKey(),
72
+ title: varchar("title", { length: 255 }).notNull(),
73
+ description: text("description"),
74
+ startTime: timestamp("start_time").notNull(),
75
+ endTime: timestamp("end_time").notNull(),
76
+ allDay: boolean("all_day").notNull().default(false),
77
+ location: varchar("location", { length: 500 }),
78
+ color: varchar("color", { length: 7 }).notNull().default("#3B82F6"),
79
+ // 十六进制颜色值
80
+ priority: varchar("priority", { length: 10 }).notNull().default("normal"),
81
+ // low, normal, high, urgent
82
+ userId: integer("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
83
+ createdAt: timestamp("created_at").defaultNow().notNull(),
84
+ updatedAt: timestamp("updated_at").defaultNow().notNull()
85
+ });
86
+ var recurrenceRules = pgTable("recurrence_rules", {
87
+ id: serial("id").primaryKey(),
88
+ eventId: integer("event_id").notNull().references(() => calendarEvents.id, { onDelete: "cascade" }),
89
+ ruleType: varchar("rule_type", { length: 20 }).notNull(),
90
+ // daily, weekly, monthly, yearly, custom
91
+ interval: integer("interval").notNull().default(1),
92
+ // 间隔
93
+ endDate: timestamp("end_date"),
94
+ // 结束日期
95
+ count: integer("count"),
96
+ // 重复次数
97
+ byWeekday: json("by_weekday").$type(),
98
+ // 周几重复 [0,1,2,3,4,5,6],0=周日
99
+ byMonthday: json("by_monthday").$type(),
100
+ // 月中的第几天 [1,2,...,31]
101
+ byMonth: json("by_month").$type(),
102
+ // 第几月 [1,2,...,12]
103
+ createdAt: timestamp("created_at").defaultNow().notNull()
104
+ });
105
+ var reminders = pgTable("reminders", {
106
+ id: serial("id").primaryKey(),
107
+ eventId: integer("event_id").notNull().references(() => calendarEvents.id, { onDelete: "cascade" }),
108
+ reminderTime: timestamp("reminder_time").notNull(),
109
+ // 提醒时间
110
+ reminderType: varchar("reminder_type", { length: 20 }).notNull(),
111
+ // notification, email, sms
112
+ status: varchar("status", { length: 20 }).notNull().default("pending"),
113
+ // pending, sent, failed
114
+ createdAt: timestamp("created_at").defaultNow().notNull(),
115
+ updatedAt: timestamp("updated_at").defaultNow().notNull()
116
+ });
117
+ var calendarConfigs = pgTable("calendar_configs", {
118
+ id: serial("id").primaryKey(),
119
+ userId: integer("user_id").notNull().references(() => user.id, { onDelete: "cascade" }).unique(),
120
+ firstDayOfWeek: integer("first_day_of_week").notNull().default(1),
121
+ // 0=周日, 1=周一
122
+ workingHoursStart: varchar("working_hours_start", { length: 5 }).notNull().default("09:00"),
123
+ workingHoursEnd: varchar("working_hours_end", { length: 5 }).notNull().default("18:00"),
124
+ timeZone: varchar("time_zone", { length: 50 }).notNull().default("Asia/Shanghai"),
125
+ dateFormat: varchar("date_format", { length: 20 }).notNull().default("YYYY-MM-DD"),
126
+ timeFormat: varchar("time_format", { length: 20 }).notNull().default("HH:mm"),
127
+ defaultView: varchar("default_view", { length: 20 }).notNull().default("month"),
128
+ // month, week, day, agenda
129
+ defaultEventColor: varchar("default_event_color", { length: 7 }).notNull().default("#3B82F6"),
130
+ weekends: boolean("weekends").notNull().default(true),
131
+ eventColors: json("event_colors").$type().default({
132
+ blue: "#3B82F6",
133
+ green: "#10B981",
134
+ purple: "#8B5CF6",
135
+ red: "#EF4444",
136
+ yellow: "#F59E0B",
137
+ pink: "#EC4899",
138
+ indigo: "#6366F1",
139
+ gray: "#6B7280"
140
+ }),
141
+ createdAt: timestamp("created_at").defaultNow().notNull(),
142
+ updatedAt: timestamp("updated_at").defaultNow().notNull()
143
+ });
144
+ var eventShares = pgTable("event_shares", {
145
+ id: serial("id").primaryKey(),
146
+ eventId: integer("event_id").notNull().references(() => calendarEvents.id, { onDelete: "cascade" }),
147
+ sharedWithUserId: integer("shared_with_user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
148
+ sharedByUserId: integer("shared_by_user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
149
+ permission: varchar("permission", { length: 20 }).notNull().default("read"),
150
+ // read, write
151
+ createdAt: timestamp("created_at").defaultNow().notNull()
152
+ });
153
+ relations(calendarEvents, ({ one, many }) => ({
154
+ user: one(user, {
155
+ fields: [calendarEvents.userId],
156
+ references: [user.id]
157
+ }),
158
+ recurrenceRule: one(recurrenceRules, {
159
+ fields: [calendarEvents.id],
160
+ references: [recurrenceRules.eventId]
161
+ }),
162
+ reminders: many(reminders),
163
+ shares: many(eventShares)
164
+ }));
165
+ relations(recurrenceRules, ({ one }) => ({
166
+ event: one(calendarEvents, {
167
+ fields: [recurrenceRules.eventId],
168
+ references: [calendarEvents.id]
169
+ })
170
+ }));
171
+ relations(reminders, ({ one }) => ({
172
+ event: one(calendarEvents, {
173
+ fields: [reminders.eventId],
174
+ references: [calendarEvents.id]
175
+ })
176
+ }));
177
+ relations(calendarConfigs, ({ one }) => ({
178
+ user: one(user, {
179
+ fields: [calendarConfigs.userId],
180
+ references: [user.id]
181
+ })
182
+ }));
183
+ relations(eventShares, ({ one }) => ({
184
+ event: one(calendarEvents, {
185
+ fields: [eventShares.eventId],
186
+ references: [calendarEvents.id]
187
+ }),
188
+ sharedWithUser: one(user, {
189
+ fields: [eventShares.sharedWithUserId],
190
+ references: [user.id]
191
+ }),
192
+ sharedByUser: one(user, {
193
+ fields: [eventShares.sharedByUserId],
194
+ references: [user.id]
195
+ })
196
+ }));
197
+
198
+ // src/business/calendar/db/calendarDbService.ts
199
+ var CalendarDbService = class {
200
+ /**
201
+ * 设置数据库实例
202
+ */
203
+ setDb(db) {
204
+ this._db = db;
205
+ }
206
+ /**
207
+ * 数据库是否已初始化
208
+ */
209
+ isConfigured() {
210
+ return Boolean(this._db);
211
+ }
212
+ /**
213
+ * 获取数据库实例
214
+ */
215
+ get db() {
216
+ if (!this._db) {
217
+ throw new Error("CalendarDbService: Database instance not set. Call setDb() first.");
218
+ }
219
+ return this._db;
220
+ }
221
+ // ===== 事件基础操作 =====
222
+ /**
223
+ * 获取用户的所有事件(基础版本)
224
+ */
225
+ async getAllEvents(userId, startDate, endDate) {
226
+ const conditions = [eq(calendarEvents.userId, userId)];
227
+ if (startDate) {
228
+ conditions.push(gte(calendarEvents.startTime, startDate));
229
+ }
230
+ if (endDate) {
231
+ conditions.push(lte(calendarEvents.endTime, endDate));
232
+ }
233
+ const events = await this.db.select().from(calendarEvents).where(and(...conditions)).orderBy(asc(calendarEvents.startTime));
234
+ return events;
235
+ }
236
+ /**
237
+ * 根据ID获取事件
238
+ */
239
+ async getEventById(eventId) {
240
+ const [event] = await this.db.select().from(calendarEvents).where(eq(calendarEvents.id, eventId)).limit(1);
241
+ return event || null;
242
+ }
243
+ /**
244
+ * 创建事件(基础版本)
245
+ */
246
+ async createEvent(eventData) {
247
+ const [newEvent] = await this.db.insert(calendarEvents).values(eventData).returning();
248
+ return newEvent;
249
+ }
250
+ /**
251
+ * 更新事件
252
+ */
253
+ async updateEvent(eventId, eventData) {
254
+ const updateData = {
255
+ ...eventData,
256
+ updatedAt: /* @__PURE__ */ new Date()
257
+ };
258
+ const [updatedEvent] = await this.db.update(calendarEvents).set(updateData).where(eq(calendarEvents.id, eventId)).returning();
259
+ return updatedEvent;
260
+ }
261
+ /**
262
+ * 删除事件
263
+ */
264
+ async deleteEvent(eventId) {
265
+ await this.db.delete(calendarEvents).where(eq(calendarEvents.id, eventId));
266
+ }
267
+ // ===== 用户配置操作 =====
268
+ /**
269
+ * 获取用户的日历配置
270
+ */
271
+ async getUserConfig(userId) {
272
+ const [config] = await this.db.select().from(calendarConfigs).where(eq(calendarConfigs.userId, userId)).limit(1);
273
+ return config || null;
274
+ }
275
+ /**
276
+ * 创建或更新用户配置
277
+ */
278
+ async upsertUserConfig(userId, configData) {
279
+ const existingConfig = await this.getUserConfig(userId);
280
+ if (existingConfig) {
281
+ const [updatedConfig] = await this.db.update(calendarConfigs).set({
282
+ ...configData,
283
+ updatedAt: /* @__PURE__ */ new Date()
284
+ }).where(eq(calendarConfigs.userId, userId)).returning();
285
+ return updatedConfig;
286
+ } else {
287
+ const [newConfig] = await this.db.insert(calendarConfigs).values({
288
+ userId,
289
+ ...configData
290
+ }).returning();
291
+ return newConfig;
292
+ }
293
+ }
294
+ /**
295
+ * 为事件创建重复规则
296
+ */
297
+ async createRecurrenceRule(ruleData) {
298
+ const [newRule] = await this.db.insert(recurrenceRules).values(ruleData).returning();
299
+ return newRule;
300
+ }
301
+ /**
302
+ * 获取事件的重复规则
303
+ */
304
+ async getRecurrenceRule(eventId) {
305
+ const [rule] = await this.db.select().from(recurrenceRules).where(eq(recurrenceRules.eventId, eventId)).limit(1);
306
+ return rule || null;
307
+ }
308
+ /**
309
+ * 删除重复规则
310
+ */
311
+ async deleteRecurrenceRule(eventId) {
312
+ await this.db.delete(recurrenceRules).where(eq(recurrenceRules.eventId, eventId));
313
+ }
314
+ /**
315
+ * 为事件创建提醒
316
+ */
317
+ async createReminder(reminderData) {
318
+ const [newReminder] = await this.db.insert(reminders).values({
319
+ ...reminderData,
320
+ status: reminderData.status || "pending"
321
+ }).returning();
322
+ return newReminder;
323
+ }
324
+ /**
325
+ * 获取事件的提醒列表
326
+ */
327
+ async getEventReminders(eventId) {
328
+ const remindersList = await this.db.select().from(reminders).where(eq(reminders.eventId, eventId)).orderBy(asc(reminders.reminderTime));
329
+ return remindersList;
330
+ }
331
+ /**
332
+ * 删除事件的所有提醒
333
+ */
334
+ async deleteEventReminders(eventId) {
335
+ await this.db.delete(reminders).where(eq(reminders.eventId, eventId));
336
+ }
337
+ /**
338
+ * 获取用户在指定时间范围内的事件数量
339
+ */
340
+ async getEventCount(userId, startDate, endDate) {
341
+ const conditions = [eq(calendarEvents.userId, userId)];
342
+ if (startDate) {
343
+ conditions.push(gte(calendarEvents.startTime, startDate));
344
+ }
345
+ if (endDate) {
346
+ conditions.push(lte(calendarEvents.endTime, endDate));
347
+ }
348
+ const result = await this.db.select({ count: calendarEvents.id }).from(calendarEvents).where(and(...conditions));
349
+ return result.length;
350
+ }
351
+ /**
352
+ * 搜索事件
353
+ */
354
+ async searchEvents(userId, searchTerm) {
355
+ const events = await this.db.select().from(calendarEvents).where(
356
+ and(
357
+ eq(calendarEvents.userId, userId)
358
+ )
359
+ ).orderBy(desc(calendarEvents.startTime));
360
+ return events.filter(
361
+ (event) => event.title.toLowerCase().includes(searchTerm.toLowerCase()) || event.description && event.description.toLowerCase().includes(searchTerm.toLowerCase())
362
+ );
363
+ }
364
+ /**
365
+ * 批量删除用户的所有事件
366
+ */
367
+ async deleteAllUserEvents(userId) {
368
+ await this.db.delete(calendarEvents).where(eq(calendarEvents.userId, userId));
369
+ }
370
+ };
371
+ var calendarDbService = new CalendarDbService();
372
+
373
+ // src/common/auth/server/session.ts
374
+ async function getSessionUser(auth, request) {
375
+ const session2 = await auth.api.getSession({ headers: request.headers });
376
+ if (!session2?.user) return null;
377
+ const user2 = session2.user;
378
+ return {
379
+ id: user2.id,
380
+ email: user2.email,
381
+ name: user2.name,
382
+ role: user2.role,
383
+ phoneNumber: user2.phoneNumber ?? null
384
+ };
385
+ }
386
+ async function getSessionUserNumeric(auth, request) {
387
+ const user2 = await getSessionUser(auth, request);
388
+ if (!user2) return null;
389
+ const numericId = Number.parseInt(user2.id, 10);
390
+ if (Number.isNaN(numericId)) return null;
391
+ const { id: _id, ...rest } = user2;
392
+ return { ...rest, id: numericId };
393
+ }
394
+ function createSessionValidator(auth) {
395
+ return {
396
+ getSessionUser: (request) => getSessionUser(auth, request),
397
+ getSessionUserNumeric: (request) => getSessionUserNumeric(auth, request)
398
+ };
399
+ }
400
+
401
+ // src/business/calendar/api/auth-config.ts
402
+ var configuredValidator = null;
403
+ function configureCalendarApiAuth(validateAuth) {
404
+ configuredValidator = validateAuth;
405
+ }
406
+ function resetCalendarApiAuth() {
407
+ configuredValidator = null;
408
+ }
409
+ function resolveCalendarAuthValidator(validateAuth) {
410
+ const validator = validateAuth ?? configuredValidator;
411
+ if (!validator) {
412
+ throw new Error(
413
+ "Calendar API \u672A\u914D\u7F6E auth\uFF1A\u8BF7\u5728\u5E94\u7528\u542F\u52A8\u65F6\u8C03\u7528 configureCalendarApiAuth(validateAuth)\uFF0C\u6216 configureCalendarApiWithBetterAuth(auth)\uFF0C\u6216\u5728 createDefaultCalendarRouteConfig(validateAuth) \u4E2D\u663E\u5F0F\u4F20\u5165\u3002"
414
+ );
415
+ }
416
+ return validator;
417
+ }
418
+ function configureCalendarApiWithBetterAuth(auth, options) {
419
+ const { getSessionUserNumeric: getSessionUserNumeric2 } = createSessionValidator(auth);
420
+ configureCalendarApiAuth((request) => getSessionUserNumeric2(request));
421
+ if (options?.db) {
422
+ calendarDbService.setDb(options.db);
423
+ }
424
+ }
425
+
426
+ // src/business/calendar/api/_shared.ts
427
+ function createCalendarAuthRequirement(validateAuth) {
428
+ return validateAuth;
429
+ }
430
+ function ensureCalendarDbReady() {
431
+ if (calendarDbService.isConfigured()) return null;
432
+ return Response.json(
433
+ {
434
+ success: false,
435
+ error: "Calendar DB is not initialized. Please call calendarDbService.setDb(db) or use create*Handler from sa2kit/calendar/routes with db injection."
436
+ },
437
+ { status: 500 }
438
+ );
439
+ }
440
+ function createDefaultCalendarRouteConfig(validateAuth) {
441
+ return {
442
+ validateAuth: resolveCalendarAuthValidator(validateAuth)
443
+ };
444
+ }
445
+ function withCalendarDbGuard(handler) {
446
+ return async (...args) => {
447
+ const dbError = ensureCalendarDbReady();
448
+ if (dbError) return dbError;
449
+ return handler(...args);
450
+ };
451
+ }
452
+
453
+ // src/business/calendar/api/route-handlers.ts
454
+ function resolveConfig(config) {
455
+ return config ?? createDefaultCalendarRouteConfig();
456
+ }
457
+ function lazyHandler(factory, config) {
458
+ let handler = null;
459
+ return (...args) => {
460
+ if (!handler) {
461
+ handler = factory(resolveConfig(config));
462
+ }
463
+ return handler(...args);
464
+ };
465
+ }
466
+ function createCalendarEventsRouteHandlers(config) {
467
+ return {
468
+ GET: withCalendarDbGuard(lazyHandler(createGetEventsHandler, config)),
469
+ POST: withCalendarDbGuard(lazyHandler(createCreateEventHandler, config))
470
+ };
471
+ }
472
+ function createCalendarEventByIdRouteHandlers(config) {
473
+ return {
474
+ GET: withCalendarDbGuard(
475
+ lazyHandler(createGetEventByIdHandler, config)
476
+ ),
477
+ PUT: withCalendarDbGuard(
478
+ lazyHandler(createUpdateEventHandler, config)
479
+ ),
480
+ DELETE: withCalendarDbGuard(
481
+ lazyHandler(createDeleteEventHandler, config)
482
+ )
483
+ };
484
+ }
485
+ function createCalendarBatchDeleteRouteHandlers(config) {
486
+ return {
487
+ DELETE: withCalendarDbGuard(lazyHandler(createBatchDeleteEventsHandler, config))
488
+ };
489
+ }
490
+ function createCalendarConfigRouteHandlers(config) {
491
+ let configHandlers = null;
492
+ const ensureConfigHandlers = () => {
493
+ if (!configHandlers) {
494
+ configHandlers = createConfigHandler(resolveConfig(config));
495
+ }
496
+ return configHandlers;
497
+ };
498
+ return {
499
+ GET: withCalendarDbGuard((request) => ensureConfigHandlers().GET(request)),
500
+ PUT: withCalendarDbGuard((request) => ensureConfigHandlers().PUT(request))
501
+ };
502
+ }
503
+
504
+ // src/business/calendar/routes/index.ts
505
+ function initDbService(db) {
506
+ if (db) {
507
+ calendarDbService.setDb(db);
508
+ }
509
+ }
510
+ function createGetEventsHandler(config) {
511
+ initDbService(config.db);
512
+ return async (request) => {
513
+ try {
514
+ const user2 = await config.validateAuth(request);
515
+ if (!user2) {
516
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
517
+ }
518
+ const { searchParams } = new URL(request.url);
519
+ const startDateStr = searchParams.get("startDate");
520
+ const endDateStr = searchParams.get("endDate");
521
+ let startDate;
522
+ let endDate;
523
+ if (startDateStr) {
524
+ startDate = new Date(startDateStr);
525
+ if (isNaN(startDate.getTime())) {
526
+ return NextResponse.json({ success: false, error: "\u5F00\u59CB\u65E5\u671F\u683C\u5F0F\u65E0\u6548" }, { status: 400 });
527
+ }
528
+ }
529
+ if (endDateStr) {
530
+ endDate = new Date(endDateStr);
531
+ if (isNaN(endDate.getTime())) {
532
+ return NextResponse.json({ success: false, error: "\u7ED3\u675F\u65E5\u671F\u683C\u5F0F\u65E0\u6548" }, { status: 400 });
533
+ }
534
+ }
535
+ const events = await calendarDbService.getAllEvents(user2.id, startDate, endDate);
536
+ return NextResponse.json({
537
+ success: true,
538
+ data: events,
539
+ message: "\u83B7\u53D6\u4E8B\u4EF6\u5217\u8868\u6210\u529F"
540
+ });
541
+ } catch (error) {
542
+ console.error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
543
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
544
+ }
545
+ };
546
+ }
547
+ function createCreateEventHandler(config) {
548
+ initDbService(config.db);
549
+ return async (request) => {
550
+ try {
551
+ const user2 = await config.validateAuth(request);
552
+ if (!user2) {
553
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
554
+ }
555
+ const body = await request.json();
556
+ if (!body.title || typeof body.title !== "string" || body.title.trim() === "") {
557
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A" }, { status: 400 });
558
+ }
559
+ if (!body.startTime || !body.endTime) {
560
+ return NextResponse.json({ success: false, error: "\u5F00\u59CB\u65F6\u95F4\u548C\u7ED3\u675F\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A" }, { status: 400 });
561
+ }
562
+ const startTime = new Date(body.startTime);
563
+ const endTime = new Date(body.endTime);
564
+ if (isNaN(startTime.getTime()) || isNaN(endTime.getTime())) {
565
+ return NextResponse.json({ success: false, error: "\u65E5\u671F\u683C\u5F0F\u65E0\u6548" }, { status: 400 });
566
+ }
567
+ if (startTime.getTime() >= endTime.getTime()) {
568
+ return NextResponse.json({ success: false, error: "\u7ED3\u675F\u65F6\u95F4\u5FC5\u987B\u665A\u4E8E\u5F00\u59CB\u65F6\u95F4" }, { status: 400 });
569
+ }
570
+ const eventData = {
571
+ title: body.title.trim(),
572
+ description: body.description || null,
573
+ startTime,
574
+ endTime,
575
+ allDay: Boolean(body.allDay),
576
+ location: body.location || null,
577
+ color: body.color || "#3B82F6",
578
+ userId: user2.id
579
+ };
580
+ const newEvent = await calendarDbService.createEvent(eventData);
581
+ if (body.recurrence) {
582
+ await calendarDbService.createRecurrenceRule({
583
+ eventId: newEvent.id,
584
+ ...body.recurrence,
585
+ endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : void 0
586
+ });
587
+ }
588
+ if (body.reminders && Array.isArray(body.reminders)) {
589
+ for (const reminder of body.reminders) {
590
+ if (reminder.reminderTime) {
591
+ await calendarDbService.createReminder({
592
+ eventId: newEvent.id,
593
+ reminderTime: new Date(reminder.reminderTime),
594
+ reminderType: reminder.reminderType || "notification",
595
+ status: "pending"
596
+ });
597
+ }
598
+ }
599
+ }
600
+ return NextResponse.json({
601
+ success: true,
602
+ data: newEvent,
603
+ message: "\u521B\u5EFA\u4E8B\u4EF6\u6210\u529F"
604
+ });
605
+ } catch (error) {
606
+ console.error("\u521B\u5EFA\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
607
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
608
+ }
609
+ };
610
+ }
611
+ function createGetEventByIdHandler(config) {
612
+ initDbService(config.db);
613
+ return async (request, { params }) => {
614
+ try {
615
+ const user2 = await config.validateAuth(request);
616
+ if (!user2) {
617
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
618
+ }
619
+ const eventId = parseInt(params.id);
620
+ if (isNaN(eventId)) {
621
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u65E0\u6548" }, { status: 400 });
622
+ }
623
+ const event = await calendarDbService.getEventById(eventId);
624
+ if (!event) {
625
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u4E0D\u5B58\u5728" }, { status: 404 });
626
+ }
627
+ if (event.userId !== user2.id) {
628
+ return NextResponse.json({ success: false, error: "\u65E0\u6743\u8BBF\u95EE\u6B64\u4E8B\u4EF6" }, { status: 403 });
629
+ }
630
+ const [recurrenceRule, reminders2] = await Promise.all([
631
+ calendarDbService.getRecurrenceRule(eventId),
632
+ calendarDbService.getEventReminders(eventId)
633
+ ]);
634
+ return NextResponse.json({
635
+ success: true,
636
+ data: {
637
+ ...event,
638
+ recurrenceRule: recurrenceRule || void 0,
639
+ reminders: reminders2 || []
640
+ },
641
+ message: "\u83B7\u53D6\u4E8B\u4EF6\u6210\u529F"
642
+ });
643
+ } catch (error) {
644
+ console.error("\u83B7\u53D6\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
645
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
646
+ }
647
+ };
648
+ }
649
+ function createUpdateEventHandler(config) {
650
+ initDbService(config.db);
651
+ return async (request, { params }) => {
652
+ try {
653
+ const user2 = await config.validateAuth(request);
654
+ if (!user2) {
655
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
656
+ }
657
+ const eventId = parseInt(params.id);
658
+ if (isNaN(eventId)) {
659
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u65E0\u6548" }, { status: 400 });
660
+ }
661
+ const existingEvent = await calendarDbService.getEventById(eventId);
662
+ if (!existingEvent || existingEvent.userId !== user2.id) {
663
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u4E0D\u5B58\u5728\u6216\u65E0\u6743\u4FEE\u6539" }, { status: 404 });
664
+ }
665
+ const body = await request.json();
666
+ const updateData = {};
667
+ if (body.title !== void 0) updateData.title = body.title.trim();
668
+ if (body.description !== void 0) updateData.description = body.description;
669
+ if (body.startTime !== void 0) updateData.startTime = new Date(body.startTime);
670
+ if (body.endTime !== void 0) updateData.endTime = new Date(body.endTime);
671
+ if (body.allDay !== void 0) updateData.allDay = Boolean(body.allDay);
672
+ if (body.location !== void 0) updateData.location = body.location;
673
+ if (body.color !== void 0) updateData.color = body.color;
674
+ const updatedEvent = await calendarDbService.updateEvent(eventId, updateData);
675
+ if (body.recurrence !== void 0) {
676
+ await calendarDbService.deleteRecurrenceRule(eventId);
677
+ if (body.recurrence) {
678
+ await calendarDbService.createRecurrenceRule({
679
+ eventId,
680
+ ...body.recurrence,
681
+ endDate: body.recurrence.endDate ? new Date(body.recurrence.endDate) : void 0
682
+ });
683
+ }
684
+ }
685
+ if (body.reminders !== void 0) {
686
+ await calendarDbService.deleteEventReminders(eventId);
687
+ if (Array.isArray(body.reminders)) {
688
+ for (const reminder of body.reminders) {
689
+ if (reminder.reminderTime) {
690
+ await calendarDbService.createReminder({
691
+ eventId,
692
+ reminderTime: new Date(reminder.reminderTime),
693
+ reminderType: reminder.reminderType || "notification",
694
+ status: "pending"
695
+ });
696
+ }
697
+ }
698
+ }
699
+ }
700
+ return NextResponse.json({
701
+ success: true,
702
+ data: updatedEvent,
703
+ message: "\u66F4\u65B0\u4E8B\u4EF6\u6210\u529F"
704
+ });
705
+ } catch (error) {
706
+ console.error("\u66F4\u65B0\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
707
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
708
+ }
709
+ };
710
+ }
711
+ function createDeleteEventHandler(config) {
712
+ initDbService(config.db);
713
+ return async (request, { params }) => {
714
+ try {
715
+ const user2 = await config.validateAuth(request);
716
+ if (!user2) {
717
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
718
+ }
719
+ const eventId = parseInt(params.id);
720
+ if (isNaN(eventId)) {
721
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u65E0\u6548" }, { status: 400 });
722
+ }
723
+ const existingEvent = await calendarDbService.getEventById(eventId);
724
+ if (!existingEvent || existingEvent.userId !== user2.id) {
725
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6\u4E0D\u5B58\u5728\u6216\u65E0\u6743\u5220\u9664" }, { status: 404 });
726
+ }
727
+ await calendarDbService.deleteEvent(eventId);
728
+ return NextResponse.json({
729
+ success: true,
730
+ message: "\u5220\u9664\u4E8B\u4EF6\u6210\u529F"
731
+ });
732
+ } catch (error) {
733
+ console.error("\u5220\u9664\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
734
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
735
+ }
736
+ };
737
+ }
738
+ function createBatchDeleteEventsHandler(config) {
739
+ initDbService(config.db);
740
+ return async (request) => {
741
+ try {
742
+ const user2 = await config.validateAuth(request);
743
+ if (!user2) {
744
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
745
+ }
746
+ const body = await request.json();
747
+ if (!body.eventIds || !Array.isArray(body.eventIds)) {
748
+ return NextResponse.json({ success: false, error: "\u4E8B\u4EF6ID\u5217\u8868\u4E0D\u80FD\u4E3A\u7A7A" }, { status: 400 });
749
+ }
750
+ const results = await Promise.all(
751
+ body.eventIds.map(async (id) => {
752
+ const event = await calendarDbService.getEventById(id);
753
+ if (event && event.userId === user2.id) {
754
+ await calendarDbService.deleteEvent(id);
755
+ return true;
756
+ }
757
+ return false;
758
+ })
759
+ );
760
+ const deletedCount = results.filter(Boolean).length;
761
+ return NextResponse.json({
762
+ success: true,
763
+ data: { deletedCount },
764
+ message: "\u6210\u529F\u5220\u9664 " + deletedCount + " \u4E2A\u4E8B\u4EF6"
765
+ });
766
+ } catch (error) {
767
+ console.error("\u6279\u91CF\u5220\u9664\u4E8B\u4EF6\u5931\u8D25\uFF1A", error);
768
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
769
+ }
770
+ };
771
+ }
772
+ function createConfigHandler(config) {
773
+ initDbService(config.db);
774
+ return {
775
+ GET: async (request) => {
776
+ try {
777
+ const user2 = await config.validateAuth(request);
778
+ if (!user2) {
779
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
780
+ }
781
+ const dbConfig = await calendarDbService.getUserConfig(user2.id);
782
+ return NextResponse.json({
783
+ success: true,
784
+ data: dbConfig || {
785
+ firstDayOfWeek: 1,
786
+ workingHoursStart: "09:00",
787
+ workingHoursEnd: "18:00",
788
+ timeZone: "Asia/Shanghai",
789
+ dateFormat: "YYYY-MM-DD",
790
+ timeFormat: "HH:mm",
791
+ defaultView: "month",
792
+ defaultEventColor: "#3B82F6",
793
+ weekends: true,
794
+ eventColors: {}
795
+ },
796
+ message: "\u83B7\u53D6\u914D\u7F6E\u6210\u529F"
797
+ });
798
+ } catch (error) {
799
+ console.error("\u83B7\u53D6\u914D\u7F6E\u5931\u8D25\uFF1A", error);
800
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
801
+ }
802
+ },
803
+ PUT: async (request) => {
804
+ try {
805
+ const user2 = await config.validateAuth(request);
806
+ if (!user2) {
807
+ return NextResponse.json({ success: false, error: "\u672A\u6388\u6743\u8BBF\u95EE" }, { status: 401 });
808
+ }
809
+ const body = await request.json();
810
+ const updatedConfig = await calendarDbService.upsertUserConfig(user2.id, body);
811
+ return NextResponse.json({
812
+ success: true,
813
+ data: updatedConfig,
814
+ message: "\u66F4\u65B0\u914D\u7F6E\u6210\u529F"
815
+ });
816
+ } catch (error) {
817
+ console.error("\u66F4\u65B0\u914D\u7F6E\u5931\u8D25\uFF1A", error);
818
+ return NextResponse.json({ success: false, error: "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF" }, { status: 500 });
819
+ }
820
+ }
821
+ };
822
+ }
823
+
824
+ export { configureCalendarApiAuth, configureCalendarApiWithBetterAuth, createBatchDeleteEventsHandler, createCalendarAuthRequirement, createCalendarBatchDeleteRouteHandlers, createCalendarConfigRouteHandlers, createCalendarEventByIdRouteHandlers, createCalendarEventsRouteHandlers, createConfigHandler, createCreateEventHandler, createDefaultCalendarRouteConfig, createDeleteEventHandler, createGetEventByIdHandler, createGetEventsHandler, createUpdateEventHandler, resetCalendarApiAuth, withCalendarDbGuard };
825
+ //# sourceMappingURL=index.mjs.map
826
+ //# sourceMappingURL=index.mjs.map