@contractspec/example.saas-boilerplate 1.57.0 → 1.58.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 (283) hide show
  1. package/.turbo/turbo-build.log +160 -180
  2. package/.turbo/turbo-prebuild.log +1 -0
  3. package/CHANGELOG.md +20 -0
  4. package/dist/billing/billing.entity.d.ts +40 -45
  5. package/dist/billing/billing.entity.d.ts.map +1 -1
  6. package/dist/billing/billing.entity.js +110 -118
  7. package/dist/billing/billing.enum.d.ts +2 -7
  8. package/dist/billing/billing.enum.d.ts.map +1 -1
  9. package/dist/billing/billing.enum.js +17 -24
  10. package/dist/billing/billing.event.d.ts +67 -73
  11. package/dist/billing/billing.event.d.ts.map +1 -1
  12. package/dist/billing/billing.event.js +84 -146
  13. package/dist/billing/billing.handler.d.ts +59 -62
  14. package/dist/billing/billing.handler.d.ts.map +1 -1
  15. package/dist/billing/billing.handler.js +140 -49
  16. package/dist/billing/billing.operations.d.ts +138 -144
  17. package/dist/billing/billing.operations.d.ts.map +1 -1
  18. package/dist/billing/billing.operations.js +273 -175
  19. package/dist/billing/billing.presentation.d.ts +2 -7
  20. package/dist/billing/billing.presentation.d.ts.map +1 -1
  21. package/dist/billing/billing.presentation.js +51 -57
  22. package/dist/billing/billing.schema.d.ts +159 -164
  23. package/dist/billing/billing.schema.d.ts.map +1 -1
  24. package/dist/billing/billing.schema.js +112 -204
  25. package/dist/billing/index.d.ts +11 -8
  26. package/dist/billing/index.d.ts.map +1 -0
  27. package/dist/billing/index.js +689 -9
  28. package/dist/browser/billing/billing.entity.js +113 -0
  29. package/dist/browser/billing/billing.enum.js +19 -0
  30. package/dist/browser/billing/billing.event.js +90 -0
  31. package/dist/browser/billing/billing.handler.js +148 -0
  32. package/dist/browser/billing/billing.operations.js +278 -0
  33. package/dist/browser/billing/billing.presentation.js +52 -0
  34. package/dist/browser/billing/billing.schema.js +121 -0
  35. package/dist/browser/billing/index.js +688 -0
  36. package/dist/browser/dashboard/dashboard.presentation.js +52 -0
  37. package/dist/browser/dashboard/index.js +52 -0
  38. package/dist/browser/docs/index.js +93 -0
  39. package/dist/browser/docs/saas-boilerplate.docblock.js +93 -0
  40. package/dist/browser/example.js +39 -0
  41. package/dist/browser/handlers/index.js +358 -0
  42. package/dist/browser/handlers/saas.handlers.js +134 -0
  43. package/dist/browser/index.js +3340 -0
  44. package/dist/browser/presentations/index.js +290 -0
  45. package/dist/browser/project/index.js +790 -0
  46. package/dist/browser/project/project.entity.js +77 -0
  47. package/dist/browser/project/project.enum.js +18 -0
  48. package/dist/browser/project/project.event.js +103 -0
  49. package/dist/browser/project/project.handler.js +178 -0
  50. package/dist/browser/project/project.operations.js +372 -0
  51. package/dist/browser/project/project.presentation.js +177 -0
  52. package/dist/browser/project/project.schema.js +134 -0
  53. package/dist/browser/saas-boilerplate.feature.js +88 -0
  54. package/dist/browser/seeders/index.js +20 -0
  55. package/dist/browser/settings/index.js +75 -0
  56. package/dist/browser/settings/settings.entity.js +74 -0
  57. package/dist/browser/settings/settings.enum.js +11 -0
  58. package/dist/browser/shared/mock-data.js +104 -0
  59. package/dist/browser/shared/overlay-types.js +0 -0
  60. package/dist/browser/tests/operations.test-spec.js +112 -0
  61. package/dist/browser/ui/SaasDashboard.js +988 -0
  62. package/dist/browser/ui/SaasProjectList.js +162 -0
  63. package/dist/browser/ui/SaasSettingsPanel.js +145 -0
  64. package/dist/browser/ui/hooks/index.js +159 -0
  65. package/dist/browser/ui/hooks/useProjectList.js +66 -0
  66. package/dist/browser/ui/hooks/useProjectMutations.js +91 -0
  67. package/dist/browser/ui/index.js +1808 -0
  68. package/dist/browser/ui/modals/CreateProjectModal.js +153 -0
  69. package/dist/browser/ui/modals/ProjectActionsModal.js +335 -0
  70. package/dist/browser/ui/modals/index.js +487 -0
  71. package/dist/browser/ui/overlays/demo-overlays.js +61 -0
  72. package/dist/browser/ui/overlays/index.js +61 -0
  73. package/dist/browser/ui/renderers/index.js +675 -0
  74. package/dist/browser/ui/renderers/project-list.markdown.js +499 -0
  75. package/dist/browser/ui/renderers/project-list.renderer.js +177 -0
  76. package/dist/dashboard/dashboard.presentation.d.ts +2 -7
  77. package/dist/dashboard/dashboard.presentation.d.ts.map +1 -1
  78. package/dist/dashboard/dashboard.presentation.js +51 -53
  79. package/dist/dashboard/index.d.ts +5 -2
  80. package/dist/dashboard/index.d.ts.map +1 -0
  81. package/dist/dashboard/index.js +53 -3
  82. package/dist/docs/index.d.ts +2 -1
  83. package/dist/docs/index.d.ts.map +1 -0
  84. package/dist/docs/index.js +94 -1
  85. package/dist/docs/saas-boilerplate.docblock.d.ts +2 -1
  86. package/dist/docs/saas-boilerplate.docblock.d.ts.map +1 -0
  87. package/dist/docs/saas-boilerplate.docblock.js +45 -51
  88. package/dist/example.d.ts +2 -6
  89. package/dist/example.d.ts.map +1 -1
  90. package/dist/example.js +38 -50
  91. package/dist/handlers/index.d.ts +7 -4
  92. package/dist/handlers/index.d.ts.map +1 -0
  93. package/dist/handlers/index.js +358 -4
  94. package/dist/handlers/saas.handlers.d.ts +60 -59
  95. package/dist/handlers/saas.handlers.d.ts.map +1 -1
  96. package/dist/handlers/saas.handlers.js +127 -140
  97. package/dist/index.d.ts +15 -45
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +3335 -75
  100. package/dist/node/billing/billing.entity.js +113 -0
  101. package/dist/node/billing/billing.enum.js +19 -0
  102. package/dist/node/billing/billing.event.js +90 -0
  103. package/dist/node/billing/billing.handler.js +148 -0
  104. package/dist/node/billing/billing.operations.js +278 -0
  105. package/dist/node/billing/billing.presentation.js +52 -0
  106. package/dist/node/billing/billing.schema.js +121 -0
  107. package/dist/node/billing/index.js +688 -0
  108. package/dist/node/dashboard/dashboard.presentation.js +52 -0
  109. package/dist/node/dashboard/index.js +52 -0
  110. package/dist/node/docs/index.js +93 -0
  111. package/dist/node/docs/saas-boilerplate.docblock.js +93 -0
  112. package/dist/node/example.js +39 -0
  113. package/dist/node/handlers/index.js +358 -0
  114. package/dist/node/handlers/saas.handlers.js +134 -0
  115. package/dist/node/index.js +3340 -0
  116. package/dist/node/presentations/index.js +290 -0
  117. package/dist/node/project/index.js +790 -0
  118. package/dist/node/project/project.entity.js +77 -0
  119. package/dist/node/project/project.enum.js +18 -0
  120. package/dist/node/project/project.event.js +103 -0
  121. package/dist/node/project/project.handler.js +178 -0
  122. package/dist/node/project/project.operations.js +372 -0
  123. package/dist/node/project/project.presentation.js +177 -0
  124. package/dist/node/project/project.schema.js +134 -0
  125. package/dist/node/saas-boilerplate.feature.js +88 -0
  126. package/dist/node/seeders/index.js +20 -0
  127. package/dist/node/settings/index.js +75 -0
  128. package/dist/node/settings/settings.entity.js +74 -0
  129. package/dist/node/settings/settings.enum.js +11 -0
  130. package/dist/node/shared/mock-data.js +104 -0
  131. package/dist/node/shared/overlay-types.js +0 -0
  132. package/dist/node/tests/operations.test-spec.js +112 -0
  133. package/dist/node/ui/SaasDashboard.js +988 -0
  134. package/dist/node/ui/SaasProjectList.js +162 -0
  135. package/dist/node/ui/SaasSettingsPanel.js +145 -0
  136. package/dist/node/ui/hooks/index.js +159 -0
  137. package/dist/node/ui/hooks/useProjectList.js +66 -0
  138. package/dist/node/ui/hooks/useProjectMutations.js +91 -0
  139. package/dist/node/ui/index.js +1808 -0
  140. package/dist/node/ui/modals/CreateProjectModal.js +153 -0
  141. package/dist/node/ui/modals/ProjectActionsModal.js +335 -0
  142. package/dist/node/ui/modals/index.js +487 -0
  143. package/dist/node/ui/overlays/demo-overlays.js +61 -0
  144. package/dist/node/ui/overlays/index.js +61 -0
  145. package/dist/node/ui/renderers/index.js +675 -0
  146. package/dist/node/ui/renderers/project-list.markdown.js +499 -0
  147. package/dist/node/ui/renderers/project-list.renderer.js +177 -0
  148. package/dist/presentations/index.d.ts +13 -14
  149. package/dist/presentations/index.d.ts.map +1 -1
  150. package/dist/presentations/index.js +289 -15
  151. package/dist/project/index.d.ts +11 -8
  152. package/dist/project/index.d.ts.map +1 -0
  153. package/dist/project/index.js +791 -9
  154. package/dist/project/project.entity.d.ts +23 -28
  155. package/dist/project/project.entity.d.ts.map +1 -1
  156. package/dist/project/project.entity.js +75 -82
  157. package/dist/project/project.enum.d.ts +2 -7
  158. package/dist/project/project.enum.d.ts.map +1 -1
  159. package/dist/project/project.enum.js +16 -23
  160. package/dist/project/project.event.d.ts +69 -75
  161. package/dist/project/project.event.d.ts.map +1 -1
  162. package/dist/project/project.event.js +95 -156
  163. package/dist/project/project.handler.d.ts +44 -47
  164. package/dist/project/project.handler.d.ts.map +1 -1
  165. package/dist/project/project.handler.js +168 -71
  166. package/dist/project/project.operations.d.ts +341 -347
  167. package/dist/project/project.operations.d.ts.map +1 -1
  168. package/dist/project/project.operations.js +366 -253
  169. package/dist/project/project.presentation.d.ts +2 -7
  170. package/dist/project/project.presentation.d.ts.map +1 -1
  171. package/dist/project/project.presentation.js +174 -61
  172. package/dist/project/project.schema.d.ts +191 -196
  173. package/dist/project/project.schema.d.ts.map +1 -1
  174. package/dist/project/project.schema.js +125 -205
  175. package/dist/saas-boilerplate.feature.d.ts +1 -6
  176. package/dist/saas-boilerplate.feature.d.ts.map +1 -1
  177. package/dist/saas-boilerplate.feature.js +87 -206
  178. package/dist/seeders/index.d.ts +4 -8
  179. package/dist/seeders/index.d.ts.map +1 -1
  180. package/dist/seeders/index.js +18 -16
  181. package/dist/settings/index.d.ts +6 -3
  182. package/dist/settings/index.d.ts.map +1 -0
  183. package/dist/settings/index.js +75 -3
  184. package/dist/settings/settings.entity.d.ts +23 -28
  185. package/dist/settings/settings.entity.d.ts.map +1 -1
  186. package/dist/settings/settings.entity.js +72 -75
  187. package/dist/settings/settings.enum.d.ts +1 -6
  188. package/dist/settings/settings.enum.d.ts.map +1 -1
  189. package/dist/settings/settings.enum.js +10 -19
  190. package/dist/shared/mock-data.d.ts +74 -77
  191. package/dist/shared/mock-data.d.ts.map +1 -1
  192. package/dist/shared/mock-data.js +102 -135
  193. package/dist/shared/overlay-types.d.ts +25 -28
  194. package/dist/shared/overlay-types.d.ts.map +1 -1
  195. package/dist/shared/overlay-types.js +1 -0
  196. package/dist/tests/operations.test-spec.d.ts +4 -9
  197. package/dist/tests/operations.test-spec.d.ts.map +1 -1
  198. package/dist/tests/operations.test-spec.js +108 -118
  199. package/dist/ui/SaasDashboard.d.ts +1 -6
  200. package/dist/ui/SaasDashboard.d.ts.map +1 -1
  201. package/dist/ui/SaasDashboard.js +977 -286
  202. package/dist/ui/SaasProjectList.d.ts +4 -11
  203. package/dist/ui/SaasProjectList.d.ts.map +1 -1
  204. package/dist/ui/SaasProjectList.js +159 -72
  205. package/dist/ui/SaasSettingsPanel.d.ts +1 -6
  206. package/dist/ui/SaasSettingsPanel.d.ts.map +1 -1
  207. package/dist/ui/SaasSettingsPanel.js +142 -134
  208. package/dist/ui/hooks/index.d.ts +3 -3
  209. package/dist/ui/hooks/index.d.ts.map +1 -0
  210. package/dist/ui/hooks/index.js +158 -4
  211. package/dist/ui/hooks/useProjectList.d.ts +26 -30
  212. package/dist/ui/hooks/useProjectList.d.ts.map +1 -1
  213. package/dist/ui/hooks/useProjectList.js +63 -71
  214. package/dist/ui/hooks/useProjectMutations.d.ts +20 -24
  215. package/dist/ui/hooks/useProjectMutations.d.ts.map +1 -1
  216. package/dist/ui/hooks/useProjectMutations.js +88 -142
  217. package/dist/ui/index.d.ts +8 -14
  218. package/dist/ui/index.d.ts.map +1 -0
  219. package/dist/ui/index.js +1809 -15
  220. package/dist/ui/modals/CreateProjectModal.d.ts +10 -19
  221. package/dist/ui/modals/CreateProjectModal.d.ts.map +1 -1
  222. package/dist/ui/modals/CreateProjectModal.js +150 -135
  223. package/dist/ui/modals/ProjectActionsModal.d.ts +20 -33
  224. package/dist/ui/modals/ProjectActionsModal.d.ts.map +1 -1
  225. package/dist/ui/modals/ProjectActionsModal.js +333 -289
  226. package/dist/ui/modals/index.d.ts +3 -3
  227. package/dist/ui/modals/index.d.ts.map +1 -0
  228. package/dist/ui/modals/index.js +487 -3
  229. package/dist/ui/overlays/demo-overlays.d.ts +10 -8
  230. package/dist/ui/overlays/demo-overlays.d.ts.map +1 -1
  231. package/dist/ui/overlays/demo-overlays.js +60 -68
  232. package/dist/ui/overlays/index.d.ts +2 -2
  233. package/dist/ui/overlays/index.d.ts.map +1 -0
  234. package/dist/ui/overlays/index.js +62 -3
  235. package/dist/ui/renderers/index.d.ts +3 -3
  236. package/dist/ui/renderers/index.d.ts.map +1 -0
  237. package/dist/ui/renderers/index.js +675 -3
  238. package/dist/ui/renderers/project-list.markdown.d.ts +15 -14
  239. package/dist/ui/renderers/project-list.markdown.d.ts.map +1 -1
  240. package/dist/ui/renderers/project-list.markdown.js +496 -146
  241. package/dist/ui/renderers/project-list.renderer.d.ts +6 -7
  242. package/dist/ui/renderers/project-list.renderer.d.ts.map +1 -1
  243. package/dist/ui/renderers/project-list.renderer.js +176 -15
  244. package/package.json +508 -98
  245. package/tsdown.config.js +1 -2
  246. package/.turbo/turbo-build$colon$bundle.log +0 -180
  247. package/dist/billing/billing.entity.js.map +0 -1
  248. package/dist/billing/billing.enum.js.map +0 -1
  249. package/dist/billing/billing.event.js.map +0 -1
  250. package/dist/billing/billing.handler.js.map +0 -1
  251. package/dist/billing/billing.operations.js.map +0 -1
  252. package/dist/billing/billing.presentation.js.map +0 -1
  253. package/dist/billing/billing.schema.js.map +0 -1
  254. package/dist/dashboard/dashboard.presentation.js.map +0 -1
  255. package/dist/docs/saas-boilerplate.docblock.js.map +0 -1
  256. package/dist/example.js.map +0 -1
  257. package/dist/handlers/saas.handlers.js.map +0 -1
  258. package/dist/index.js.map +0 -1
  259. package/dist/presentations/index.js.map +0 -1
  260. package/dist/project/project.entity.js.map +0 -1
  261. package/dist/project/project.enum.js.map +0 -1
  262. package/dist/project/project.event.js.map +0 -1
  263. package/dist/project/project.handler.js.map +0 -1
  264. package/dist/project/project.operations.js.map +0 -1
  265. package/dist/project/project.presentation.js.map +0 -1
  266. package/dist/project/project.schema.js.map +0 -1
  267. package/dist/saas-boilerplate.feature.js.map +0 -1
  268. package/dist/seeders/index.js.map +0 -1
  269. package/dist/settings/settings.entity.js.map +0 -1
  270. package/dist/settings/settings.enum.js.map +0 -1
  271. package/dist/shared/mock-data.js.map +0 -1
  272. package/dist/tests/operations.test-spec.js.map +0 -1
  273. package/dist/ui/SaasDashboard.js.map +0 -1
  274. package/dist/ui/SaasProjectList.js.map +0 -1
  275. package/dist/ui/SaasSettingsPanel.js.map +0 -1
  276. package/dist/ui/hooks/useProjectList.js.map +0 -1
  277. package/dist/ui/hooks/useProjectMutations.js.map +0 -1
  278. package/dist/ui/modals/CreateProjectModal.js.map +0 -1
  279. package/dist/ui/modals/ProjectActionsModal.js.map +0 -1
  280. package/dist/ui/overlays/demo-overlays.js.map +0 -1
  281. package/dist/ui/renderers/project-list.markdown.js.map +0 -1
  282. package/dist/ui/renderers/project-list.renderer.js.map +0 -1
  283. package/tsconfig.tsbuildinfo +0 -1
