create-windy 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (904) hide show
  1. package/README.md +114 -0
  2. package/assets/LICENSE-Apache-2.0.txt +201 -0
  3. package/dist/cli.js +1662 -0
  4. package/package.json +37 -0
  5. package/template/.dockerignore +11 -0
  6. package/template/.oxfmtrc.json +9 -0
  7. package/template/.oxlintrc.json +119 -0
  8. package/template/.windy-template.json +71 -0
  9. package/template/AGENTS.md +87 -0
  10. package/template/README.md +128 -0
  11. package/template/apps/server/Dockerfile +34 -0
  12. package/template/apps/server/package.json +30 -0
  13. package/template/apps/server/src/access-guards.ts +112 -0
  14. package/template/apps/server/src/admin/routes.test.ts +105 -0
  15. package/template/apps/server/src/admin/routes.ts +95 -0
  16. package/template/apps/server/src/agent/data-scope-routes.test.ts +143 -0
  17. package/template/apps/server/src/agent/routes.test.ts +244 -0
  18. package/template/apps/server/src/agent/routes.ts +257 -0
  19. package/template/apps/server/src/api-app.ts +32 -0
  20. package/template/apps/server/src/application-services.ts +154 -0
  21. package/template/apps/server/src/audit/contracts.ts +21 -0
  22. package/template/apps/server/src/audit/drizzle-log-store.ts +150 -0
  23. package/template/apps/server/src/audit/policy.ts +18 -0
  24. package/template/apps/server/src/audit/recovery-queue.test.ts +42 -0
  25. package/template/apps/server/src/audit/recovery-queue.ts +63 -0
  26. package/template/apps/server/src/audit/redaction.ts +55 -0
  27. package/template/apps/server/src/audit/reliable-writer.test.ts +200 -0
  28. package/template/apps/server/src/audit/reliable-writer.ts +201 -0
  29. package/template/apps/server/src/audit/search-summary.ts +32 -0
  30. package/template/apps/server/src/auth/actor-resolver.test.ts +138 -0
  31. package/template/apps/server/src/auth/actor-resolver.ts +109 -0
  32. package/template/apps/server/src/auth/authentication-provider.test.ts +180 -0
  33. package/template/apps/server/src/auth/authentication-provider.ts +117 -0
  34. package/template/apps/server/src/auth/authorization-snapshot.test.ts +117 -0
  35. package/template/apps/server/src/auth/authorization-snapshot.ts +98 -0
  36. package/template/apps/server/src/auth/bearer-token.ts +5 -0
  37. package/template/apps/server/src/auth/bootstrap-admin.ts +33 -0
  38. package/template/apps/server/src/auth/credential-restriction.ts +29 -0
  39. package/template/apps/server/src/auth/credential-routes.test.ts +190 -0
  40. package/template/apps/server/src/auth/credential-service.ts +165 -0
  41. package/template/apps/server/src/auth/development-bypass.ts +22 -0
  42. package/template/apps/server/src/auth/drizzle-repository.ts +315 -0
  43. package/template/apps/server/src/auth/drizzle-session-operations.ts +119 -0
  44. package/template/apps/server/src/auth/login-routes.ts +121 -0
  45. package/template/apps/server/src/auth/own-session-routes.test.ts +248 -0
  46. package/template/apps/server/src/auth/own-session-routes.ts +110 -0
  47. package/template/apps/server/src/auth/password.test.ts +30 -0
  48. package/template/apps/server/src/auth/password.ts +46 -0
  49. package/template/apps/server/src/auth/repository.test.ts +61 -0
  50. package/template/apps/server/src/auth/repository.ts +305 -0
  51. package/template/apps/server/src/auth/routes.test.ts +350 -0
  52. package/template/apps/server/src/auth/routes.ts +237 -0
  53. package/template/apps/server/src/auth/runtime.ts +20 -0
  54. package/template/apps/server/src/auth/service.ts +329 -0
  55. package/template/apps/server/src/auth/session-service.ts +123 -0
  56. package/template/apps/server/src/background/task-guard.test.ts +66 -0
  57. package/template/apps/server/src/background/task-guard.ts +49 -0
  58. package/template/apps/server/src/bulk-data/artifact-store.ts +82 -0
  59. package/template/apps/server/src/bulk-data/dictionary-handler.ts +122 -0
  60. package/template/apps/server/src/bulk-data/drizzle-repository.integration.test.ts +156 -0
  61. package/template/apps/server/src/bulk-data/drizzle-repository.ts +298 -0
  62. package/template/apps/server/src/bulk-data/helpers.ts +36 -0
  63. package/template/apps/server/src/bulk-data/input-validation.ts +99 -0
  64. package/template/apps/server/src/bulk-data/repository.ts +246 -0
  65. package/template/apps/server/src/bulk-data/resource-handler.ts +27 -0
  66. package/template/apps/server/src/bulk-data/routes.test.ts +169 -0
  67. package/template/apps/server/src/bulk-data/routes.ts +248 -0
  68. package/template/apps/server/src/bulk-data/scheduler-integration.test.ts +142 -0
  69. package/template/apps/server/src/bulk-data/service.test.ts +347 -0
  70. package/template/apps/server/src/bulk-data/service.ts +319 -0
  71. package/template/apps/server/src/bulk-data/types.ts +73 -0
  72. package/template/apps/server/src/configuration/bootstrap.ts +59 -0
  73. package/template/apps/server/src/configuration/definition.ts +89 -0
  74. package/template/apps/server/src/configuration/drizzle-repository.ts +166 -0
  75. package/template/apps/server/src/configuration/repository.ts +138 -0
  76. package/template/apps/server/src/configuration/routes.test.ts +178 -0
  77. package/template/apps/server/src/configuration/routes.ts +260 -0
  78. package/template/apps/server/src/configuration/service.test.ts +128 -0
  79. package/template/apps/server/src/configuration/service.ts +187 -0
  80. package/template/apps/server/src/data-access/context.ts +162 -0
  81. package/template/apps/server/src/data-access/department-tree.ts +27 -0
  82. package/template/apps/server/src/data-access/drizzle-predicate.test.ts +86 -0
  83. package/template/apps/server/src/data-access/drizzle-predicate.ts +50 -0
  84. package/template/apps/server/src/data-access/errors.ts +5 -0
  85. package/template/apps/server/src/data-access/platform-actor.ts +25 -0
  86. package/template/apps/server/src/data-access/query-specification.test.ts +82 -0
  87. package/template/apps/server/src/data-access/query-specification.ts +77 -0
  88. package/template/apps/server/src/data-access/scoped-repository.integration.test.ts +203 -0
  89. package/template/apps/server/src/data-access/scoped-repository.ts +268 -0
  90. package/template/apps/server/src/data-access/scoped-resource.test.ts +158 -0
  91. package/template/apps/server/src/data-access/scoped-resource.ts +141 -0
  92. package/template/apps/server/src/data-governance/export/approval-port.ts +84 -0
  93. package/template/apps/server/src/data-governance/export/authorization-port.test.ts +103 -0
  94. package/template/apps/server/src/data-governance/export/authorization-port.ts +69 -0
  95. package/template/apps/server/src/data-governance/export/drizzle-repository.integration.test.ts +88 -0
  96. package/template/apps/server/src/data-governance/export/drizzle-repository.ts +97 -0
  97. package/template/apps/server/src/data-governance/export/job-runtime.test.ts +339 -0
  98. package/template/apps/server/src/data-governance/export/job-runtime.ts +242 -0
  99. package/template/apps/server/src/data-governance/export/ndjson-stream.ts +62 -0
  100. package/template/apps/server/src/data-governance/export/postgres-api-actors.ts +140 -0
  101. package/template/apps/server/src/data-governance/export/postgres-api-assertions.ts +76 -0
  102. package/template/apps/server/src/data-governance/export/postgres-api-fixture.ts +265 -0
  103. package/template/apps/server/src/data-governance/export/postgres-api.integration.test.ts +298 -0
  104. package/template/apps/server/src/data-governance/export/postgres-recovery.integration.test.ts +344 -0
  105. package/template/apps/server/src/data-governance/export/repository.test.ts +55 -0
  106. package/template/apps/server/src/data-governance/export/repository.ts +83 -0
  107. package/template/apps/server/src/data-governance/export/request-fingerprint.test.ts +51 -0
  108. package/template/apps/server/src/data-governance/export/request-fingerprint.ts +45 -0
  109. package/template/apps/server/src/data-governance/export/routes-integrity.test.ts +90 -0
  110. package/template/apps/server/src/data-governance/export/routes-test-fixture.ts +239 -0
  111. package/template/apps/server/src/data-governance/export/routes.test.ts +182 -0
  112. package/template/apps/server/src/data-governance/export/routes.ts +215 -0
  113. package/template/apps/server/src/data-governance/export/scope-snapshot.test.ts +45 -0
  114. package/template/apps/server/src/data-governance/export/scope-snapshot.ts +27 -0
  115. package/template/apps/server/src/data-governance/export/service.ts +337 -0
  116. package/template/apps/server/src/data-governance/export/source.ts +69 -0
  117. package/template/apps/server/src/data-governance/export/types.ts +55 -0
  118. package/template/apps/server/src/data-governance/plaintext-access.test.ts +70 -0
  119. package/template/apps/server/src/data-governance/plaintext-access.ts +88 -0
  120. package/template/apps/server/src/data-governance/plaintext-postgres.integration.test.ts +223 -0
  121. package/template/apps/server/src/data-governance/user-plaintext-routes.test.ts +287 -0
  122. package/template/apps/server/src/data-governance/user-plaintext-routes.ts +181 -0
  123. package/template/apps/server/src/data-governance/user-projection.ts +54 -0
  124. package/template/apps/server/src/data-governance/user-sensitive-read-service.ts +54 -0
  125. package/template/apps/server/src/example-modules.ts +62 -0
  126. package/template/apps/server/src/example-permissions.ts +5 -0
  127. package/template/apps/server/src/feature/manifest-feature-repository.test.ts +187 -0
  128. package/template/apps/server/src/feature/manifest-feature-repository.ts +200 -0
  129. package/template/apps/server/src/feature/routes.authorization.test.ts +199 -0
  130. package/template/apps/server/src/feature/routes.ts +193 -0
  131. package/template/apps/server/src/foundation-access.test.ts +50 -0
  132. package/template/apps/server/src/foundation-access.ts +34 -0
  133. package/template/apps/server/src/foundation-route.ts +55 -0
  134. package/template/apps/server/src/foundation.ts +85 -0
  135. package/template/apps/server/src/guards.test.ts +74 -0
  136. package/template/apps/server/src/guards.ts +214 -0
  137. package/template/apps/server/src/http-app.test.ts +77 -0
  138. package/template/apps/server/src/http-app.ts +51 -0
  139. package/template/apps/server/src/index.ts +374 -0
  140. package/template/apps/server/src/jobs/artifact-service.test.ts +78 -0
  141. package/template/apps/server/src/jobs/artifact-service.ts +94 -0
  142. package/template/apps/server/src/jobs/drizzle-artifact.ts +63 -0
  143. package/template/apps/server/src/jobs/drizzle-claim.ts +111 -0
  144. package/template/apps/server/src/jobs/drizzle-execution-repository.ts +299 -0
  145. package/template/apps/server/src/jobs/drizzle-execution.integration.test.ts +232 -0
  146. package/template/apps/server/src/jobs/drizzle-lease.ts +21 -0
  147. package/template/apps/server/src/jobs/drizzle-mappers.ts +121 -0
  148. package/template/apps/server/src/jobs/drizzle-recovery-repository.ts +214 -0
  149. package/template/apps/server/src/jobs/drizzle-repository.integration.test.ts +135 -0
  150. package/template/apps/server/src/jobs/drizzle-repository.ts +268 -0
  151. package/template/apps/server/src/jobs/execution-repository.ts +72 -0
  152. package/template/apps/server/src/jobs/execution.test.ts +303 -0
  153. package/template/apps/server/src/jobs/handler-registry.ts +81 -0
  154. package/template/apps/server/src/jobs/in-memory-claim.ts +96 -0
  155. package/template/apps/server/src/jobs/in-memory-execution.ts +336 -0
  156. package/template/apps/server/src/jobs/in-memory-lease.ts +66 -0
  157. package/template/apps/server/src/jobs/legacy-adapter.integration.test.ts +177 -0
  158. package/template/apps/server/src/jobs/legacy-adapter.test.ts +199 -0
  159. package/template/apps/server/src/jobs/legacy-adapter.ts +109 -0
  160. package/template/apps/server/src/jobs/legacy-service-runtime.ts +95 -0
  161. package/template/apps/server/src/jobs/repository.ts +141 -0
  162. package/template/apps/server/src/jobs/service.test.ts +64 -0
  163. package/template/apps/server/src/jobs/service.ts +44 -0
  164. package/template/apps/server/src/jobs/types.ts +180 -0
  165. package/template/apps/server/src/jobs/worker.ts +258 -0
  166. package/template/apps/server/src/license/legacy-license-resolver.ts +23 -0
  167. package/template/apps/server/src/license/license-resolver.test.ts +55 -0
  168. package/template/apps/server/src/license/license-resolver.ts +122 -0
  169. package/template/apps/server/src/license/reminder.test.ts +61 -0
  170. package/template/apps/server/src/license/reminder.ts +33 -0
  171. package/template/apps/server/src/license/restriction.test.ts +54 -0
  172. package/template/apps/server/src/license/restriction.ts +80 -0
  173. package/template/apps/server/src/license/routes-offline-code.test.ts +173 -0
  174. package/template/apps/server/src/license/routes.ts +99 -0
  175. package/template/apps/server/src/license/runtime-audit-reliability.test.ts +96 -0
  176. package/template/apps/server/src/license/runtime-reminder.test.ts +147 -0
  177. package/template/apps/server/src/license/runtime-service-test-http.ts +28 -0
  178. package/template/apps/server/src/license/runtime-service.test.ts +334 -0
  179. package/template/apps/server/src/license/runtime-service.ts +308 -0
  180. package/template/apps/server/src/module-composition.test.ts +70 -0
  181. package/template/apps/server/src/module-composition.ts +28 -0
  182. package/template/apps/server/src/notification/drizzle-repository.ts +233 -0
  183. package/template/apps/server/src/notification/repository.ts +160 -0
  184. package/template/apps/server/src/notification/routes.test.ts +151 -0
  185. package/template/apps/server/src/notification/routes.ts +185 -0
  186. package/template/apps/server/src/observability/bootstrap.ts +56 -0
  187. package/template/apps/server/src/observability/http-observability.test.ts +53 -0
  188. package/template/apps/server/src/observability/http-observability.ts +54 -0
  189. package/template/apps/server/src/observability/metrics.test.ts +36 -0
  190. package/template/apps/server/src/observability/metrics.ts +105 -0
  191. package/template/apps/server/src/observability/readiness.test.ts +36 -0
  192. package/template/apps/server/src/observability/readiness.ts +43 -0
  193. package/template/apps/server/src/observability/routes.test.ts +61 -0
  194. package/template/apps/server/src/observability/routes.ts +44 -0
  195. package/template/apps/server/src/pagination.ts +31 -0
  196. package/template/apps/server/src/persistence.integration.test.ts +54 -0
  197. package/template/apps/server/src/persistence.ts +118 -0
  198. package/template/apps/server/src/profile/routes.test.ts +190 -0
  199. package/template/apps/server/src/profile/routes.ts +173 -0
  200. package/template/apps/server/src/request-restriction.ts +29 -0
  201. package/template/apps/server/src/route-guards.test.ts +148 -0
  202. package/template/apps/server/src/route-guards.ts +63 -0
  203. package/template/apps/server/src/runtime-audit-list.test.ts +98 -0
  204. package/template/apps/server/src/runtime-config.ts +11 -0
  205. package/template/apps/server/src/runtime-development.ts +68 -0
  206. package/template/apps/server/src/runtime-license.ts +50 -0
  207. package/template/apps/server/src/runtime.test.ts +264 -0
  208. package/template/apps/server/src/runtime.ts +324 -0
  209. package/template/apps/server/src/scheduler/audit.ts +38 -0
  210. package/template/apps/server/src/scheduler/definitions.test.ts +35 -0
  211. package/template/apps/server/src/scheduler/definitions.ts +79 -0
  212. package/template/apps/server/src/scheduler/drizzle-durable-links.ts +52 -0
  213. package/template/apps/server/src/scheduler/drizzle-mappers.ts +36 -0
  214. package/template/apps/server/src/scheduler/drizzle-repository.integration.test.ts +174 -0
  215. package/template/apps/server/src/scheduler/drizzle-repository.ts +348 -0
  216. package/template/apps/server/src/scheduler/execution-context.ts +24 -0
  217. package/template/apps/server/src/scheduler/execution-recorder.ts +101 -0
  218. package/template/apps/server/src/scheduler/feature-preflight.ts +40 -0
  219. package/template/apps/server/src/scheduler/history.ts +22 -0
  220. package/template/apps/server/src/scheduler/overview.test.ts +89 -0
  221. package/template/apps/server/src/scheduler/overview.ts +125 -0
  222. package/template/apps/server/src/scheduler/recovery-conflict.ts +19 -0
  223. package/template/apps/server/src/scheduler/recovery-service.test.ts +238 -0
  224. package/template/apps/server/src/scheduler/recovery-service.ts +152 -0
  225. package/template/apps/server/src/scheduler/repository.ts +274 -0
  226. package/template/apps/server/src/scheduler/routes.test.ts +347 -0
  227. package/template/apps/server/src/scheduler/routes.ts +222 -0
  228. package/template/apps/server/src/scheduler/sensitive-text.ts +20 -0
  229. package/template/apps/server/src/scheduler/service-idle.test.ts +73 -0
  230. package/template/apps/server/src/scheduler/service.test.ts +330 -0
  231. package/template/apps/server/src/scheduler/service.ts +339 -0
  232. package/template/apps/server/src/scheduler/types.ts +103 -0
  233. package/template/apps/server/src/scheduler/worker.ts +38 -0
  234. package/template/apps/server/src/search/config.test.ts +43 -0
  235. package/template/apps/server/src/search/config.ts +62 -0
  236. package/template/apps/server/src/search/contracts.ts +127 -0
  237. package/template/apps/server/src/search/cursor.ts +39 -0
  238. package/template/apps/server/src/search/errors.ts +11 -0
  239. package/template/apps/server/src/search/host.ts +36 -0
  240. package/template/apps/server/src/search/masking.ts +6 -0
  241. package/template/apps/server/src/search/provider-execution.ts +195 -0
  242. package/template/apps/server/src/search/rate-limiter.ts +23 -0
  243. package/template/apps/server/src/search/registry.ts +105 -0
  244. package/template/apps/server/src/search/routes.test.ts +156 -0
  245. package/template/apps/server/src/search/routes.ts +95 -0
  246. package/template/apps/server/src/search/service.test.ts +314 -0
  247. package/template/apps/server/src/search/service.ts +257 -0
  248. package/template/apps/server/src/search/test-support.ts +122 -0
  249. package/template/apps/server/src/session/routes.test.ts +111 -0
  250. package/template/apps/server/src/session/routes.ts +56 -0
  251. package/template/apps/server/src/settings/drizzle-repository.ts +66 -0
  252. package/template/apps/server/src/settings/repository.ts +29 -0
  253. package/template/apps/server/src/settings/routes.test.ts +250 -0
  254. package/template/apps/server/src/settings/routes.ts +175 -0
  255. package/template/apps/server/src/settings/runtime.ts +13 -0
  256. package/template/apps/server/src/storage/blob-reference-registry.test.ts +25 -0
  257. package/template/apps/server/src/storage/blob-reference-registry.ts +15 -0
  258. package/template/apps/server/src/storage/drizzle-upload-repository.integration.test.ts +136 -0
  259. package/template/apps/server/src/storage/drizzle-upload-repository.ts +248 -0
  260. package/template/apps/server/src/storage/route-support.ts +84 -0
  261. package/template/apps/server/src/storage/routes.test.ts +288 -0
  262. package/template/apps/server/src/storage/routes.ts +297 -0
  263. package/template/apps/server/src/storage/runtime.ts +86 -0
  264. package/template/apps/server/src/system/audit-query.ts +17 -0
  265. package/template/apps/server/src/system/audit-routes.test.ts +139 -0
  266. package/template/apps/server/src/system/audit-routes.ts +113 -0
  267. package/template/apps/server/src/system/built-in-roles.ts +116 -0
  268. package/template/apps/server/src/system/department-routes.test.ts +80 -0
  269. package/template/apps/server/src/system/department-routes.ts +90 -0
  270. package/template/apps/server/src/system/drizzle-mapping.ts +53 -0
  271. package/template/apps/server/src/system/drizzle-repository.ts +298 -0
  272. package/template/apps/server/src/system/drizzle-scoped-repository.ts +235 -0
  273. package/template/apps/server/src/system/drizzle-system.ts +361 -0
  274. package/template/apps/server/src/system/entities.ts +78 -0
  275. package/template/apps/server/src/system/feature-routes.test.ts +55 -0
  276. package/template/apps/server/src/system/identity-route-config.ts +73 -0
  277. package/template/apps/server/src/system/interface-catalog.test.ts +103 -0
  278. package/template/apps/server/src/system/interface-catalog.ts +82 -0
  279. package/template/apps/server/src/system/menu-registry.test.ts +125 -0
  280. package/template/apps/server/src/system/menu-registry.ts +259 -0
  281. package/template/apps/server/src/system/menu-routes.test.ts +68 -0
  282. package/template/apps/server/src/system/menu-routes.ts +200 -0
  283. package/template/apps/server/src/system/mutation-runner.ts +33 -0
  284. package/template/apps/server/src/system/operation-monitoring.test.ts +78 -0
  285. package/template/apps/server/src/system/operation-monitoring.ts +233 -0
  286. package/template/apps/server/src/system/operations.test.ts +269 -0
  287. package/template/apps/server/src/system/operations.ts +155 -0
  288. package/template/apps/server/src/system/postgres-monitoring.ts +31 -0
  289. package/template/apps/server/src/system/redis-health.test.ts +116 -0
  290. package/template/apps/server/src/system/redis-health.ts +230 -0
  291. package/template/apps/server/src/system/repository.ts +234 -0
  292. package/template/apps/server/src/system/resource-access-response.ts +47 -0
  293. package/template/apps/server/src/system/resource-export-route.ts +64 -0
  294. package/template/apps/server/src/system/resource-route-support.ts +50 -0
  295. package/template/apps/server/src/system/response-projection.ts +24 -0
  296. package/template/apps/server/src/system/route-helpers.ts +104 -0
  297. package/template/apps/server/src/system/route-test-app.ts +27 -0
  298. package/template/apps/server/src/system/route-types.ts +52 -0
  299. package/template/apps/server/src/system/routes-validation.test.ts +61 -0
  300. package/template/apps/server/src/system/routes.test.ts +311 -0
  301. package/template/apps/server/src/system/routes.ts +354 -0
  302. package/template/apps/server/src/system/seed.test.ts +129 -0
  303. package/template/apps/server/src/system/seed.ts +237 -0
  304. package/template/apps/server/src/system/user-account-policy.test.ts +158 -0
  305. package/template/apps/server/src/system/user-account-policy.ts +103 -0
  306. package/template/apps/server/src/system/user-data-scope.ts +10 -0
  307. package/template/apps/server/src/system/user-department-validation.ts +17 -0
  308. package/template/apps/server/src/system/user-projection.test.ts +40 -0
  309. package/template/apps/server/src/system/user-projection.ts +35 -0
  310. package/template/apps/server/src/work-order/data-scope.integration.test.ts +171 -0
  311. package/template/apps/server/src/work-order/drizzle-repository.integration.test.ts +78 -0
  312. package/template/apps/server/src/work-order/drizzle-repository.ts +67 -0
  313. package/template/apps/server/src/work-order/foundation-modules.test.ts +85 -0
  314. package/template/apps/server/src/work-order/repository.ts +46 -0
  315. package/template/apps/server/src/work-order/routes.test.ts +209 -0
  316. package/template/apps/server/src/work-order/routes.ts +159 -0
  317. package/template/apps/server/src/work-order/search-api.test.ts +121 -0
  318. package/template/apps/server/src/work-order/search-provider.test.ts +201 -0
  319. package/template/apps/server/src/work-order/search-provider.ts +59 -0
  320. package/template/apps/server/src/work-order/service.ts +82 -0
  321. package/template/apps/server/src/work-order/task.test.ts +79 -0
  322. package/template/apps/server/src/work-order/task.ts +30 -0
  323. package/template/apps/server/src/workflow/assignee-directory.ts +23 -0
  324. package/template/apps/server/src/workflow/drizzle-repository.integration.test.ts +213 -0
  325. package/template/apps/server/src/workflow/drizzle-repository.ts +299 -0
  326. package/template/apps/server/src/workflow/effects.test.ts +64 -0
  327. package/template/apps/server/src/workflow/effects.ts +112 -0
  328. package/template/apps/server/src/workflow/repository.ts +160 -0
  329. package/template/apps/server/src/workflow/routes.test.ts +256 -0
  330. package/template/apps/server/src/workflow/routes.ts +249 -0
  331. package/template/apps/server/src/workflow/service.ts +196 -0
  332. package/template/apps/server/src/workflow/timeout-runtime.test.ts +96 -0
  333. package/template/apps/server/src/workflow/timeout-runtime.ts +66 -0
  334. package/template/apps/server/tsconfig.json +17 -0
  335. package/template/apps/web/Dockerfile +41 -0
  336. package/template/apps/web/components.json +24 -0
  337. package/template/apps/web/dev/dev-identity.ts +58 -0
  338. package/template/apps/web/dev/dev-port.test.ts +53 -0
  339. package/template/apps/web/dev/dev-port.ts +68 -0
  340. package/template/apps/web/dev/start.ts +37 -0
  341. package/template/apps/web/index.html +14 -0
  342. package/template/apps/web/package.json +44 -0
  343. package/template/apps/web/runtime-server.test.ts +86 -0
  344. package/template/apps/web/runtime-server.ts +143 -0
  345. package/template/apps/web/server.ts +21 -0
  346. package/template/apps/web/src/App.vue +22 -0
  347. package/template/apps/web/src/app/home/HomePage.vue +75 -0
  348. package/template/apps/web/src/app/home/HomeWelcome.vue +85 -0
  349. package/template/apps/web/src/app/home/HomeWelcome.webtest.ts +32 -0
  350. package/template/apps/web/src/app/layouts/AppLayout.vue +10 -0
  351. package/template/apps/web/src/components/auth/DevelopmentAuthWarning.vue +15 -0
  352. package/template/apps/web/src/components/auth/LoginForm.vue +80 -0
  353. package/template/apps/web/src/components/auth/LoginForm.webtest.ts +33 -0
  354. package/template/apps/web/src/components/auth/PasswordChangeForm.vue +90 -0
  355. package/template/apps/web/src/components/auth/UserSessionMenu.vue +60 -0
  356. package/template/apps/web/src/components/auth/UserSessionMenu.webtest.ts +45 -0
  357. package/template/apps/web/src/components/common/ConfirmDialog.vue +75 -0
  358. package/template/apps/web/src/components/common/DataPagination.vue +79 -0
  359. package/template/apps/web/src/components/common/DataPagination.webtest.ts +28 -0
  360. package/template/apps/web/src/components/common/EmptyState.vue +43 -0
  361. package/template/apps/web/src/components/common/FormDialog.vue +86 -0
  362. package/template/apps/web/src/components/common/ModalBody.vue +19 -0
  363. package/template/apps/web/src/components/common/ModalLayout.webtest.ts +54 -0
  364. package/template/apps/web/src/components/common/PageError.vue +46 -0
  365. package/template/apps/web/src/components/common/PageLoading.vue +41 -0
  366. package/template/apps/web/src/components/common/StatusSummary.vue +37 -0
  367. package/template/apps/web/src/components/common/UnsavedChangesDialog.vue +60 -0
  368. package/template/apps/web/src/components/common/UnsavedChangesDialog.webtest.ts +60 -0
  369. package/template/apps/web/src/components/license/LicenseActivationCodeForm.vue +80 -0
  370. package/template/apps/web/src/components/license/LicenseExpiryBanner.vue +54 -0
  371. package/template/apps/web/src/components/license/LicenseFlow.webtest.ts +170 -0
  372. package/template/apps/web/src/components/license/LicenseStatusCard.vue +95 -0
  373. package/template/apps/web/src/components/license/LicenseUploadForm.vue +79 -0
  374. package/template/apps/web/src/components/license/license-display.ts +12 -0
  375. package/template/apps/web/src/components/ui/alert/Alert.vue +21 -0
  376. package/template/apps/web/src/components/ui/alert/AlertAction.vue +17 -0
  377. package/template/apps/web/src/components/ui/alert/AlertDescription.vue +22 -0
  378. package/template/apps/web/src/components/ui/alert/AlertTitle.vue +22 -0
  379. package/template/apps/web/src/components/ui/alert/index.ts +25 -0
  380. package/template/apps/web/src/components/ui/badge/Badge.vue +29 -0
  381. package/template/apps/web/src/components/ui/badge/index.ts +28 -0
  382. package/template/apps/web/src/components/ui/breadcrumb/Breadcrumb.vue +18 -0
  383. package/template/apps/web/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +26 -0
  384. package/template/apps/web/src/components/ui/breadcrumb/BreadcrumbItem.vue +17 -0
  385. package/template/apps/web/src/components/ui/breadcrumb/BreadcrumbLink.vue +24 -0
  386. package/template/apps/web/src/components/ui/breadcrumb/BreadcrumbList.vue +22 -0
  387. package/template/apps/web/src/components/ui/breadcrumb/BreadcrumbPage.vue +20 -0
  388. package/template/apps/web/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +23 -0
  389. package/template/apps/web/src/components/ui/breadcrumb/index.ts +7 -0
  390. package/template/apps/web/src/components/ui/button/Button.vue +31 -0
  391. package/template/apps/web/src/components/ui/button/index.ts +42 -0
  392. package/template/apps/web/src/components/ui/card/Card.vue +29 -0
  393. package/template/apps/web/src/components/ui/card/CardAction.vue +22 -0
  394. package/template/apps/web/src/components/ui/card/CardContent.vue +17 -0
  395. package/template/apps/web/src/components/ui/card/CardDescription.vue +17 -0
  396. package/template/apps/web/src/components/ui/card/CardFooter.vue +22 -0
  397. package/template/apps/web/src/components/ui/card/CardHeader.vue +22 -0
  398. package/template/apps/web/src/components/ui/card/CardTitle.vue +22 -0
  399. package/template/apps/web/src/components/ui/card/index.ts +7 -0
  400. package/template/apps/web/src/components/ui/checkbox/Checkbox.vue +41 -0
  401. package/template/apps/web/src/components/ui/checkbox/index.ts +1 -0
  402. package/template/apps/web/src/components/ui/dialog/Dialog.vue +15 -0
  403. package/template/apps/web/src/components/ui/dialog/DialogClose.vue +12 -0
  404. package/template/apps/web/src/components/ui/dialog/DialogContent.vue +62 -0
  405. package/template/apps/web/src/components/ui/dialog/DialogDescription.vue +30 -0
  406. package/template/apps/web/src/components/ui/dialog/DialogFooter.vue +33 -0
  407. package/template/apps/web/src/components/ui/dialog/DialogHeader.vue +17 -0
  408. package/template/apps/web/src/components/ui/dialog/DialogOverlay.vue +28 -0
  409. package/template/apps/web/src/components/ui/dialog/DialogScrollContent.vue +67 -0
  410. package/template/apps/web/src/components/ui/dialog/DialogTitle.vue +27 -0
  411. package/template/apps/web/src/components/ui/dialog/DialogTrigger.vue +12 -0
  412. package/template/apps/web/src/components/ui/dialog/index.ts +10 -0
  413. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
  414. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +50 -0
  415. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuContent.vue +48 -0
  416. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  417. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuItem.vue +41 -0
  418. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +30 -0
  419. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
  420. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +51 -0
  421. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  422. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +22 -0
  423. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  424. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +34 -0
  425. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +36 -0
  426. package/template/apps/web/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  427. package/template/apps/web/src/components/ui/dropdown-menu/index.ts +16 -0
  428. package/template/apps/web/src/components/ui/input/Input.vue +33 -0
  429. package/template/apps/web/src/components/ui/input/index.ts +1 -0
  430. package/template/apps/web/src/components/ui/select/Select.vue +15 -0
  431. package/template/apps/web/src/components/ui/select/SelectContent.vue +61 -0
  432. package/template/apps/web/src/components/ui/select/SelectGroup.vue +23 -0
  433. package/template/apps/web/src/components/ui/select/SelectItem.vue +49 -0
  434. package/template/apps/web/src/components/ui/select/SelectItemText.vue +12 -0
  435. package/template/apps/web/src/components/ui/select/SelectLabel.vue +19 -0
  436. package/template/apps/web/src/components/ui/select/SelectScrollDownButton.vue +34 -0
  437. package/template/apps/web/src/components/ui/select/SelectScrollUpButton.vue +34 -0
  438. package/template/apps/web/src/components/ui/select/SelectSeparator.vue +21 -0
  439. package/template/apps/web/src/components/ui/select/SelectTrigger.vue +43 -0
  440. package/template/apps/web/src/components/ui/select/SelectValue.vue +12 -0
  441. package/template/apps/web/src/components/ui/select/index.ts +11 -0
  442. package/template/apps/web/src/components/ui/separator/Separator.vue +30 -0
  443. package/template/apps/web/src/components/ui/separator/index.ts +1 -0
  444. package/template/apps/web/src/components/ui/sheet/Sheet.vue +15 -0
  445. package/template/apps/web/src/components/ui/sheet/SheetClose.vue +12 -0
  446. package/template/apps/web/src/components/ui/sheet/SheetContent.vue +62 -0
  447. package/template/apps/web/src/components/ui/sheet/SheetDescription.vue +23 -0
  448. package/template/apps/web/src/components/ui/sheet/SheetFooter.vue +15 -0
  449. package/template/apps/web/src/components/ui/sheet/SheetHeader.vue +15 -0
  450. package/template/apps/web/src/components/ui/sheet/SheetOverlay.vue +28 -0
  451. package/template/apps/web/src/components/ui/sheet/SheetTitle.vue +25 -0
  452. package/template/apps/web/src/components/ui/sheet/SheetTrigger.vue +12 -0
  453. package/template/apps/web/src/components/ui/sheet/index.ts +8 -0
  454. package/template/apps/web/src/components/ui/sidebar/Sidebar.vue +114 -0
  455. package/template/apps/web/src/components/ui/sidebar/SidebarContent.vue +23 -0
  456. package/template/apps/web/src/components/ui/sidebar/SidebarFooter.vue +18 -0
  457. package/template/apps/web/src/components/ui/sidebar/SidebarGroup.vue +18 -0
  458. package/template/apps/web/src/components/ui/sidebar/SidebarGroupAction.vue +29 -0
  459. package/template/apps/web/src/components/ui/sidebar/SidebarGroupContent.vue +18 -0
  460. package/template/apps/web/src/components/ui/sidebar/SidebarGroupLabel.vue +29 -0
  461. package/template/apps/web/src/components/ui/sidebar/SidebarHeader.vue +18 -0
  462. package/template/apps/web/src/components/ui/sidebar/SidebarInput.vue +19 -0
  463. package/template/apps/web/src/components/ui/sidebar/SidebarInset.vue +22 -0
  464. package/template/apps/web/src/components/ui/sidebar/SidebarMenu.vue +18 -0
  465. package/template/apps/web/src/components/ui/sidebar/SidebarMenuAction.vue +37 -0
  466. package/template/apps/web/src/components/ui/sidebar/SidebarMenuBadge.vue +23 -0
  467. package/template/apps/web/src/components/ui/sidebar/SidebarMenuButton.vue +60 -0
  468. package/template/apps/web/src/components/ui/sidebar/SidebarMenuButtonChild.vue +36 -0
  469. package/template/apps/web/src/components/ui/sidebar/SidebarMenuItem.vue +18 -0
  470. package/template/apps/web/src/components/ui/sidebar/SidebarMenuSkeleton.vue +35 -0
  471. package/template/apps/web/src/components/ui/sidebar/SidebarMenuSub.vue +23 -0
  472. package/template/apps/web/src/components/ui/sidebar/SidebarMenuSubButton.vue +39 -0
  473. package/template/apps/web/src/components/ui/sidebar/SidebarMenuSubItem.vue +18 -0
  474. package/template/apps/web/src/components/ui/sidebar/SidebarProvider.vue +128 -0
  475. package/template/apps/web/src/components/ui/sidebar/SidebarRail.vue +94 -0
  476. package/template/apps/web/src/components/ui/sidebar/SidebarSeparator.vue +19 -0
  477. package/template/apps/web/src/components/ui/sidebar/SidebarTrigger.vue +28 -0
  478. package/template/apps/web/src/components/ui/sidebar/index.ts +62 -0
  479. package/template/apps/web/src/components/ui/sidebar/sidebar-width.ts +29 -0
  480. package/template/apps/web/src/components/ui/sidebar/sidebar-width.webtest.ts +28 -0
  481. package/template/apps/web/src/components/ui/sidebar/utils.ts +26 -0
  482. package/template/apps/web/src/components/ui/skeleton/Skeleton.vue +17 -0
  483. package/template/apps/web/src/components/ui/skeleton/index.ts +1 -0
  484. package/template/apps/web/src/components/ui/sonner/Sonner.vue +70 -0
  485. package/template/apps/web/src/components/ui/sonner/index.ts +1 -0
  486. package/template/apps/web/src/components/ui/switch/Switch.vue +47 -0
  487. package/template/apps/web/src/components/ui/switch/Switch.webtest.ts +23 -0
  488. package/template/apps/web/src/components/ui/switch/index.ts +1 -0
  489. package/template/apps/web/src/components/ui/table/Table.vue +19 -0
  490. package/template/apps/web/src/components/ui/table/TableBody.vue +17 -0
  491. package/template/apps/web/src/components/ui/table/TableCaption.vue +17 -0
  492. package/template/apps/web/src/components/ui/table/TableCell.vue +22 -0
  493. package/template/apps/web/src/components/ui/table/TableEmpty.vue +37 -0
  494. package/template/apps/web/src/components/ui/table/TableFooter.vue +19 -0
  495. package/template/apps/web/src/components/ui/table/TableHead.vue +22 -0
  496. package/template/apps/web/src/components/ui/table/TableHeader.vue +14 -0
  497. package/template/apps/web/src/components/ui/table/TableRow.vue +22 -0
  498. package/template/apps/web/src/components/ui/table/index.ts +9 -0
  499. package/template/apps/web/src/components/ui/table/utils.ts +10 -0
  500. package/template/apps/web/src/components/ui/tabs/Tabs.vue +27 -0
  501. package/template/apps/web/src/components/ui/tabs/TabsContent.vue +23 -0
  502. package/template/apps/web/src/components/ui/tabs/TabsList.vue +34 -0
  503. package/template/apps/web/src/components/ui/tabs/TabsTrigger.vue +33 -0
  504. package/template/apps/web/src/components/ui/tabs/index.ts +24 -0
  505. package/template/apps/web/src/components/ui/tooltip/Tooltip.vue +15 -0
  506. package/template/apps/web/src/components/ui/tooltip/TooltipContent.vue +49 -0
  507. package/template/apps/web/src/components/ui/tooltip/TooltipProvider.vue +14 -0
  508. package/template/apps/web/src/components/ui/tooltip/TooltipTrigger.vue +12 -0
  509. package/template/apps/web/src/components/ui/tooltip/index.ts +4 -0
  510. package/template/apps/web/src/composables/useAccessSnapshot.ts +55 -0
  511. package/template/apps/web/src/composables/useAccessSnapshot.webtest.ts +39 -0
  512. package/template/apps/web/src/composables/useAppToast.ts +30 -0
  513. package/template/apps/web/src/composables/useAuthSession.ts +127 -0
  514. package/template/apps/web/src/composables/useAuthSession.webtest.ts +48 -0
  515. package/template/apps/web/src/composables/useLicenseReminderRefresh.ts +27 -0
  516. package/template/apps/web/src/composables/useLicenseReminderRefresh.webtest.ts +30 -0
  517. package/template/apps/web/src/composables/useLicenseRuntime.ts +90 -0
  518. package/template/apps/web/src/composables/useLoginFlow.ts +39 -0
  519. package/template/apps/web/src/composables/useModuleConfigurations.ts +116 -0
  520. package/template/apps/web/src/composables/usePasswordChange.ts +31 -0
  521. package/template/apps/web/src/composables/usePlatformSettings.ts +90 -0
  522. package/template/apps/web/src/composables/useSessionContext.ts +56 -0
  523. package/template/apps/web/src/composables/useTheme.ts +123 -0
  524. package/template/apps/web/src/composables/useUnsavedChangesConfirmation.ts +55 -0
  525. package/template/apps/web/src/composables/useWatermarkSettings.ts +56 -0
  526. package/template/apps/web/src/composables/watermark-settings.ts +45 -0
  527. package/template/apps/web/src/composables/watermark-settings.webtest.ts +38 -0
  528. package/template/apps/web/src/env.d.ts +17 -0
  529. package/template/apps/web/src/layout/AppHeader.vue +107 -0
  530. package/template/apps/web/src/layout/AppShell.vue +55 -0
  531. package/template/apps/web/src/layout/AppShell.webtest.ts +75 -0
  532. package/template/apps/web/src/layout/AppSidebar.vue +262 -0
  533. package/template/apps/web/src/layout/AppSidebar.webtest.ts +167 -0
  534. package/template/apps/web/src/layout/GlobalWatermark.vue +38 -0
  535. package/template/apps/web/src/layout/NavigationSearchDialog.vue +166 -0
  536. package/template/apps/web/src/layout/NavigationSearchDialog.webtest.ts +84 -0
  537. package/template/apps/web/src/layout/NotificationMenu.vue +174 -0
  538. package/template/apps/web/src/layout/NotificationMenu.webtest.ts +102 -0
  539. package/template/apps/web/src/layout/ThemeToggle.vue +44 -0
  540. package/template/apps/web/src/layout/navigation.ts +103 -0
  541. package/template/apps/web/src/layout/navigation.webtest.ts +99 -0
  542. package/template/apps/web/src/lib/date-time.ts +21 -0
  543. package/template/apps/web/src/lib/date-time.webtest.ts +14 -0
  544. package/template/apps/web/src/lib/utils.ts +7 -0
  545. package/template/apps/web/src/main.ts +11 -0
  546. package/template/apps/web/src/pages/AccessDeniedPage.vue +61 -0
  547. package/template/apps/web/src/pages/auth/ChangePasswordPage.vue +46 -0
  548. package/template/apps/web/src/pages/auth/LoginPage.vue +63 -0
  549. package/template/apps/web/src/pages/configuration/ModuleConfigurationPage.vue +15 -0
  550. package/template/apps/web/src/pages/configuration/components/ModuleConfigRollbackDialog.vue +51 -0
  551. package/template/apps/web/src/pages/configuration/components/ModuleConfigVersionList.vue +116 -0
  552. package/template/apps/web/src/pages/configuration/components/ModuleConfigurationEditor.vue +126 -0
  553. package/template/apps/web/src/pages/configuration/components/ModuleConfigurationEditor.webtest.ts +73 -0
  554. package/template/apps/web/src/pages/configuration/components/ModuleConfigurationWorkbench.vue +236 -0
  555. package/template/apps/web/src/pages/dashboard/DashboardPage.vue +39 -0
  556. package/template/apps/web/src/pages/dashboard/DashboardPage.webtest.ts +37 -0
  557. package/template/apps/web/src/pages/dashboard/components/DashboardAttention.vue +36 -0
  558. package/template/apps/web/src/pages/dashboard/components/DashboardMetricCards.vue +28 -0
  559. package/template/apps/web/src/pages/dashboard/dashboard-presenter.ts +115 -0
  560. package/template/apps/web/src/pages/dashboard/dashboard-presenter.webtest.ts +92 -0
  561. package/template/apps/web/src/pages/license/LicensePage.vue +65 -0
  562. package/template/apps/web/src/pages/profile/PersonalSettingsPage.vue +177 -0
  563. package/template/apps/web/src/pages/profile/PersonalSettingsPage.webtest.ts +78 -0
  564. package/template/apps/web/src/pages/settings/BrandingSettingsSection.vue +198 -0
  565. package/template/apps/web/src/pages/settings/GlobalSettingsPage.vue +195 -0
  566. package/template/apps/web/src/pages/settings/GlobalSettingsPage.webtest.ts +314 -0
  567. package/template/apps/web/src/pages/settings/WatermarkSettingsSection.vue +115 -0
  568. package/template/apps/web/src/pages/settings/logo-file.ts +23 -0
  569. package/template/apps/web/src/pages/settings/logo-file.webtest.ts +14 -0
  570. package/template/apps/web/src/pages/system/SystemNotificationsPage.vue +262 -0
  571. package/template/apps/web/src/pages/system/SystemNotificationsPage.webtest.ts +88 -0
  572. package/template/apps/web/src/pages/system/SystemOperationsPage.vue +151 -0
  573. package/template/apps/web/src/pages/system/SystemOperationsPage.webtest.ts +146 -0
  574. package/template/apps/web/src/pages/system/SystemResourceRoutePage.vue +80 -0
  575. package/template/apps/web/src/pages/system/SystemResourceRoutePage.webtest.ts +100 -0
  576. package/template/apps/web/src/pages/system/components/AuditActionCell.vue +87 -0
  577. package/template/apps/web/src/pages/system/components/AuditActionCell.webtest.ts +66 -0
  578. package/template/apps/web/src/pages/system/components/AuditLogFilters.vue +119 -0
  579. package/template/apps/web/src/pages/system/components/AuditLogFilters.webtest.ts +59 -0
  580. package/template/apps/web/src/pages/system/components/DiskUsageChart.vue +62 -0
  581. package/template/apps/web/src/pages/system/components/FeatureLicensePolicyDialog.vue +136 -0
  582. package/template/apps/web/src/pages/system/components/FeatureLicensePolicyDialog.webtest.ts +67 -0
  583. package/template/apps/web/src/pages/system/components/NotificationPublishForm.vue +57 -0
  584. package/template/apps/web/src/pages/system/components/OperationCacheMonitor.vue +73 -0
  585. package/template/apps/web/src/pages/system/components/OperationOnlineUsers.vue +60 -0
  586. package/template/apps/web/src/pages/system/components/OperationOnlineUsers.webtest.ts +35 -0
  587. package/template/apps/web/src/pages/system/components/OperationServiceMonitor.vue +118 -0
  588. package/template/apps/web/src/pages/system/components/OperationServiceMonitor.webtest.ts +64 -0
  589. package/template/apps/web/src/pages/system/components/SchedulerOperationsPanel.vue +297 -0
  590. package/template/apps/web/src/pages/system/components/SchedulerOperationsPanel.webtest.ts +145 -0
  591. package/template/apps/web/src/pages/system/components/SchedulerRunTable.vue +127 -0
  592. package/template/apps/web/src/pages/system/components/SchedulerRunTable.webtest.ts +75 -0
  593. package/template/apps/web/src/pages/system/components/SchedulerStaleRecoveryForm.vue +125 -0
  594. package/template/apps/web/src/pages/system/components/SchedulerStaleRecoveryForm.webtest.ts +84 -0
  595. package/template/apps/web/src/pages/system/components/SystemResourceFilters.vue +64 -0
  596. package/template/apps/web/src/pages/system/components/SystemResourceForm.vue +102 -0
  597. package/template/apps/web/src/pages/system/components/SystemResourcePage.vue +360 -0
  598. package/template/apps/web/src/pages/system/components/SystemResourcePage.webtest.ts +263 -0
  599. package/template/apps/web/src/pages/system/components/SystemResourceTable.vue +242 -0
  600. package/template/apps/web/src/pages/system/components/SystemResourceTable.webtest.ts +196 -0
  601. package/template/apps/web/src/pages/system/components/dictionary-bulk/DictionaryBulkActions.vue +142 -0
  602. package/template/apps/web/src/pages/system/components/dictionary-bulk/DictionaryBulkJobDetail.vue +109 -0
  603. package/template/apps/web/src/pages/system/components/dictionary-bulk/DictionaryBulkJobList.vue +127 -0
  604. package/template/apps/web/src/pages/system/components/dictionary-bulk/DictionaryBulkPanel.vue +72 -0
  605. package/template/apps/web/src/pages/system/components/dictionary-bulk/DictionaryBulkPanel.webtest.ts +255 -0
  606. package/template/apps/web/src/pages/system/components/feature-license-policy.ts +12 -0
  607. package/template/apps/web/src/pages/system/components/menu-management/MenuManagementPage.vue +131 -0
  608. package/template/apps/web/src/pages/system/components/menu-management/MenuManagementPage.webtest.ts +228 -0
  609. package/template/apps/web/src/pages/system/components/menu-management/MenuStructureTable.vue +230 -0
  610. package/template/apps/web/src/pages/system/components/menu-management/menu-model.ts +161 -0
  611. package/template/apps/web/src/pages/system/components/menu-management/menu-model.webtest.ts +133 -0
  612. package/template/apps/web/src/pages/system/components/menu-management/useMenuManagement.ts +117 -0
  613. package/template/apps/web/src/pages/system/components/role-policy/RolePermissionTree.vue +144 -0
  614. package/template/apps/web/src/pages/system/components/role-policy/RolePermissionTree.webtest.ts +55 -0
  615. package/template/apps/web/src/pages/system/components/role-policy/RolePolicyForm.vue +134 -0
  616. package/template/apps/web/src/pages/system/components/role-policy/permission-tree.ts +58 -0
  617. package/template/apps/web/src/pages/system/components/role-policy/permission-tree.webtest.ts +80 -0
  618. package/template/apps/web/src/pages/system/components/user-account/UserAccountForm.vue +307 -0
  619. package/template/apps/web/src/pages/system/components/user-account/UserRoleSelector.vue +111 -0
  620. package/template/apps/web/src/pages/system/components/user-account/UserRoleSelector.webtest.ts +45 -0
  621. package/template/apps/web/src/pages/system/components/user-account/save-user-account.ts +47 -0
  622. package/template/apps/web/src/pages/system/composables/useDictionaryBulkJobs.ts +152 -0
  623. package/template/apps/web/src/pages/system/composables/useFeatureLicenseEditor.ts +38 -0
  624. package/template/apps/web/src/pages/system/composables/useSchedulerOperations.ts +141 -0
  625. package/template/apps/web/src/pages/system/composables/useSchedulerOperations.webtest.ts +224 -0
  626. package/template/apps/web/src/pages/system/composables/useSystemResource.ts +269 -0
  627. package/template/apps/web/src/pages/system/composables/useSystemResource.webtest.ts +51 -0
  628. package/template/apps/web/src/pages/system/dictionary-bulk-presenter.ts +126 -0
  629. package/template/apps/web/src/pages/system/resource-config.ts +233 -0
  630. package/template/apps/web/src/router/auth-navigation.ts +76 -0
  631. package/template/apps/web/src/router/index.ts +246 -0
  632. package/template/apps/web/src/router/index.webtest.ts +396 -0
  633. package/template/apps/web/src/router/manifest-routes.ts +59 -0
  634. package/template/apps/web/src/services/access-api.ts +26 -0
  635. package/template/apps/web/src/services/auth-api.ts +72 -0
  636. package/template/apps/web/src/services/bulk-data-api.ts +105 -0
  637. package/template/apps/web/src/services/configuration-api.ts +43 -0
  638. package/template/apps/web/src/services/http.ts +145 -0
  639. package/template/apps/web/src/services/http.webtest.ts +73 -0
  640. package/template/apps/web/src/services/license-api.ts +53 -0
  641. package/template/apps/web/src/services/notification-api.ts +51 -0
  642. package/template/apps/web/src/services/operations-api.ts +128 -0
  643. package/template/apps/web/src/services/platform-settings-api.ts +21 -0
  644. package/template/apps/web/src/services/profile-api.ts +17 -0
  645. package/template/apps/web/src/services/session-context-api.ts +20 -0
  646. package/template/apps/web/src/services/system-api.ts +156 -0
  647. package/template/apps/web/src/style.css +142 -0
  648. package/template/apps/web/src/style.webtest.ts +18 -0
  649. package/template/apps/web/tsconfig.json +23 -0
  650. package/template/apps/web/vite.config.ts +26 -0
  651. package/template/apps/web/vitest.config.ts +14 -0
  652. package/template/bunfig.toml +2 -0
  653. package/template/docker-compose.yml +74 -0
  654. package/template/docs/adapters/ruoyi-vue-compatibility.md +93 -0
  655. package/template/docs/architecture/admin-surface-boundary.md +24 -0
  656. package/template/docs/architecture/data-scope-query-enforcement.md +26 -0
  657. package/template/docs/architecture/durable-jobs.md +101 -0
  658. package/template/docs/architecture/minimal-approval-workflow.md +60 -0
  659. package/template/docs/architecture/module-manifest-composition.md +47 -0
  660. package/template/docs/architecture/object-storage.md +65 -0
  661. package/template/docs/architecture/search-provider-protocol.md +59 -0
  662. package/template/docs/development/crud-generator.md +57 -0
  663. package/template/docs/license/license-offline-activation-code.md +67 -0
  664. package/template/docs/operations/observability.md +50 -0
  665. package/template/docs/platform/agent-tools.md +37 -0
  666. package/template/docs/platform/audit-reliability.md +95 -0
  667. package/template/docs/platform/bulk-data-jobs.md +156 -0
  668. package/template/docs/platform/data-access-control.md +62 -0
  669. package/template/docs/platform/module-configuration.md +98 -0
  670. package/template/docs/platform/navigation-registry.md +36 -0
  671. package/template/docs/platform/notifications.md +33 -0
  672. package/template/docs/platform/operations-overview.md +35 -0
  673. package/template/docs/platform/organization-membership.md +31 -0
  674. package/template/docs/platform/platform-authentication.md +127 -0
  675. package/template/docs/platform/platform-shell-settings.md +88 -0
  676. package/template/docs/platform/scheduled-task-executor.md +89 -0
  677. package/template/docs/platform/system-crud-api.md +100 -0
  678. package/template/docs/platform/web-system-crud.md +96 -0
  679. package/template/docs/product/built-in-roles.md +26 -0
  680. package/template/drizzle.config.ts +16 -0
  681. package/template/examples/inventory-item.crud.json +55 -0
  682. package/template/package.json +55 -0
  683. package/template/packages/config/index.test.ts +114 -0
  684. package/template/packages/config/index.ts +4 -0
  685. package/template/packages/config/package.json +13 -0
  686. package/template/packages/config/src/definition.ts +109 -0
  687. package/template/packages/config/src/environment-loader.ts +240 -0
  688. package/template/packages/config/src/platform.ts +185 -0
  689. package/template/packages/config/src/secrets.ts +69 -0
  690. package/template/packages/crud-generator/index.ts +3 -0
  691. package/template/packages/crud-generator/package.json +12 -0
  692. package/template/packages/crud-generator/src/cli.ts +31 -0
  693. package/template/packages/crud-generator/src/definition.ts +48 -0
  694. package/template/packages/crud-generator/src/generator.test.ts +180 -0
  695. package/template/packages/crud-generator/src/generator.ts +99 -0
  696. package/template/packages/crud-generator/src/template-helpers.ts +72 -0
  697. package/template/packages/crud-generator/src/templates/domain.ts +27 -0
  698. package/template/packages/crud-generator/src/templates/drizzle-repository.ts +126 -0
  699. package/template/packages/crud-generator/src/templates/dto.ts +19 -0
  700. package/template/packages/crud-generator/src/templates/index.ts +8 -0
  701. package/template/packages/crud-generator/src/templates/manifest.ts +69 -0
  702. package/template/packages/crud-generator/src/templates/project.ts +161 -0
  703. package/template/packages/crud-generator/src/templates/repository.ts +23 -0
  704. package/template/packages/crud-generator/src/templates/routes.ts +158 -0
  705. package/template/packages/crud-generator/src/templates/schema.ts +45 -0
  706. package/template/packages/crud-generator/src/templates/service.ts +32 -0
  707. package/template/packages/crud-generator/src/validation.ts +205 -0
  708. package/template/packages/crud-generator/tsconfig.json +15 -0
  709. package/template/packages/database/drizzle/0000_organic_madame_web.sql +136 -0
  710. package/template/packages/database/drizzle/0001_flawless_senator_kelly.sql +80 -0
  711. package/template/packages/database/drizzle/0002_woozy_squadron_supreme.sql +53 -0
  712. package/template/packages/database/drizzle/0003_far_carnage.sql +17 -0
  713. package/template/packages/database/drizzle/0004_flat_bastion.sql +2 -0
  714. package/template/packages/database/drizzle/0005_fixed_enchantress.sql +6 -0
  715. package/template/packages/database/drizzle/0006_groovy_overlord.sql +146 -0
  716. package/template/packages/database/drizzle/0007_chubby_may_parker.sql +9 -0
  717. package/template/packages/database/drizzle/0008_secret_toxin.sql +21 -0
  718. package/template/packages/database/drizzle/0009_ambiguous_adam_warlock.sql +46 -0
  719. package/template/packages/database/drizzle/0010_complex_orphan.sql +42 -0
  720. package/template/packages/database/drizzle/0011_lowly_maria_hill.sql +42 -0
  721. package/template/packages/database/drizzle/0012_serious_marvex.sql +11 -0
  722. package/template/packages/database/drizzle/0013_mysterious_miek.sql +48 -0
  723. package/template/packages/database/drizzle/0014_graceful_husk.sql +1 -0
  724. package/template/packages/database/drizzle/0015_illegal_jazinda.sql +29 -0
  725. package/template/packages/database/drizzle/0016_seed_platform_roles.sql +21 -0
  726. package/template/packages/database/drizzle/0017_silly_thunderbolt.sql +35 -0
  727. package/template/packages/database/drizzle/0018_cheerful_alex_power.sql +22 -0
  728. package/template/packages/database/drizzle/0019_omniscient_luckman.sql +3 -0
  729. package/template/packages/database/drizzle/0020_handy_vertigo.sql +18 -0
  730. package/template/packages/database/drizzle/0021_plain_paladin.sql +51 -0
  731. package/template/packages/database/drizzle/0022_icy_rhodey.sql +2 -0
  732. package/template/packages/database/drizzle/0023_fresh_thunderbolt_ross.sql +138 -0
  733. package/template/packages/database/drizzle/0024_misty_lizard.sql +13 -0
  734. package/template/packages/database/drizzle/0025_premium_songbird.sql +6 -0
  735. package/template/packages/database/drizzle/0026_aberrant_doctor_octopus.sql +42 -0
  736. package/template/packages/database/drizzle/0027_tiny_diamondback.sql +5 -0
  737. package/template/packages/database/drizzle/0028_condemned_ulik.sql +27 -0
  738. package/template/packages/database/drizzle/0029_clean_nightshade.sql +5 -0
  739. package/template/packages/database/drizzle/0030_governed_export_constraints.sql +84 -0
  740. package/template/packages/database/drizzle/meta/0000_snapshot.json +973 -0
  741. package/template/packages/database/drizzle/meta/0001_snapshot.json +1559 -0
  742. package/template/packages/database/drizzle/meta/0002_snapshot.json +1911 -0
  743. package/template/packages/database/drizzle/meta/0003_snapshot.json +2047 -0
  744. package/template/packages/database/drizzle/meta/0004_snapshot.json +2059 -0
  745. package/template/packages/database/drizzle/meta/0005_snapshot.json +2084 -0
  746. package/template/packages/database/drizzle/meta/0006_snapshot.json +3192 -0
  747. package/template/packages/database/drizzle/meta/0007_snapshot.json +3208 -0
  748. package/template/packages/database/drizzle/meta/0008_snapshot.json +3367 -0
  749. package/template/packages/database/drizzle/meta/0009_snapshot.json +3629 -0
  750. package/template/packages/database/drizzle/meta/0010_snapshot.json +3955 -0
  751. package/template/packages/database/drizzle/meta/0011_snapshot.json +4299 -0
  752. package/template/packages/database/drizzle/meta/0012_snapshot.json +4368 -0
  753. package/template/packages/database/drizzle/meta/0013_snapshot.json +4483 -0
  754. package/template/packages/database/drizzle/meta/0014_snapshot.json +4489 -0
  755. package/template/packages/database/drizzle/meta/0015_snapshot.json +4771 -0
  756. package/template/packages/database/drizzle/meta/0016_snapshot.json +4694 -0
  757. package/template/packages/database/drizzle/meta/0017_snapshot.json +4731 -0
  758. package/template/packages/database/drizzle/meta/0018_snapshot.json +4978 -0
  759. package/template/packages/database/drizzle/meta/0019_snapshot.json +4996 -0
  760. package/template/packages/database/drizzle/meta/0020_snapshot.json +5140 -0
  761. package/template/packages/database/drizzle/meta/0021_snapshot.json +5535 -0
  762. package/template/packages/database/drizzle/meta/0022_snapshot.json +5541 -0
  763. package/template/packages/database/drizzle/meta/0023_snapshot.json +6667 -0
  764. package/template/packages/database/drizzle/meta/0024_snapshot.json +6780 -0
  765. package/template/packages/database/drizzle/meta/0025_snapshot.json +6849 -0
  766. package/template/packages/database/drizzle/meta/0026_snapshot.json +7185 -0
  767. package/template/packages/database/drizzle/meta/0027_snapshot.json +7225 -0
  768. package/template/packages/database/drizzle/meta/0028_snapshot.json +7454 -0
  769. package/template/packages/database/drizzle/meta/0029_snapshot.json +7460 -0
  770. package/template/packages/database/drizzle/meta/0030_snapshot.json +7473 -0
  771. package/template/packages/database/drizzle/meta/_journal.json +223 -0
  772. package/template/packages/database/index.ts +5 -0
  773. package/template/packages/database/package.json +17 -0
  774. package/template/packages/database/src/dialects.test.ts +33 -0
  775. package/template/packages/database/src/dialects.ts +139 -0
  776. package/template/packages/database/src/runner.test.ts +96 -0
  777. package/template/packages/database/src/runner.ts +175 -0
  778. package/template/packages/database/src/schema/bulk-data.ts +87 -0
  779. package/template/packages/database/src/schema/common.ts +33 -0
  780. package/template/packages/database/src/schema/durable-jobs.ts +266 -0
  781. package/template/packages/database/src/schema/file-storage.ts +94 -0
  782. package/template/packages/database/src/schema/governance.ts +195 -0
  783. package/template/packages/database/src/schema/governed-exports.ts +90 -0
  784. package/template/packages/database/src/schema/identity.ts +169 -0
  785. package/template/packages/database/src/schema/index.ts +33 -0
  786. package/template/packages/database/src/schema/license-legacy.ts +93 -0
  787. package/template/packages/database/src/schema/license-v1.ts +246 -0
  788. package/template/packages/database/src/schema/migration-history.ts +30 -0
  789. package/template/packages/database/src/schema/notifications.ts +60 -0
  790. package/template/packages/database/src/schema/platform-settings.ts +55 -0
  791. package/template/packages/database/src/schema/scheduler.ts +89 -0
  792. package/template/packages/database/src/schema/work-orders.ts +23 -0
  793. package/template/packages/database/src/schema/workflow.ts +86 -0
  794. package/template/packages/database/src/schema-durable-links.test.ts +27 -0
  795. package/template/packages/database/src/schema-governed-exports.test.ts +49 -0
  796. package/template/packages/database/src/schema-workflow-notification.test.ts +63 -0
  797. package/template/packages/database/src/schema.test.ts +343 -0
  798. package/template/packages/database/src/sql-store.test.ts +92 -0
  799. package/template/packages/database/src/sql-store.ts +101 -0
  800. package/template/packages/database/src/store.ts +32 -0
  801. package/template/packages/database/tsconfig.json +17 -0
  802. package/template/packages/example-work-order/index.ts +3 -0
  803. package/template/packages/example-work-order/package.json +13 -0
  804. package/template/packages/example-work-order/src/contract.ts +50 -0
  805. package/template/packages/example-work-order/src/manifest.test.ts +54 -0
  806. package/template/packages/example-work-order/src/manifest.ts +120 -0
  807. package/template/packages/example-work-order/src/schema.ts +27 -0
  808. package/template/packages/license-sdk/index.ts +13 -0
  809. package/template/packages/license-sdk/package.json +18 -0
  810. package/template/packages/license-sdk/src/bounded-json-body.test.ts +65 -0
  811. package/template/packages/license-sdk/src/bounded-json-body.ts +135 -0
  812. package/template/packages/license-sdk/src/canonical-json.test.ts +28 -0
  813. package/template/packages/license-sdk/src/canonical-json.ts +104 -0
  814. package/template/packages/license-sdk/src/client.test.ts +82 -0
  815. package/template/packages/license-sdk/src/client.ts +86 -0
  816. package/template/packages/license-sdk/src/device.ts +46 -0
  817. package/template/packages/license-sdk/src/file-storage.test.ts +80 -0
  818. package/template/packages/license-sdk/src/file-storage.ts +77 -0
  819. package/template/packages/license-sdk/src/installation.test.ts +241 -0
  820. package/template/packages/license-sdk/src/installation.ts +150 -0
  821. package/template/packages/license-sdk/src/license-parser.ts +56 -0
  822. package/template/packages/license-sdk/src/offline-code-base32.ts +57 -0
  823. package/template/packages/license-sdk/src/offline-code-decompression.ts +55 -0
  824. package/template/packages/license-sdk/src/offline-code-limits.ts +10 -0
  825. package/template/packages/license-sdk/src/offline-code-wire.ts +72 -0
  826. package/template/packages/license-sdk/src/offline-code.test.ts +172 -0
  827. package/template/packages/license-sdk/src/offline-code.ts +319 -0
  828. package/template/packages/license-sdk/src/payload.test.ts +72 -0
  829. package/template/packages/license-sdk/src/payload.ts +201 -0
  830. package/template/packages/license-sdk/src/storage.ts +64 -0
  831. package/template/packages/license-sdk/src/test-fixtures.ts +59 -0
  832. package/template/packages/license-sdk/src/v1-test-vector.ts +49 -0
  833. package/template/packages/license-sdk/src/validation.test.ts +62 -0
  834. package/template/packages/license-sdk/src/validation.ts +143 -0
  835. package/template/packages/license-sdk/src/verification.test.ts +97 -0
  836. package/template/packages/license-sdk/src/verification.ts +199 -0
  837. package/template/packages/license-sdk/tsconfig.json +17 -0
  838. package/template/packages/modules/index.ts +8 -0
  839. package/template/packages/modules/package.json +13 -0
  840. package/template/packages/modules/src/composition.test.ts +267 -0
  841. package/template/packages/modules/src/composition.ts +342 -0
  842. package/template/packages/modules/src/installed-business-modules.ts +10 -0
  843. package/template/packages/modules/src/manifest.ts +97 -0
  844. package/template/packages/modules/src/menu-composition.test.ts +64 -0
  845. package/template/packages/modules/src/menu-composition.ts +54 -0
  846. package/template/packages/modules/src/registry.ts +53 -0
  847. package/template/packages/modules/src/system-admin-routes.ts +134 -0
  848. package/template/packages/modules/src/system-agent-tools.ts +28 -0
  849. package/template/packages/modules/src/system-api-binding.ts +37 -0
  850. package/template/packages/modules/src/system-api-data-governance.ts +21 -0
  851. package/template/packages/modules/src/system-api-permissions.ts +344 -0
  852. package/template/packages/modules/src/system-audit-actions.ts +70 -0
  853. package/template/packages/modules/src/system-data-governance.ts +30 -0
  854. package/template/packages/modules/src/system-features.ts +143 -0
  855. package/template/packages/modules/src/system-governed-export-bindings.ts +31 -0
  856. package/template/packages/modules/src/system-module-catalog.test.ts +145 -0
  857. package/template/packages/modules/src/system-module-catalog.ts +250 -0
  858. package/template/packages/modules/src/system-modules.test.ts +344 -0
  859. package/template/packages/modules/src/system-modules.ts +335 -0
  860. package/template/packages/modules/src/system-permissions.ts +142 -0
  861. package/template/packages/modules/user/module.ts +72 -0
  862. package/template/packages/shared/index.ts +16 -0
  863. package/template/packages/shared/package.json +9 -0
  864. package/template/packages/shared/src/audit.test.ts +17 -0
  865. package/template/packages/shared/src/audit.ts +237 -0
  866. package/template/packages/shared/src/correlation.test.ts +10 -0
  867. package/template/packages/shared/src/correlation.ts +11 -0
  868. package/template/packages/shared/src/data-governance.test.ts +44 -0
  869. package/template/packages/shared/src/data-governance.ts +89 -0
  870. package/template/packages/shared/src/database.ts +67 -0
  871. package/template/packages/shared/src/feature.test.ts +54 -0
  872. package/template/packages/shared/src/feature.ts +104 -0
  873. package/template/packages/shared/src/license-legacy.ts +153 -0
  874. package/template/packages/shared/src/license.test.ts +63 -0
  875. package/template/packages/shared/src/license.ts +267 -0
  876. package/template/packages/shared/src/module-configuration.ts +50 -0
  877. package/template/packages/shared/src/notification.ts +46 -0
  878. package/template/packages/shared/src/platform-settings.ts +5 -0
  879. package/template/packages/shared/src/primitives.ts +47 -0
  880. package/template/packages/shared/src/profile.ts +13 -0
  881. package/template/packages/shared/src/rbac.ts +117 -0
  882. package/template/packages/shared/src/ruoyi.ts +98 -0
  883. package/template/packages/shared/src/scheduler.ts +108 -0
  884. package/template/packages/shared/src/search-provider.ts +24 -0
  885. package/template/packages/shared/src/workflow.test.ts +225 -0
  886. package/template/packages/shared/src/workflow.ts +307 -0
  887. package/template/packages/storage/index.ts +11 -0
  888. package/template/packages/storage/package.json +12 -0
  889. package/template/packages/storage/src/blob-store.ts +64 -0
  890. package/template/packages/storage/src/content-hash.ts +24 -0
  891. package/template/packages/storage/src/file-service.test.ts +100 -0
  892. package/template/packages/storage/src/file-service.ts +59 -0
  893. package/template/packages/storage/src/in-memory-upload-repository.ts +154 -0
  894. package/template/packages/storage/src/local-file-blob-store.test.ts +175 -0
  895. package/template/packages/storage/src/local-file-blob-store.ts +344 -0
  896. package/template/packages/storage/src/local-file-maintenance.ts +133 -0
  897. package/template/packages/storage/src/memory-blob-store.test.ts +16 -0
  898. package/template/packages/storage/src/memory-blob-store.ts +100 -0
  899. package/template/packages/storage/src/upload-repository.ts +43 -0
  900. package/template/packages/storage/src/upload-service.test.ts +246 -0
  901. package/template/packages/storage/src/upload-service.ts +334 -0
  902. package/template/packages/storage/src/upload-streams.ts +123 -0
  903. package/template/packages/storage/src/upload-types.ts +110 -0
  904. package/template/packages/storage/tsconfig.json +16 -0