@@ -1,148 +1,135 @@
1
+ // @bun
2
+ // src/handlers/saas.handlers.ts
1
3
  import { web } from "@contractspec/lib.runtime-sandbox";
2
-
3
- //#region src/handlers/saas.handlers.ts
4
- const { generateId } = web;
4
+ var { generateId } = web;
5
5
  function rowToProject(row) {
6
- return {
7
- id: row.id,
8
- projectId: row.projectId,
9
- organizationId: row.organizationId,
10
- name: row.name,
11
- description: row.description ?? void 0,
12
- status: row.status,
13
- tier: row.tier,
14
- createdAt: new Date(row.createdAt),
15
- updatedAt: new Date(row.updatedAt)
16
- };
6
+ return {
7
+ id: row.id,
8
+ projectId: row.projectId,
9
+ organizationId: row.organizationId,
10
+ name: row.name,
11
+ description: row.description ?? undefined,
12
+ status: row.status,
13
+ tier: row.tier,
14
+ createdAt: new Date(row.createdAt),
15
+ updatedAt: new Date(row.updatedAt)
16
+ };
17
17
  }
18
18
  function rowToSubscription(row) {
19
- return {
20
- id: row.id,
21
- projectId: row.projectId,
22
- organizationId: row.organizationId,
23
- plan: row.plan,
24
- status: row.status,
25
- billingCycle: row.billingCycle,
26
- currentPeriodStart: new Date(row.currentPeriodStart),
27
- currentPeriodEnd: new Date(row.currentPeriodEnd),
28
- cancelAtPeriodEnd: Boolean(row.cancelAtPeriodEnd)
29
- };
19
+ return {
20
+ id: row.id,
21
+ projectId: row.projectId,
22
+ organizationId: row.organizationId,
23
+ plan: row.plan,
24
+ status: row.status,
25
+ billingCycle: row.billingCycle,
26
+ currentPeriodStart: new Date(row.currentPeriodStart),
27
+ currentPeriodEnd: new Date(row.currentPeriodEnd),
28
+ cancelAtPeriodEnd: Boolean(row.cancelAtPeriodEnd)
29
+ };
30
30
  }
31
31
  function createSaasHandlers(db) {
32
- /**
33
- * List projects
34
- */
35
- async function listProjects(input) {
36
- const { projectId, organizationId, status, search, limit = 20, offset = 0 } = input;
37
- let whereClause = "WHERE projectId = ?";
38
- const params = [projectId];
39
- if (organizationId) {
40
- whereClause += " AND organizationId = ?";
41
- params.push(organizationId);
42
- }
43
- if (status && status !== "all") {
44
- whereClause += " AND status = ?";
45
- params.push(status);
46
- }
47
- if (search) {
48
- whereClause += " AND (name LIKE ? OR description LIKE ?)";
49
- params.push(`%${search}%`, `%${search}%`);
50
- }
51
- const total = (await db.query(`SELECT COUNT(*) as count FROM saas_project ${whereClause}`, params)).rows[0]?.count ?? 0;
52
- const rows = (await db.query(`SELECT * FROM saas_project ${whereClause} ORDER BY createdAt DESC LIMIT ? OFFSET ?`, [
53
- ...params,
54
- limit,
55
- offset
56
- ])).rows;
57
- return {
58
- items: rows.map(rowToProject),
59
- total,
60
- hasMore: offset + rows.length < total
61
- };
62
- }
63
- /**
64
- * Get a single project
65
- */
66
- async function getProject(id) {
67
- const rows = (await db.query(`SELECT * FROM saas_project WHERE id = ?`, [id])).rows;
68
- return rows[0] ? rowToProject(rows[0]) : null;
69
- }
70
- /**
71
- * Create a project
72
- */
73
- async function createProject(input, context) {
74
- const id = generateId("proj");
75
- const now = (/* @__PURE__ */ new Date()).toISOString();
76
- await db.execute(`INSERT INTO saas_project (id, projectId, organizationId, name, description, status, tier, createdAt, updatedAt)
32
+ async function listProjects(input) {
33
+ const {
34
+ projectId,
35
+ organizationId,
36
+ status,
37
+ search,
38
+ limit = 20,
39
+ offset = 0
40
+ } = input;
41
+ let whereClause = "WHERE projectId = ?";
42
+ const params = [projectId];
43
+ if (organizationId) {
44
+ whereClause += " AND organizationId = ?";
45
+ params.push(organizationId);
46
+ }
47
+ if (status && status !== "all") {
48
+ whereClause += " AND status = ?";
49
+ params.push(status);
50
+ }
51
+ if (search) {
52
+ whereClause += " AND (name LIKE ? OR description LIKE ?)";
53
+ params.push(`%${search}%`, `%${search}%`);
54
+ }
55
+ const countResult = (await db.query(`SELECT COUNT(*) as count FROM saas_project ${whereClause}`, params)).rows;
56
+ const total = countResult[0]?.count ?? 0;
57
+ const rows = (await db.query(`SELECT * FROM saas_project ${whereClause} ORDER BY createdAt DESC LIMIT ? OFFSET ?`, [...params, limit, offset])).rows;
58
+ return {
59
+ items: rows.map(rowToProject),
60
+ total,
61
+ hasMore: offset + rows.length < total
62
+ };
63
+ }
64
+ async function getProject(id) {
65
+ const rows = (await db.query(`SELECT * FROM saas_project WHERE id = ?`, [id])).rows;
66
+ return rows[0] ? rowToProject(rows[0]) : null;
67
+ }
68
+ async function createProject(input, context) {
69
+ const id = generateId("proj");
70
+ const now = new Date().toISOString();
71
+ await db.execute(`INSERT INTO saas_project (id, projectId, organizationId, name, description, status, tier, createdAt, updatedAt)
77
72
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
78
- id,
79
- context.projectId,
80
- context.organizationId,
81
- input.name,
82
- input.description ?? null,
83
- "DRAFT",
84
- input.tier ?? "FREE",
85
- now,
86
- now
87
- ]);
88
- const rows = (await db.query(`SELECT * FROM saas_project WHERE id = ?`, [id])).rows;
89
- return rowToProject(rows[0]);
90
- }
91
- /**
92
- * Update a project
93
- */
94
- async function updateProject(input) {
95
- const now = (/* @__PURE__ */ new Date()).toISOString();
96
- const updates = ["updatedAt = ?"];
97
- const params = [now];
98
- if (input.name !== void 0) {
99
- updates.push("name = ?");
100
- params.push(input.name);
101
- }
102
- if (input.description !== void 0) {
103
- updates.push("description = ?");
104
- params.push(input.description);
105
- }
106
- if (input.status !== void 0) {
107
- updates.push("status = ?");
108
- params.push(input.status);
109
- }
110
- params.push(input.id);
111
- await db.execute(`UPDATE saas_project SET ${updates.join(", ")} WHERE id = ?`, params);
112
- const rows = (await db.query(`SELECT * FROM saas_project WHERE id = ?`, [input.id])).rows;
113
- if (!rows[0]) throw new Error("NOT_FOUND");
114
- return rowToProject(rows[0]);
115
- }
116
- /**
117
- * Delete a project
118
- */
119
- async function deleteProject(id) {
120
- await db.execute(`DELETE FROM saas_project WHERE id = ?`, [id]);
121
- }
122
- /**
123
- * Get subscription for an organization
124
- */
125
- async function getSubscription(input) {
126
- let query = `SELECT * FROM saas_subscription WHERE projectId = ?`;
127
- const params = [input.projectId];
128
- if (input.organizationId) {
129
- query += " AND organizationId = ?";
130
- params.push(input.organizationId);
131
- }
132
- query += " LIMIT 1";
133
- const rows = (await db.query(query, params)).rows;
134
- return rows[0] ? rowToSubscription(rows[0]) : null;
135
- }
136
- return {
137
- listProjects,
138
- getProject,
139
- createProject,
140
- updateProject,
141
- deleteProject,
142
- getSubscription
143
- };
73
+ id,
74
+ context.projectId,
75
+ context.organizationId,
76
+ input.name,
77
+ input.description ?? null,
78
+ "DRAFT",
79
+ input.tier ?? "FREE",
80
+ now,
81
+ now
82
+ ]);
83
+ const rows = (await db.query(`SELECT * FROM saas_project WHERE id = ?`, [id])).rows;
84
+ return rowToProject(rows[0]);
85
+ }
86
+ async function updateProject(input) {
87
+ const now = new Date().toISOString();
88
+ const updates = ["updatedAt = ?"];
89
+ const params = [now];
90
+ if (input.name !== undefined) {
91
+ updates.push("name = ?");
92
+ params.push(input.name);
93
+ }
94
+ if (input.description !== undefined) {
95
+ updates.push("description = ?");
96
+ params.push(input.description);
97
+ }
98
+ if (input.status !== undefined) {
99
+ updates.push("status = ?");
100
+ params.push(input.status);
101
+ }
102
+ params.push(input.id);
103
+ await db.execute(`UPDATE saas_project SET ${updates.join(", ")} WHERE id = ?`, params);
104
+ const rows = (await db.query(`SELECT * FROM saas_project WHERE id = ?`, [input.id])).rows;
105
+ if (!rows[0]) {
106
+ throw new Error("NOT_FOUND");
107
+ }
108
+ return rowToProject(rows[0]);
109
+ }
110
+ async function deleteProject(id) {
111
+ await db.execute(`DELETE FROM saas_project WHERE id = ?`, [id]);
112
+ }
113
+ async function getSubscription(input) {
114
+ let query = `SELECT * FROM saas_subscription WHERE projectId = ?`;
115
+ const params = [input.projectId];
116
+ if (input.organizationId) {
117
+ query += " AND organizationId = ?";
118
+ params.push(input.organizationId);
119
+ }
120
+ query += " LIMIT 1";
121
+ const rows = (await db.query(query, params)).rows;
122
+ return rows[0] ? rowToSubscription(rows[0]) : null;
123
+ }
124
+ return {
125
+ listProjects,
126
+ getProject,
127
+ createProject,
128
+ updateProject,
129
+ deleteProject,
130
+ getSubscription
131
+ };
144
132
  }