@@ -0,0 +1,146 @@
1
+ -- Preserve every prototype row under an explicit legacy namespace before creating V1 tables.
2
+ ALTER TABLE "license_issue_records" RENAME TO "legacy_license_issue_records";--> statement-breakpoint
3
+ ALTER TABLE "license_projects" RENAME TO "legacy_license_projects";--> statement-breakpoint
4
+ ALTER TABLE "licenses" RENAME TO "legacy_licenses";--> statement-breakpoint
5
+ ALTER INDEX "uk_license_issue_license_id" RENAME TO "uk_legacy_license_issue_license_id";--> statement-breakpoint
6
+ ALTER INDEX "idx_license_issue_project" RENAME TO "idx_legacy_license_issue_project";--> statement-breakpoint
7
+ ALTER INDEX "idx_license_issue_operator" RENAME TO "idx_legacy_license_issue_operator";--> statement-breakpoint
8
+ ALTER INDEX "idx_license_issue_machine" RENAME TO "idx_legacy_license_issue_machine";--> statement-breakpoint
9
+ ALTER INDEX "idx_license_issue_key" RENAME TO "idx_legacy_license_issue_key";--> statement-breakpoint
10
+ ALTER INDEX "idx_license_issue_status" RENAME TO "idx_legacy_license_issue_status";--> statement-breakpoint
11
+ ALTER INDEX "idx_license_issue_issued" RENAME TO "idx_legacy_license_issue_issued";--> statement-breakpoint
12
+ ALTER INDEX "uk_license_projects_code" RENAME TO "uk_legacy_license_projects_code";--> statement-breakpoint
13
+ ALTER INDEX "idx_license_projects_status" RENAME TO "idx_legacy_license_projects_status";--> statement-breakpoint
14
+ ALTER INDEX "idx_licenses_machine" RENAME TO "idx_legacy_licenses_machine";--> statement-breakpoint
15
+ ALTER INDEX "idx_licenses_key" RENAME TO "idx_legacy_licenses_key";--> statement-breakpoint
16
+ ALTER INDEX "idx_licenses_status" RENAME TO "idx_legacy_licenses_status";--> statement-breakpoint
17
+ CREATE TABLE "license_customers" (
18
+ "id" varchar(64) PRIMARY KEY NOT NULL,
19
+ "code" varchar(80) NOT NULL,
20
+ "name" varchar(160) NOT NULL,
21
+ "status" varchar(32) DEFAULT 'active' NOT NULL,
22
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
23
+ "created_by" varchar(64) NOT NULL,
24
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
25
+ "updated_by" varchar(64) NOT NULL,
26
+ "archived_at" timestamp with time zone,
27
+ "archived_by" varchar(64)
28
+ );--> statement-breakpoint
29
+ CREATE TABLE "license_projects" (
30
+ "id" varchar(64) PRIMARY KEY NOT NULL,
31
+ "customer_id" varchar(64) NOT NULL,
32
+ "code" varchar(80) NOT NULL,
33
+ "name" varchar(160) NOT NULL,
34
+ "status" varchar(32) DEFAULT 'active' NOT NULL,
35
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
36
+ "created_by" varchar(64) NOT NULL,
37
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
38
+ "updated_by" varchar(64) NOT NULL,
39
+ "archived_at" timestamp with time zone,
40
+ "archived_by" varchar(64)
41
+ );--> statement-breakpoint
42
+ CREATE TABLE "license_contract_versions" (
43
+ "id" varchar(64) PRIMARY KEY NOT NULL,
44
+ "project_id" varchar(64) NOT NULL,
45
+ "contract_number" varchar(120) NOT NULL,
46
+ "version" varchar(40) NOT NULL,
47
+ "edition_label" varchar(80),
48
+ "entitlements" jsonb DEFAULT '[]'::jsonb NOT NULL,
49
+ "status" varchar(32) DEFAULT 'active' NOT NULL,
50
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
51
+ "created_by" varchar(64) NOT NULL,
52
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
53
+ "updated_by" varchar(64) NOT NULL,
54
+ "archived_at" timestamp with time zone,
55
+ "archived_by" varchar(64)
56
+ );--> statement-breakpoint
57
+ CREATE TABLE "license_nodes" (
58
+ "id" varchar(64) PRIMARY KEY NOT NULL,
59
+ "project_id" varchar(64) NOT NULL,
60
+ "code" varchar(80) NOT NULL,
61
+ "name" varchar(160) NOT NULL,
62
+ "purpose" varchar(160),
63
+ "machine_code" varchar(256) NOT NULL,
64
+ "status" varchar(32) DEFAULT 'active' NOT NULL,
65
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
66
+ "created_by" varchar(64) NOT NULL,
67
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
68
+ "updated_by" varchar(64) NOT NULL,
69
+ "archived_at" timestamp with time zone,
70
+ "archived_by" varchar(64)
71
+ );--> statement-breakpoint
72
+ CREATE TABLE "licenses" (
73
+ "id" varchar(64) PRIMARY KEY NOT NULL,
74
+ "format_version" integer DEFAULT 1 NOT NULL,
75
+ "product_code" varchar(120) NOT NULL,
76
+ "customer_id" varchar(64) NOT NULL,
77
+ "project_id" varchar(64) NOT NULL,
78
+ "contract_version_id" varchar(64) NOT NULL,
79
+ "node_id" varchar(64) NOT NULL,
80
+ "machine_code" varchar(256) NOT NULL,
81
+ "edition_label" varchar(80),
82
+ "entitlements" jsonb NOT NULL,
83
+ "claims" jsonb NOT NULL,
84
+ "signed_payload" text NOT NULL,
85
+ "payload_digest" varchar(128) NOT NULL,
86
+ "public_key_id" varchar(160) NOT NULL,
87
+ "algorithm" varchar(40) DEFAULT 'ED25519' NOT NULL,
88
+ "signature" text NOT NULL,
89
+ "issued_at" timestamp with time zone NOT NULL,
90
+ "expires_at" timestamp with time zone NOT NULL,
91
+ "issued_by" varchar(64) NOT NULL,
92
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
93
+ CONSTRAINT "ck_licenses_format_v1" CHECK ("licenses"."format_version" = 1),
94
+ CONSTRAINT "ck_licenses_expiry_after_issue" CHECK ("licenses"."expires_at" > "licenses"."issued_at")
95
+ );--> statement-breakpoint
96
+ CREATE TABLE "license_replacements" (
97
+ "id" varchar(64) PRIMARY KEY NOT NULL,
98
+ "replaced_license_id" varchar(64) NOT NULL,
99
+ "replacement_license_id" varchar(64) NOT NULL,
100
+ "reason" text,
101
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
102
+ "created_by" varchar(64) NOT NULL,
103
+ CONSTRAINT "ck_license_replacements_distinct" CHECK ("license_replacements"."replaced_license_id" <> "license_replacements"."replacement_license_id")
104
+ );--> statement-breakpoint
105
+ CREATE TABLE "license_events" (
106
+ "id" varchar(64) PRIMARY KEY NOT NULL,
107
+ "license_id" varchar(64) NOT NULL,
108
+ "type" varchar(80) NOT NULL,
109
+ "actor_id" varchar(64) NOT NULL,
110
+ "occurred_at" timestamp with time zone DEFAULT now() NOT NULL,
111
+ "payload" jsonb NOT NULL
112
+ );--> statement-breakpoint
113
+ ALTER TABLE "license_projects" ADD CONSTRAINT "license_projects_customer_id_license_customers_id_fk" FOREIGN KEY ("customer_id") REFERENCES "public"."license_customers"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
114
+ ALTER TABLE "license_contract_versions" ADD CONSTRAINT "license_contract_versions_project_id_license_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."license_projects"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
115
+ ALTER TABLE "license_nodes" ADD CONSTRAINT "license_nodes_project_id_license_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."license_projects"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
116
+ ALTER TABLE "licenses" ADD CONSTRAINT "licenses_customer_id_license_customers_id_fk" FOREIGN KEY ("customer_id") REFERENCES "public"."license_customers"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
117
+ ALTER TABLE "licenses" ADD CONSTRAINT "licenses_project_id_license_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."license_projects"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
118
+ ALTER TABLE "licenses" ADD CONSTRAINT "licenses_contract_version_id_license_contract_versions_id_fk" FOREIGN KEY ("contract_version_id") REFERENCES "public"."license_contract_versions"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
119
+ ALTER TABLE "licenses" ADD CONSTRAINT "licenses_node_id_license_nodes_id_fk" FOREIGN KEY ("node_id") REFERENCES "public"."license_nodes"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
120
+ ALTER TABLE "license_replacements" ADD CONSTRAINT "license_replacements_replaced_license_id_licenses_id_fk" FOREIGN KEY ("replaced_license_id") REFERENCES "public"."licenses"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
121
+ ALTER TABLE "license_replacements" ADD CONSTRAINT "license_replacements_replacement_license_id_licenses_id_fk" FOREIGN KEY ("replacement_license_id") REFERENCES "public"."licenses"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
122
+ ALTER TABLE "license_events" ADD CONSTRAINT "license_events_license_id_licenses_id_fk" FOREIGN KEY ("license_id") REFERENCES "public"."licenses"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
123
+ CREATE UNIQUE INDEX "uk_license_customers_code" ON "license_customers" USING btree ("code");--> statement-breakpoint
124
+ CREATE INDEX "idx_license_customers_status" ON "license_customers" USING btree ("status");--> statement-breakpoint
125
+ CREATE UNIQUE INDEX "uk_license_projects_customer_code" ON "license_projects" USING btree ("customer_id","code");--> statement-breakpoint
126
+ CREATE INDEX "idx_license_projects_customer" ON "license_projects" USING btree ("customer_id");--> statement-breakpoint
127
+ CREATE INDEX "idx_license_projects_status" ON "license_projects" USING btree ("status");--> statement-breakpoint
128
+ CREATE UNIQUE INDEX "uk_license_contract_project_number_version" ON "license_contract_versions" USING btree ("project_id","contract_number","version");--> statement-breakpoint
129
+ CREATE INDEX "idx_license_contract_project" ON "license_contract_versions" USING btree ("project_id");--> statement-breakpoint
130
+ CREATE INDEX "idx_license_contract_status" ON "license_contract_versions" USING btree ("status");--> statement-breakpoint
131
+ CREATE UNIQUE INDEX "uk_license_nodes_project_code" ON "license_nodes" USING btree ("project_id","code");--> statement-breakpoint
132
+ CREATE UNIQUE INDEX "uk_license_nodes_machine" ON "license_nodes" USING btree ("machine_code");--> statement-breakpoint
133
+ CREATE INDEX "idx_license_nodes_project" ON "license_nodes" USING btree ("project_id");--> statement-breakpoint
134
+ CREATE INDEX "idx_license_nodes_status" ON "license_nodes" USING btree ("status");--> statement-breakpoint
135
+ CREATE INDEX "idx_license_v1_customer" ON "licenses" USING btree ("customer_id");--> statement-breakpoint
136
+ CREATE INDEX "idx_license_v1_project" ON "licenses" USING btree ("project_id");--> statement-breakpoint
137
+ CREATE INDEX "idx_license_v1_contract" ON "licenses" USING btree ("contract_version_id");--> statement-breakpoint
138
+ CREATE INDEX "idx_license_v1_node" ON "licenses" USING btree ("node_id");--> statement-breakpoint
139
+ CREATE INDEX "idx_license_v1_machine_issued" ON "licenses" USING btree ("machine_code","issued_at");--> statement-breakpoint
140
+ CREATE INDEX "idx_license_v1_key" ON "licenses" USING btree ("public_key_id");--> statement-breakpoint
141
+ CREATE INDEX "idx_license_v1_expires" ON "licenses" USING btree ("expires_at");--> statement-breakpoint
142
+ CREATE UNIQUE INDEX "uk_license_replacements_old" ON "license_replacements" USING btree ("replaced_license_id");--> statement-breakpoint
143
+ CREATE UNIQUE INDEX "uk_license_replacements_new" ON "license_replacements" USING btree ("replacement_license_id");--> statement-breakpoint
144
+ CREATE INDEX "idx_license_events_license_time" ON "license_events" USING btree ("license_id","occurred_at");--> statement-breakpoint
145
+ CREATE INDEX "idx_license_events_type_time" ON "license_events" USING btree ("type","occurred_at");--> statement-breakpoint
146
+ CREATE INDEX "idx_license_events_actor_time" ON "license_events" USING btree ("actor_id","occurred_at");
@@ -0,0 +1,9 @@
1
+ WITH ranked_active_keys AS (
2
+ SELECT "id", row_number() OVER (ORDER BY "created_at" DESC, "id" DESC) AS "rank"
3
+ FROM "license_keys"
4
+ WHERE "status" = 'active'
5
+ )
6
+ UPDATE "license_keys"
7
+ SET "status" = 'retired', "retired_at" = now(), "retired_by" = 'migration-0007'
8
+ WHERE "id" IN (SELECT "id" FROM ranked_active_keys WHERE "rank" > 1);--> statement-breakpoint
9
+ CREATE UNIQUE INDEX "uk_license_keys_single_active" ON "license_keys" USING btree ("status") WHERE "license_keys"."status" = 'active';
@@ -0,0 +1,21 @@
1
+ CREATE TABLE "license_operator_sessions" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "operator_id" varchar(64) NOT NULL,
4
+ "token_hash" varchar(128) NOT NULL,
5
+ "status" varchar(32) DEFAULT 'active' NOT NULL,
6
+ "issued_at" timestamp with time zone DEFAULT now() NOT NULL,
7
+ "expires_at" timestamp with time zone NOT NULL,
8
+ "revoked_at" timestamp with time zone,
9
+ "last_seen_at" timestamp with time zone,
10
+ "ip" varchar(80),
11
+ "user_agent" text
12
+ );
13
+ --> statement-breakpoint
14
+ ALTER TABLE "license_operators" ALTER COLUMN "token_hash" DROP NOT NULL;--> statement-breakpoint
15
+ ALTER TABLE "license_operators" ADD COLUMN "password_hash" text;--> statement-breakpoint
16
+ ALTER TABLE "license_operators" ADD COLUMN "role" varchar(40) DEFAULT 'readonly' NOT NULL;--> statement-breakpoint
17
+ ALTER TABLE "license_operator_sessions" ADD CONSTRAINT "license_operator_sessions_operator_id_license_operators_id_fk" FOREIGN KEY ("operator_id") REFERENCES "public"."license_operators"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
18
+ CREATE UNIQUE INDEX "uk_license_operator_sessions_token_hash" ON "license_operator_sessions" USING btree ("token_hash");--> statement-breakpoint
19
+ CREATE INDEX "idx_license_operator_sessions_operator" ON "license_operator_sessions" USING btree ("operator_id");--> statement-breakpoint
20
+ CREATE INDEX "idx_license_operator_sessions_status" ON "license_operator_sessions" USING btree ("status");--> statement-breakpoint
21
+ CREATE INDEX "idx_license_operator_sessions_expires" ON "license_operator_sessions" USING btree ("expires_at");
@@ -0,0 +1,46 @@
1
+ CREATE TABLE "license_governance_events" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "type" varchar(100) NOT NULL,
4
+ "resource_type" varchar(80) NOT NULL,
5
+ "resource_id" varchar(160) NOT NULL,
6
+ "actor_id" varchar(64) NOT NULL,
7
+ "occurred_at" timestamp with time zone DEFAULT now() NOT NULL,
8
+ "payload" jsonb NOT NULL
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE TABLE "license_key_compatibilities" (
12
+ "id" varchar(64) PRIMARY KEY NOT NULL,
13
+ "product_code" varchar(120) NOT NULL,
14
+ "software_version" varchar(80) NOT NULL,
15
+ "public_key_id" varchar(160) NOT NULL,
16
+ "declared_at" timestamp with time zone DEFAULT now() NOT NULL,
17
+ "declared_by" varchar(64) NOT NULL
18
+ );
19
+ --> statement-breakpoint
20
+ ALTER TABLE "license_keys" ADD COLUMN "retain_until" timestamp with time zone;--> statement-breakpoint
21
+ ALTER TABLE "licenses" ADD COLUMN "target_software_version" varchar(80);--> statement-breakpoint
22
+ ALTER TABLE "license_key_compatibilities" ADD CONSTRAINT "license_key_compatibilities_public_key_id_license_keys_key_id_fk" FOREIGN KEY ("public_key_id") REFERENCES "public"."license_keys"("key_id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
23
+ CREATE INDEX "idx_license_governance_resource_time" ON "license_governance_events" USING btree ("resource_type","resource_id","occurred_at");--> statement-breakpoint
24
+ CREATE INDEX "idx_license_governance_type_time" ON "license_governance_events" USING btree ("type","occurred_at");--> statement-breakpoint
25
+ CREATE INDEX "idx_license_governance_actor_time" ON "license_governance_events" USING btree ("actor_id","occurred_at");--> statement-breakpoint
26
+ CREATE UNIQUE INDEX "uk_license_key_compatibility" ON "license_key_compatibilities" USING btree ("product_code","software_version","public_key_id");--> statement-breakpoint
27
+ CREATE INDEX "idx_license_key_compatibility_version" ON "license_key_compatibilities" USING btree ("product_code","software_version");--> statement-breakpoint
28
+ CREATE INDEX "idx_license_key_compatibility_key" ON "license_key_compatibilities" USING btree ("public_key_id");--> statement-breakpoint
29
+ CREATE FUNCTION "reject_license_immutable_mutation"() RETURNS trigger AS $$
30
+ BEGIN
31
+ RAISE EXCEPTION 'License immutable record % does not allow %', TG_TABLE_NAME, TG_OP
32
+ USING ERRCODE = '55000';
33
+ END;
34
+ $$ LANGUAGE plpgsql;--> statement-breakpoint
35
+ CREATE TRIGGER "trg_licenses_immutable" BEFORE UPDATE OR DELETE ON "licenses"
36
+ FOR EACH ROW EXECUTE FUNCTION "reject_license_immutable_mutation"();--> statement-breakpoint
37
+ CREATE TRIGGER "trg_license_events_append_only" BEFORE UPDATE OR DELETE ON "license_events"
38
+ FOR EACH ROW EXECUTE FUNCTION "reject_license_immutable_mutation"();--> statement-breakpoint
39
+ CREATE TRIGGER "trg_license_replacements_append_only" BEFORE UPDATE OR DELETE ON "license_replacements"
40
+ FOR EACH ROW EXECUTE FUNCTION "reject_license_immutable_mutation"();--> statement-breakpoint
41
+ CREATE TRIGGER "trg_license_governance_events_append_only" BEFORE UPDATE OR DELETE ON "license_governance_events"
42
+ FOR EACH ROW EXECUTE FUNCTION "reject_license_immutable_mutation"();--> statement-breakpoint
43
+ CREATE TRIGGER "trg_license_key_compatibilities_append_only" BEFORE UPDATE OR DELETE ON "license_key_compatibilities"
44
+ FOR EACH ROW EXECUTE FUNCTION "reject_license_immutable_mutation"();--> statement-breakpoint
45
+ CREATE TRIGGER "trg_license_keys_no_delete" BEFORE DELETE ON "license_keys"
46
+ FOR EACH ROW EXECUTE FUNCTION "reject_license_immutable_mutation"();
@@ -0,0 +1,42 @@
1
+ CREATE TABLE "scheduled_task_runs" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "task_key" varchar(160) NOT NULL,
4
+ "trigger" varchar(32) NOT NULL,
5
+ "status" varchar(32) NOT NULL,
6
+ "attempt" integer DEFAULT 1 NOT NULL,
7
+ "requested_by" varchar(64) NOT NULL,
8
+ "retry_of_run_id" varchar(64),
9
+ "scheduled_for" timestamp with time zone NOT NULL,
10
+ "started_at" timestamp with time zone NOT NULL,
11
+ "finished_at" timestamp with time zone,
12
+ "next_attempt_at" timestamp with time zone,
13
+ "error" text,
14
+ "result" jsonb,
15
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
16
+ );
17
+ --> statement-breakpoint
18
+ CREATE TABLE "scheduled_tasks" (
19
+ "key" varchar(160) PRIMARY KEY NOT NULL,
20
+ "label" varchar(160) NOT NULL,
21
+ "description" text,
22
+ "feature_key" varchar(160) NOT NULL,
23
+ "permission_key" varchar(160) NOT NULL,
24
+ "interval_seconds" integer NOT NULL,
25
+ "max_attempts" integer DEFAULT 1 NOT NULL,
26
+ "retry_delay_seconds" integer DEFAULT 60 NOT NULL,
27
+ "enabled" boolean DEFAULT true NOT NULL,
28
+ "status" varchar(32) DEFAULT 'active' NOT NULL,
29
+ "next_run_at" timestamp with time zone NOT NULL,
30
+ "last_run_at" timestamp with time zone,
31
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
32
+ "created_by" varchar(64) NOT NULL,
33
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
34
+ "updated_by" varchar(64) NOT NULL
35
+ );
36
+ --> statement-breakpoint
37
+ ALTER TABLE "scheduled_task_runs" ADD CONSTRAINT "scheduled_task_runs_task_key_scheduled_tasks_key_fk" FOREIGN KEY ("task_key") REFERENCES "public"."scheduled_tasks"("key") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
38
+ CREATE UNIQUE INDEX "uk_scheduled_task_runs_single_running" ON "scheduled_task_runs" USING btree ("task_key") WHERE "scheduled_task_runs"."status" = 'running';--> statement-breakpoint
39
+ CREATE INDEX "idx_scheduled_task_runs_task_started" ON "scheduled_task_runs" USING btree ("task_key","started_at");--> statement-breakpoint
40
+ CREATE INDEX "idx_scheduled_task_runs_retry_due" ON "scheduled_task_runs" USING btree ("status","next_attempt_at");--> statement-breakpoint
41
+ CREATE INDEX "idx_scheduled_tasks_due" ON "scheduled_tasks" USING btree ("status","enabled","next_run_at");--> statement-breakpoint
42
+ CREATE INDEX "idx_scheduled_tasks_feature" ON "scheduled_tasks" USING btree ("feature_key");
@@ -0,0 +1,42 @@
1
+ CREATE TABLE "bulk_data_artifacts" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "job_id" varchar(64) NOT NULL,
4
+ "kind" varchar(24) NOT NULL,
5
+ "filename" varchar(240) NOT NULL,
6
+ "content_type" varchar(120) NOT NULL,
7
+ "content" text NOT NULL,
8
+ "sha256" varchar(64) NOT NULL,
9
+ "byte_size" integer NOT NULL,
10
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
11
+ "expires_at" timestamp with time zone NOT NULL
12
+ );
13
+ --> statement-breakpoint
14
+ CREATE TABLE "bulk_data_jobs" (
15
+ "id" varchar(64) PRIMARY KEY NOT NULL,
16
+ "kind" varchar(24) NOT NULL,
17
+ "resource" varchar(80) NOT NULL,
18
+ "mode" varchar(24),
19
+ "status" varchar(32) NOT NULL,
20
+ "idempotency_key" varchar(160) NOT NULL,
21
+ "request_digest" varchar(64) NOT NULL,
22
+ "requested_by" varchar(64) NOT NULL,
23
+ "total_rows" integer DEFAULT 0 NOT NULL,
24
+ "processed_rows" integer DEFAULT 0 NOT NULL,
25
+ "succeeded_rows" integer DEFAULT 0 NOT NULL,
26
+ "failed_rows" integer DEFAULT 0 NOT NULL,
27
+ "attempt" integer DEFAULT 0 NOT NULL,
28
+ "max_attempts" integer DEFAULT 3 NOT NULL,
29
+ "next_attempt_at" timestamp with time zone,
30
+ "error" text,
31
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
32
+ "started_at" timestamp with time zone,
33
+ "finished_at" timestamp with time zone,
34
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
35
+ );
36
+ --> statement-breakpoint
37
+ ALTER TABLE "bulk_data_artifacts" ADD CONSTRAINT "bulk_data_artifacts_job_id_bulk_data_jobs_id_fk" FOREIGN KEY ("job_id") REFERENCES "public"."bulk_data_jobs"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
38
+ CREATE UNIQUE INDEX "uk_bulk_data_artifacts_job_kind" ON "bulk_data_artifacts" USING btree ("job_id","kind");--> statement-breakpoint
39
+ CREATE INDEX "idx_bulk_data_artifacts_expiry" ON "bulk_data_artifacts" USING btree ("expires_at");--> statement-breakpoint
40
+ CREATE UNIQUE INDEX "uk_bulk_data_jobs_idempotency" ON "bulk_data_jobs" USING btree ("requested_by","kind","resource","idempotency_key");--> statement-breakpoint
41
+ CREATE INDEX "idx_bulk_data_jobs_claim" ON "bulk_data_jobs" USING btree ("status","next_attempt_at","created_at");--> statement-breakpoint
42
+ CREATE INDEX "idx_bulk_data_jobs_actor_created" ON "bulk_data_jobs" USING btree ("requested_by","created_at");
@@ -0,0 +1,11 @@
1
+ CREATE TABLE "platform_branding_settings" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "software_name" varchar(120) NOT NULL,
4
+ "logo_url" text,
5
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
6
+ "created_by" varchar(64) NOT NULL,
7
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
8
+ "updated_by" varchar(64) NOT NULL,
9
+ "deleted_at" timestamp with time zone,
10
+ "deleted_by" varchar(64)
11
+ );
@@ -0,0 +1,48 @@
1
+ CREATE TABLE "license_versions" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "key" varchar(80) NOT NULL,
4
+ "name" varchar(120) NOT NULL,
5
+ "description" text,
6
+ "status" varchar(32) DEFAULT 'active' NOT NULL,
7
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
8
+ "created_by" varchar(64) NOT NULL,
9
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
10
+ "updated_by" varchar(64) NOT NULL,
11
+ "archived_at" timestamp with time zone,
12
+ "archived_by" varchar(64)
13
+ );
14
+ --> statement-breakpoint
15
+ CREATE UNIQUE INDEX "uk_license_versions_key" ON "license_versions" USING btree ("key");--> statement-breakpoint
16
+ CREATE INDEX "idx_license_versions_status" ON "license_versions" USING btree ("status");--> statement-breakpoint
17
+ INSERT INTO "license_versions" ("id", "key", "name", "description", "created_by", "updated_by") VALUES
18
+ ('license-version-free-trial', 'free-trial', '免费试用版', '用于评估和有限期试用的 License 版本。', 'migration', 'migration'),
19
+ ('license-version-standard', 'standard', '普通付费版', '面向常规付费客户的 License 版本。', 'migration', 'migration'),
20
+ ('license-version-advanced', 'advanced', '高级付费版', '面向高级付费客户的 License 版本。', 'migration', 'migration')
21
+ ON CONFLICT ("key") DO NOTHING;--> statement-breakpoint
22
+ ALTER TABLE "license_contract_versions" ADD COLUMN "license_version_id" varchar(64);--> statement-breakpoint
23
+ UPDATE "license_contract_versions"
24
+ SET "license_version_id" = CASE
25
+ WHEN lower(coalesce("edition_label", '')) IN ('enterprise', 'professional', '企业版', '专业版', '高级付费版') THEN 'license-version-advanced'
26
+ WHEN lower(coalesce("edition_label", '')) IN ('community', 'trial', '社区版', '试用版', '免费试用版') THEN 'license-version-free-trial'
27
+ ELSE 'license-version-standard'
28
+ END;--> statement-breakpoint
29
+ ALTER TABLE "license_contract_versions" ALTER COLUMN "license_version_id" SET NOT NULL;--> statement-breakpoint
30
+ ALTER TABLE "licenses" ADD COLUMN "license_version_key" varchar(80);--> statement-breakpoint
31
+ ALTER TABLE "licenses" ADD COLUMN "license_version_name" varchar(120);--> statement-breakpoint
32
+ DROP TRIGGER "trg_licenses_immutable" ON "licenses";--> statement-breakpoint
33
+ UPDATE "licenses" AS "license"
34
+ SET
35
+ "license_version_key" = "version"."key",
36
+ "license_version_name" = "version"."name"
37
+ FROM "license_contract_versions" AS "contract"
38
+ INNER JOIN "license_versions" AS "version" ON "version"."id" = "contract"."license_version_id"
39
+ WHERE "contract"."id" = "license"."contract_version_id";--> statement-breakpoint
40
+ ALTER TABLE "licenses" ALTER COLUMN "license_version_key" SET NOT NULL;--> statement-breakpoint
41
+ ALTER TABLE "licenses" ALTER COLUMN "license_version_name" SET NOT NULL;--> statement-breakpoint
42
+ ALTER TABLE "license_contract_versions" ADD CONSTRAINT "license_contract_versions_license_version_id_license_versions_id_fk" FOREIGN KEY ("license_version_id") REFERENCES "public"."license_versions"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
43
+ ALTER TABLE "license_contract_versions" DROP COLUMN "edition_label";--> statement-breakpoint
44
+ ALTER TABLE "license_contract_versions" DROP COLUMN "entitlements";--> statement-breakpoint
45
+ ALTER TABLE "licenses" DROP COLUMN "edition_label";--> statement-breakpoint
46
+ ALTER TABLE "licenses" DROP COLUMN "entitlements";--> statement-breakpoint
47
+ CREATE TRIGGER "trg_licenses_immutable" BEFORE UPDATE OR DELETE ON "licenses"
48
+ FOR EACH ROW EXECUTE FUNCTION "reject_license_immutable_mutation"();
@@ -0,0 +1 @@
1
+ ALTER TABLE "platform_branding_settings" ADD COLUMN "description" varchar(500);
@@ -0,0 +1,29 @@
1
+ CREATE TABLE "notification_reads" (
2
+ "notification_id" varchar(64) NOT NULL,
3
+ "user_id" varchar(64) NOT NULL,
4
+ "read_at" timestamp with time zone DEFAULT now() NOT NULL,
5
+ CONSTRAINT "notification_reads_notification_id_user_id_pk" PRIMARY KEY("notification_id","user_id")
6
+ );
7
+ --> statement-breakpoint
8
+ CREATE TABLE "platform_notifications" (
9
+ "id" varchar(64) PRIMARY KEY NOT NULL,
10
+ "title" varchar(120) NOT NULL,
11
+ "summary" varchar(240) NOT NULL,
12
+ "content" text NOT NULL,
13
+ "category" varchar(40) NOT NULL,
14
+ "status" varchar(32) NOT NULL,
15
+ "published_at" timestamp with time zone NOT NULL,
16
+ "archived_at" timestamp with time zone,
17
+ "archived_by" varchar(64),
18
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
19
+ "created_by" varchar(64) NOT NULL,
20
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
21
+ "updated_by" varchar(64) NOT NULL,
22
+ "deleted_at" timestamp with time zone,
23
+ "deleted_by" varchar(64)
24
+ );
25
+ --> statement-breakpoint
26
+ ALTER TABLE "notification_reads" ADD CONSTRAINT "notification_reads_notification_id_platform_notifications_id_fk" FOREIGN KEY ("notification_id") REFERENCES "public"."platform_notifications"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
27
+ ALTER TABLE "notification_reads" ADD CONSTRAINT "notification_reads_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
28
+ CREATE INDEX "idx_notification_reads_user" ON "notification_reads" USING btree ("user_id","read_at");--> statement-breakpoint
29
+ CREATE INDEX "idx_platform_notifications_status_published" ON "platform_notifications" USING btree ("status","published_at");
@@ -0,0 +1,21 @@
1
+ INSERT INTO "roles" (
2
+ "id", "code", "name", "data_scope", "permission_keys", "menu_keys",
3
+ "department_ids", "status", "created_by", "updated_by"
4
+ ) VALUES
5
+ ('role_super_admin', 'super-admin', '超级管理员', 'all', '[]'::jsonb, '[]'::jsonb, '[]'::jsonb, 'active', 'system', 'system'),
6
+ ('role_department_manager', 'department-manager', '部门负责人', 'department-and-children', '[]'::jsonb, '[]'::jsonb, '[]'::jsonb, 'active', 'system', 'system'),
7
+ ('role_user', 'user', '普通用户', 'self', '[]'::jsonb, '[]'::jsonb, '[]'::jsonb, 'active', 'system', 'system'),
8
+ ('role_developer', 'developer', '开发运维', 'all', '[]'::jsonb, '[]'::jsonb, '[]'::jsonb, 'active', 'system', 'system')
9
+ ON CONFLICT DO NOTHING;
10
+ --> statement-breakpoint
11
+ UPDATE "users"
12
+ SET
13
+ "role_ids" = CASE
14
+ WHEN COALESCE("role_ids", '[]'::jsonb) @> '["role_super_admin"]'::jsonb
15
+ THEN COALESCE("role_ids", '[]'::jsonb)
16
+ ELSE COALESCE("role_ids", '[]'::jsonb) || '["role_super_admin"]'::jsonb
17
+ END,
18
+ "department_id" = COALESCE("department_id", 'dept_platform'),
19
+ "updated_at" = now(),
20
+ "updated_by" = 'system'
21
+ WHERE "id" = 'user_dev_admin';
@@ -0,0 +1,35 @@
1
+ DROP INDEX "uk_license_versions_key";--> statement-breakpoint
2
+ ALTER TABLE "license_versions" ADD COLUMN "project_id" varchar(64);--> statement-breakpoint
3
+ INSERT INTO "license_versions" (
4
+ "id", "project_id", "key", "name", "description", "status",
5
+ "created_at", "created_by", "updated_at", "updated_by", "archived_at", "archived_by"
6
+ )
7
+ SELECT
8
+ 'lv_' || md5("project"."id" || ':' || "source"."id"),
9
+ "project"."id",
10
+ "source"."key",
11
+ "source"."name",
12
+ "source"."description",
13
+ "source"."status",
14
+ "source"."created_at",
15
+ "source"."created_by",
16
+ "source"."updated_at",
17
+ "source"."updated_by",
18
+ "source"."archived_at",
19
+ "source"."archived_by"
20
+ FROM "license_projects" AS "project"
21
+ CROSS JOIN "license_versions" AS "source"
22
+ WHERE "source"."project_id" IS NULL
23
+ ON CONFLICT ("id") DO NOTHING;--> statement-breakpoint
24
+ UPDATE "license_contract_versions" AS "contract"
25
+ SET "license_version_id" = "project_version"."id"
26
+ FROM "license_versions" AS "source", "license_versions" AS "project_version"
27
+ WHERE "contract"."license_version_id" = "source"."id"
28
+ AND "source"."project_id" IS NULL
29
+ AND "project_version"."project_id" = "contract"."project_id"
30
+ AND "project_version"."key" = "source"."key";--> statement-breakpoint
31
+ DELETE FROM "license_versions" WHERE "project_id" IS NULL;--> statement-breakpoint
32
+ ALTER TABLE "license_versions" ALTER COLUMN "project_id" SET NOT NULL;--> statement-breakpoint
33
+ ALTER TABLE "license_versions" ADD CONSTRAINT "license_versions_project_id_license_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."license_projects"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
34
+ CREATE UNIQUE INDEX "uk_license_versions_project_key" ON "license_versions" USING btree ("project_id","key");--> statement-breakpoint
35
+ CREATE INDEX "idx_license_versions_project" ON "license_versions" USING btree ("project_id");
@@ -0,0 +1,22 @@
1
+ CREATE TABLE "work_orders" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "title" varchar(120) NOT NULL,
4
+ "description" text NOT NULL,
5
+ "priority" varchar(24) NOT NULL,
6
+ "workflow_status" varchar(32) NOT NULL,
7
+ "owner_id" varchar(64) NOT NULL,
8
+ "department_id" varchar(64),
9
+ "status" varchar(32) NOT NULL,
10
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
11
+ "created_by" varchar(64) NOT NULL,
12
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
13
+ "updated_by" varchar(64) NOT NULL,
14
+ "deleted_at" timestamp with time zone,
15
+ "deleted_by" varchar(64)
16
+ );
17
+ --> statement-breakpoint
18
+ ALTER TABLE "feature_flags" ADD COLUMN "allowed_license_versions" jsonb;--> statement-breakpoint
19
+ CREATE INDEX "idx_work_orders_owner" ON "work_orders" USING btree ("owner_id");--> statement-breakpoint
20
+ CREATE INDEX "idx_work_orders_department" ON "work_orders" USING btree ("department_id");--> statement-breakpoint
21
+ CREATE INDEX "idx_work_orders_status" ON "work_orders" USING btree ("status");--> statement-breakpoint
22
+ CREATE INDEX "idx_work_orders_workflow" ON "work_orders" USING btree ("workflow_status");
@@ -0,0 +1,3 @@
1
+ ALTER TABLE "users" ADD COLUMN "credential_state" varchar(40) DEFAULT 'active' NOT NULL;--> statement-breakpoint
2
+ ALTER TABLE "users" ADD COLUMN "password_changed_at" timestamp with time zone;--> statement-breakpoint
3
+ ALTER TABLE "users" ADD CONSTRAINT "users_credential_state_check" CHECK ("users"."credential_state" in ('active', 'must-change-password'));
@@ -0,0 +1,18 @@
1
+ CREATE TABLE "module_config_versions" (
2
+ "id" varchar(64) PRIMARY KEY NOT NULL,
3
+ "module_key" varchar(80) NOT NULL,
4
+ "version" integer NOT NULL,
5
+ "values" jsonb NOT NULL,
6
+ "diff" jsonb NOT NULL,
7
+ "apply_status" varchar(24) NOT NULL,
8
+ "apply_error" varchar(500),
9
+ "rollback_of_version" integer,
10
+ "reason" varchar(500),
11
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
12
+ "created_by" varchar(64) NOT NULL,
13
+ "applied_at" timestamp with time zone
14
+ );
15
+ --> statement-breakpoint
16
+ CREATE UNIQUE INDEX "uk_module_config_versions_module_version" ON "module_config_versions" USING btree ("module_key","version");--> statement-breakpoint
17
+ CREATE INDEX "idx_module_config_versions_module_status" ON "module_config_versions" USING btree ("module_key","apply_status");--> statement-breakpoint
18
+ CREATE INDEX "idx_module_config_versions_created_at" ON "module_config_versions" USING btree ("created_at");
@@ -0,0 +1,51 @@
1
+ CREATE TABLE "file_metadata" (
2
+ "id" varchar(40) PRIMARY KEY NOT NULL,
3
+ "owner_id" varchar(64) NOT NULL,
4
+ "purpose" varchar(80) NOT NULL,
5
+ "filename" varchar(240) NOT NULL,
6
+ "extension" varchar(24) NOT NULL,
7
+ "mime_type" varchar(120) NOT NULL,
8
+ "artifact_ref" varchar(37) NOT NULL,
9
+ "byte_size" bigint NOT NULL,
10
+ "sha256" varchar(64) NOT NULL,
11
+ "expires_at" timestamp with time zone,
12
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
13
+ );
14
+ --> statement-breakpoint
15
+ CREATE TABLE "file_upload_parts" (
16
+ "session_id" varchar(40) NOT NULL,
17
+ "part_number" integer NOT NULL,
18
+ "byte_offset" bigint NOT NULL,
19
+ "artifact_ref" varchar(37) NOT NULL,
20
+ "byte_size" bigint NOT NULL,
21
+ "sha256" varchar(64) NOT NULL,
22
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
23
+ );
24
+ --> statement-breakpoint
25
+ CREATE TABLE "file_upload_sessions" (
26
+ "id" varchar(40) PRIMARY KEY NOT NULL,
27
+ "owner_id" varchar(64) NOT NULL,
28
+ "purpose" varchar(80) NOT NULL,
29
+ "filename" varchar(240) NOT NULL,
30
+ "extension" varchar(24) NOT NULL,
31
+ "mime_type" varchar(120) NOT NULL,
32
+ "expected_byte_size" bigint NOT NULL,
33
+ "expected_sha256" varchar(64),
34
+ "received_byte_size" bigint DEFAULT 0 NOT NULL,
35
+ "next_part_number" integer DEFAULT 0 NOT NULL,
36
+ "status" varchar(24) NOT NULL,
37
+ "expires_at" timestamp with time zone NOT NULL,
38
+ "file_expires_at" timestamp with time zone,
39
+ "file_id" varchar(40),
40
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
41
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
42
+ );
43
+ --> statement-breakpoint
44
+ ALTER TABLE "file_upload_parts" ADD CONSTRAINT "file_upload_parts_session_id_file_upload_sessions_id_fk" FOREIGN KEY ("session_id") REFERENCES "public"."file_upload_sessions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
45
+ CREATE UNIQUE INDEX "uk_file_metadata_artifact_ref" ON "file_metadata" USING btree ("artifact_ref");--> statement-breakpoint
46
+ CREATE INDEX "idx_file_metadata_owner_created" ON "file_metadata" USING btree ("owner_id","created_at");--> statement-breakpoint
47
+ CREATE INDEX "idx_file_metadata_expiry" ON "file_metadata" USING btree ("expires_at");--> statement-breakpoint
48
+ CREATE UNIQUE INDEX "uk_file_upload_parts_session_part" ON "file_upload_parts" USING btree ("session_id","part_number");--> statement-breakpoint
49
+ CREATE UNIQUE INDEX "uk_file_upload_parts_artifact_ref" ON "file_upload_parts" USING btree ("artifact_ref");--> statement-breakpoint
50
+ CREATE INDEX "idx_file_upload_sessions_owner_created" ON "file_upload_sessions" USING btree ("owner_id","created_at");--> statement-breakpoint
51
+ CREATE INDEX "idx_file_upload_sessions_expiry" ON "file_upload_sessions" USING btree ("status","expires_at");
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "bulk_data_artifacts" ALTER COLUMN "content" DROP NOT NULL;--> statement-breakpoint
2
+ ALTER TABLE "bulk_data_artifacts" ADD COLUMN "artifact_ref" varchar(37);