145
-
146
- //#endregion
147
- export { createSaasHandlers };
148
- //# sourceMappingURL=saas.handlers.js.map
133
+ export {
134
+ createSaasHandlers
135
+ };
package/dist/index.d.ts CHANGED
@@ -1,54 +1,24 @@
1
- import { BillingUsageEntity, SubscriptionEntity, SubscriptionStatusEnum, UsageLimitEntity } from "./billing/billing.entity.js";
2
- import { FeatureAccessReasonEnum, SubscriptionStatusSchemaEnum } from "./billing/billing.enum.js";
3
- import { SubscriptionChangedEvent, UsageLimitReachedEvent, UsageRecordedEvent } from "./billing/billing.event.js";
4
- import { CheckFeatureAccessInput, CheckFeatureAccessOutput, RecordUsageInput, Subscription, UsageSummary, mockCheckFeatureAccessHandler, mockGetSubscriptionHandler, mockGetUsageSummaryHandler, mockRecordUsageHandler } from "./billing/billing.handler.js";
5
- import { CheckFeatureAccessContract, GetSubscriptionContract, GetUsageSummaryContract, RecordUsageContract } from "./billing/billing.operations.js";
6
- import { SubscriptionPresentation, UsageDashboardPresentation } from "./billing/billing.presentation.js";
7
- import { CheckFeatureAccessInputModel, CheckFeatureAccessOutputModel, GetUsageSummaryInputModel, GetUsageSummaryOutputModel, RecordUsageInputModel, RecordUsageOutputModel, SubscriptionModel, UsageRecordedPayloadModel, UsageSummaryModel } from "./billing/billing.schema.js";
8
- import "./billing/index.js";
9
- import { SaasDashboardPresentation, SettingsPanelPresentation } from "./dashboard/dashboard.presentation.js";
10
- import "./dashboard/index.js";
11
- import example from "./example.js";
12
- import { CreateProjectInput, ListProjectsInput, ListProjectsOutput, Project, UpdateProjectInput, mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockListProjectsHandler, mockUpdateProjectHandler } from "./project/project.handler.js";
13
- import { SaasHandlers, createSaasHandlers } from "./handlers/saas.handlers.js";
14
- import { ProjectStatusFilterEnum, ProjectStatusSchemaEnum } from "./project/project.enum.js";
15
- import { CreateProjectInputModel, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectInputModel, ListProjectsInputModel, ListProjectsOutputModel, ProjectDeletedPayloadModel, ProjectModel, UpdateProjectInputModel } from "./project/project.schema.js";
16
- import { CreateProjectContract, DeleteProjectContract, GetProjectContract, ListProjectsContract, UpdateProjectContract } from "./project/project.operations.js";
17
- import { ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectUpdatedEvent } from "./project/project.event.js";
18
- import { ProjectEntity, ProjectMemberEntity, ProjectStatusEnum } from "./project/project.entity.js";
19
- import { ProjectDetailPresentation, ProjectListPresentation } from "./project/project.presentation.js";
20
- import "./project/index.js";
21
- import { SettingsScopeEnum } from "./settings/settings.enum.js";
22
- import { FeatureFlagEntity, SettingsEntity } from "./settings/settings.entity.js";
23
- import "./settings/index.js";
24
- import { SaasBoilerplateFeature } from "./saas-boilerplate.feature.js";
25
- import { SaasDashboard } from "./ui/SaasDashboard.js";
26
- import { SaasProjectList } from "./ui/SaasProjectList.js";
27
- import { SaasSettingsPanel } from "./ui/SaasSettingsPanel.js";
28
- import { CreateProjectModal } from "./ui/modals/CreateProjectModal.js";
29
- import { ProjectActionsModal } from "./ui/modals/ProjectActionsModal.js";
30
- import { UseProjectListOptions, useProjectList } from "./ui/hooks/useProjectList.js";
31
- import { UseProjectMutationsOptions, useProjectMutations } from "./ui/hooks/useProjectMutations.js";
32
- import { projectListReactRenderer } from "./ui/renderers/project-list.renderer.js";
33
- import { projectListMarkdownRenderer, saasBillingMarkdownRenderer, saasDashboardMarkdownRenderer } from "./ui/renderers/project-list.markdown.js";
34
- import { saasDemoOverlay, saasFreeUserOverlay, saasOverlays } from "./ui/overlays/demo-overlays.js";
35
- import "./ui/index.js";
36
- import { ModuleSchemaContribution } from "@contractspec/lib.schema";
37
-
38
- //#region src/index.d.ts
1
+ export * from './billing';
2
+ export * from './project';
3
+ export * from './settings';
4
+ export * from './dashboard';
5
+ export * from './saas-boilerplate.feature';
6
+ export * from './ui';
7
+ export { createSaasHandlers, type SaasHandlers, } from './handlers/saas.handlers';
8
+ export { default as example } from './example';
9
+ import './docs';
10
+ import type { ModuleSchemaContribution } from '@contractspec/lib.schema';
39
11
  /**
40
12
  * SaaS boilerplate schema contribution.
41
13
  */
42
- declare const saasBoilerplateSchemaContribution: ModuleSchemaContribution;
14
+ export declare const saasBoilerplateSchemaContribution: ModuleSchemaContribution;
43
15
  /**
44
16
  * Complete schema composition for SaaS Boilerplate.
45
17
  * Use with `database schema:compose` to generate Prisma schema.
46
18
  */
47
- declare const schemaComposition: {
48
- modules: ModuleSchemaContribution[];
49
- provider: "postgresql";
50
- outputPath: string;
19
+ export declare const schemaComposition: {
20
+ modules: ModuleSchemaContribution[];
21
+ provider: "postgresql";
22
+ outputPath: string;
51
23
  };
52
- //#endregion
53
- export { BillingUsageEntity, CheckFeatureAccessContract, CheckFeatureAccessInput, CheckFeatureAccessInputModel, CheckFeatureAccessOutput, CheckFeatureAccessOutputModel, CreateProjectContract, CreateProjectInput, CreateProjectInputModel, CreateProjectModal, DeleteProjectContract, DeleteProjectInputModel, DeleteProjectOutputModel, FeatureAccessReasonEnum, FeatureFlagEntity, GetProjectContract, GetProjectInputModel, GetSubscriptionContract, GetUsageSummaryContract, GetUsageSummaryInputModel, GetUsageSummaryOutputModel, ListProjectsContract, ListProjectsInput, ListProjectsInputModel, ListProjectsOutput, ListProjectsOutputModel, Project, ProjectActionsModal, ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectDeletedPayloadModel, ProjectDetailPresentation, ProjectEntity, ProjectListPresentation, ProjectMemberEntity, ProjectModel, ProjectStatusEnum, ProjectStatusFilterEnum, ProjectStatusSchemaEnum, ProjectUpdatedEvent, RecordUsageContract, RecordUsageInput, RecordUsageInputModel, RecordUsageOutputModel, SaasBoilerplateFeature, SaasDashboard, SaasDashboardPresentation, type SaasHandlers, SaasProjectList, SaasSettingsPanel, SettingsEntity, SettingsPanelPresentation, SettingsScopeEnum, Subscription, SubscriptionChangedEvent, SubscriptionEntity, SubscriptionModel, SubscriptionPresentation, SubscriptionStatusEnum, SubscriptionStatusSchemaEnum, UpdateProjectContract, UpdateProjectInput, UpdateProjectInputModel, UsageDashboardPresentation, UsageLimitEntity, UsageLimitReachedEvent, UsageRecordedEvent, UsageRecordedPayloadModel, UsageSummary, UsageSummaryModel, UseProjectListOptions, UseProjectMutationsOptions, createSaasHandlers, example, mockCheckFeatureAccessHandler, mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockGetSubscriptionHandler, mockGetUsageSummaryHandler, mockListProjectsHandler, mockRecordUsageHandler, mockUpdateProjectHandler, projectListMarkdownRenderer, projectListReactRenderer, saasBillingMarkdownRenderer, saasBoilerplateSchemaContribution, saasDashboardMarkdownRenderer, saasDemoOverlay, saasFreeUserOverlay, saasOverlays, schemaComposition, useProjectList, useProjectMutations };
54
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+Ca,iCAAA,EAAmC,wBAAA;;;;;cAkBnC,iBAAA;WAUZ,wBAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAG5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,MAAM,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAG/C,OAAO,QAAQ,CAAC;AAOhB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAkBzE;;GAEG;AACH,eAAO,MAAM,iCAAiC,EAAE,wBAY/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;CAU7B,CAAC"}