@contractspec/example.saas-boilerplate 1.44.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 (142) hide show
  1. package/.turbo/turbo-build$colon$bundle.log +113 -0
  2. package/.turbo/turbo-build.log +114 -0
  3. package/CHANGELOG.md +246 -0
  4. package/LICENSE +21 -0
  5. package/README.md +156 -0
  6. package/dist/billing/billing.entity.d.ts +61 -0
  7. package/dist/billing/billing.entity.d.ts.map +1 -0
  8. package/dist/billing/billing.entity.js +122 -0
  9. package/dist/billing/billing.entity.js.map +1 -0
  10. package/dist/billing/billing.enum.d.ts +16 -0
  11. package/dist/billing/billing.enum.d.ts.map +1 -0
  12. package/dist/billing/billing.enum.js +27 -0
  13. package/dist/billing/billing.enum.js.map +1 -0
  14. package/dist/billing/billing.event.d.ts +86 -0
  15. package/dist/billing/billing.event.d.ts.map +1 -0
  16. package/dist/billing/billing.event.js +153 -0
  17. package/dist/billing/billing.event.js.map +1 -0
  18. package/dist/billing/billing.handler.d.ts +82 -0
  19. package/dist/billing/billing.handler.d.ts.map +1 -0
  20. package/dist/billing/billing.handler.js +58 -0
  21. package/dist/billing/billing.handler.js.map +1 -0
  22. package/dist/billing/billing.operations.d.ts +166 -0
  23. package/dist/billing/billing.operations.d.ts.map +1 -0
  24. package/dist/billing/billing.operations.js +181 -0
  25. package/dist/billing/billing.operations.js.map +1 -0
  26. package/dist/billing/billing.presentation.d.ts +15 -0
  27. package/dist/billing/billing.presentation.d.ts.map +1 -0
  28. package/dist/billing/billing.presentation.js +59 -0
  29. package/dist/billing/billing.presentation.js.map +1 -0
  30. package/dist/billing/billing.schema.d.ts +201 -0
  31. package/dist/billing/billing.schema.d.ts.map +1 -0
  32. package/dist/billing/billing.schema.js +214 -0
  33. package/dist/billing/billing.schema.js.map +1 -0
  34. package/dist/billing/index.d.ts +8 -0
  35. package/dist/billing/index.js +9 -0
  36. package/dist/dashboard/dashboard.presentation.d.ts +15 -0
  37. package/dist/dashboard/dashboard.presentation.d.ts.map +1 -0
  38. package/dist/dashboard/dashboard.presentation.js +55 -0
  39. package/dist/dashboard/dashboard.presentation.js.map +1 -0
  40. package/dist/dashboard/index.d.ts +2 -0
  41. package/dist/dashboard/index.js +3 -0
  42. package/dist/docs/index.d.ts +1 -0
  43. package/dist/docs/index.js +1 -0
  44. package/dist/docs/saas-boilerplate.docblock.d.ts +1 -0
  45. package/dist/docs/saas-boilerplate.docblock.js +100 -0
  46. package/dist/docs/saas-boilerplate.docblock.js.map +1 -0
  47. package/dist/example.d.ts +37 -0
  48. package/dist/example.d.ts.map +1 -0
  49. package/dist/example.js +46 -0
  50. package/dist/example.js.map +1 -0
  51. package/dist/handlers/index.d.ts +3 -0
  52. package/dist/handlers/index.js +4 -0
  53. package/dist/index.d.ts +42 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +69 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/presentations/index.d.ts +17 -0
  58. package/dist/presentations/index.d.ts.map +1 -0
  59. package/dist/presentations/index.js +17 -0
  60. package/dist/presentations/index.js.map +1 -0
  61. package/dist/project/index.d.ts +8 -0
  62. package/dist/project/index.js +9 -0
  63. package/dist/project/project.entity.d.ts +40 -0
  64. package/dist/project/project.entity.d.ts.map +1 -0
  65. package/dist/project/project.entity.js +85 -0
  66. package/dist/project/project.entity.js.map +1 -0
  67. package/dist/project/project.enum.d.ts +16 -0
  68. package/dist/project/project.enum.d.ts.map +1 -0
  69. package/dist/project/project.enum.js +26 -0
  70. package/dist/project/project.enum.js.map +1 -0
  71. package/dist/project/project.event.d.ts +92 -0
  72. package/dist/project/project.event.d.ts.map +1 -0
  73. package/dist/project/project.event.js +165 -0
  74. package/dist/project/project.event.js.map +1 -0
  75. package/dist/project/project.handler.d.ts +72 -0
  76. package/dist/project/project.handler.d.ts.map +1 -0
  77. package/dist/project/project.handler.js +82 -0
  78. package/dist/project/project.handler.js.map +1 -0
  79. package/dist/project/project.operations.d.ts +419 -0
  80. package/dist/project/project.operations.d.ts.map +1 -0
  81. package/dist/project/project.operations.js +260 -0
  82. package/dist/project/project.operations.js.map +1 -0
  83. package/dist/project/project.presentation.d.ts +15 -0
  84. package/dist/project/project.presentation.d.ts.map +1 -0
  85. package/dist/project/project.presentation.js +65 -0
  86. package/dist/project/project.presentation.js.map +1 -0
  87. package/dist/project/project.schema.d.ts +235 -0
  88. package/dist/project/project.schema.d.ts.map +1 -0
  89. package/dist/project/project.schema.js +215 -0
  90. package/dist/project/project.schema.js.map +1 -0
  91. package/dist/saas-boilerplate.feature.d.ts +12 -0
  92. package/dist/saas-boilerplate.feature.d.ts.map +1 -0
  93. package/dist/saas-boilerplate.feature.js +201 -0
  94. package/dist/saas-boilerplate.feature.js.map +1 -0
  95. package/dist/settings/index.d.ts +3 -0
  96. package/dist/settings/index.js +4 -0
  97. package/dist/settings/settings.entity.d.ts +37 -0
  98. package/dist/settings/settings.entity.d.ts.map +1 -0
  99. package/dist/settings/settings.entity.js +78 -0
  100. package/dist/settings/settings.entity.js.map +1 -0
  101. package/dist/settings/settings.enum.d.ts +10 -0
  102. package/dist/settings/settings.enum.d.ts.map +1 -0
  103. package/dist/settings/settings.enum.js +21 -0
  104. package/dist/settings/settings.enum.js.map +1 -0
  105. package/dist/shared/mock-data.d.ts +86 -0
  106. package/dist/shared/mock-data.d.ts.map +1 -0
  107. package/dist/shared/mock-data.js +138 -0
  108. package/dist/shared/mock-data.js.map +1 -0
  109. package/example.ts +1 -0
  110. package/package.json +113 -0
  111. package/src/billing/billing.entity.ts +158 -0
  112. package/src/billing/billing.enum.ts +23 -0
  113. package/src/billing/billing.event.ts +108 -0
  114. package/src/billing/billing.handler.ts +137 -0
  115. package/src/billing/billing.operations.ts +187 -0
  116. package/src/billing/billing.presentation.ts +57 -0
  117. package/src/billing/billing.schema.ts +133 -0
  118. package/src/billing/index.ts +64 -0
  119. package/src/dashboard/dashboard.presentation.ts +57 -0
  120. package/src/dashboard/index.ts +8 -0
  121. package/src/docs/index.ts +1 -0
  122. package/src/docs/saas-boilerplate.docblock.ts +98 -0
  123. package/src/example.ts +31 -0
  124. package/src/handlers/index.ts +20 -0
  125. package/src/index.ts +71 -0
  126. package/src/presentations/index.ts +36 -0
  127. package/src/project/index.ts +66 -0
  128. package/src/project/project.entity.ts +93 -0
  129. package/src/project/project.enum.ts +22 -0
  130. package/src/project/project.event.ts +128 -0
  131. package/src/project/project.handler.ts +168 -0
  132. package/src/project/project.operations.ts +272 -0
  133. package/src/project/project.presentation.ts +59 -0
  134. package/src/project/project.schema.ts +147 -0
  135. package/src/saas-boilerplate.feature.ts +109 -0
  136. package/src/settings/index.ts +9 -0
  137. package/src/settings/settings.entity.ts +89 -0
  138. package/src/settings/settings.enum.ts +11 -0
  139. package/src/shared/mock-data.ts +110 -0
  140. package/tsconfig.json +10 -0
  141. package/tsconfig.tsbuildinfo +1 -0
  142. package/tsdown.config.js +7 -0
package/dist/index.js ADDED
@@ -0,0 +1,69 @@
1
+ import example_default from "./example.js";
2
+ import { FeatureAccessReasonEnum, SubscriptionStatusSchemaEnum } from "./billing/billing.enum.js";
3
+ import { CheckFeatureAccessInputModel, CheckFeatureAccessOutputModel, GetUsageSummaryInputModel, GetUsageSummaryOutputModel, RecordUsageInputModel, RecordUsageOutputModel, SubscriptionModel, UsageRecordedPayloadModel, UsageSummaryModel } from "./billing/billing.schema.js";
4
+ import { CheckFeatureAccessContract, GetSubscriptionContract, GetUsageSummaryContract, RecordUsageContract } from "./billing/billing.operations.js";
5
+ import { SubscriptionChangedEvent, UsageLimitReachedEvent, UsageRecordedEvent } from "./billing/billing.event.js";
6
+ import { BillingUsageEntity, SubscriptionEntity, SubscriptionStatusEnum, UsageLimitEntity } from "./billing/billing.entity.js";
7
+ import { SubscriptionPresentation, UsageDashboardPresentation } from "./billing/billing.presentation.js";
8
+ import { mockCheckFeatureAccessHandler, mockGetSubscriptionHandler, mockGetUsageSummaryHandler, mockRecordUsageHandler } from "./billing/billing.handler.js";
9
+ import "./billing/index.js";
10
+ import { ProjectStatusFilterEnum, ProjectStatusSchemaEnum } from "./project/project.enum.js";
11
+ import { CreateProjectInputModel, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectInputModel, ListProjectsInputModel, ListProjectsOutputModel, ProjectDeletedPayloadModel, ProjectModel, UpdateProjectInputModel } from "./project/project.schema.js";
12
+ import { CreateProjectContract, DeleteProjectContract, GetProjectContract, ListProjectsContract, UpdateProjectContract } from "./project/project.operations.js";
13
+ import { ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectUpdatedEvent } from "./project/project.event.js";
14
+ import { ProjectEntity, ProjectMemberEntity, ProjectStatusEnum } from "./project/project.entity.js";
15
+ import { ProjectDetailPresentation, ProjectListPresentation } from "./project/project.presentation.js";
16
+ import { mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockListProjectsHandler, mockUpdateProjectHandler } from "./project/project.handler.js";
17
+ import "./project/index.js";
18
+ import { SettingsScopeEnum } from "./settings/settings.enum.js";
19
+ import { FeatureFlagEntity, SettingsEntity } from "./settings/settings.entity.js";
20
+ import "./settings/index.js";
21
+ import { SaasDashboardPresentation, SettingsPanelPresentation } from "./dashboard/dashboard.presentation.js";
22
+ import "./dashboard/index.js";
23
+ import { SaasBoilerplateFeature } from "./saas-boilerplate.feature.js";
24
+ import "./docs/index.js";
25
+ import { identityRbacSchemaContribution } from "@contractspec/lib.identity-rbac";
26
+ import { jobsSchemaContribution } from "@contractspec/lib.jobs";
27
+ import { auditTrailSchemaContribution } from "@contractspec/module.audit-trail";
28
+ import { notificationsSchemaContribution } from "@contractspec/module.notifications";
29
+
30
+ //#region src/index.ts
31
+ /**
32
+ * SaaS boilerplate schema contribution.
33
+ */
34
+ const saasBoilerplateSchemaContribution = {
35
+ moduleId: "@contractspec/example.saas-boilerplate",
36
+ entities: [
37
+ ProjectEntity,
38
+ ProjectMemberEntity,
39
+ SettingsEntity,
40
+ FeatureFlagEntity,
41
+ SubscriptionEntity,
42
+ BillingUsageEntity,
43
+ UsageLimitEntity
44
+ ],
45
+ enums: [
46
+ ProjectStatusEnum,
47
+ SettingsScopeEnum,
48
+ SubscriptionStatusEnum
49
+ ]
50
+ };
51
+ /**
52
+ * Complete schema composition for SaaS Boilerplate.
53
+ * Use with `database schema:compose` to generate Prisma schema.
54
+ */
55
+ const schemaComposition = {
56
+ modules: [
57
+ identityRbacSchemaContribution,
58
+ jobsSchemaContribution,
59
+ auditTrailSchemaContribution,
60
+ notificationsSchemaContribution,
61
+ saasBoilerplateSchemaContribution
62
+ ],
63
+ provider: "postgresql",
64
+ outputPath: "./prisma/schema/generated.prisma"
65
+ };
66
+
67
+ //#endregion
68
+ export { BillingUsageEntity, CheckFeatureAccessContract, CheckFeatureAccessInputModel, CheckFeatureAccessOutputModel, CreateProjectContract, CreateProjectInputModel, DeleteProjectContract, DeleteProjectInputModel, DeleteProjectOutputModel, FeatureAccessReasonEnum, FeatureFlagEntity, GetProjectContract, GetProjectInputModel, GetSubscriptionContract, GetUsageSummaryContract, GetUsageSummaryInputModel, GetUsageSummaryOutputModel, ListProjectsContract, ListProjectsInputModel, ListProjectsOutputModel, ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectDeletedPayloadModel, ProjectDetailPresentation, ProjectEntity, ProjectListPresentation, ProjectMemberEntity, ProjectModel, ProjectStatusEnum, ProjectStatusFilterEnum, ProjectStatusSchemaEnum, ProjectUpdatedEvent, RecordUsageContract, RecordUsageInputModel, RecordUsageOutputModel, SaasBoilerplateFeature, SaasDashboardPresentation, SettingsEntity, SettingsPanelPresentation, SettingsScopeEnum, SubscriptionChangedEvent, SubscriptionEntity, SubscriptionModel, SubscriptionPresentation, SubscriptionStatusEnum, SubscriptionStatusSchemaEnum, UpdateProjectContract, UpdateProjectInputModel, UsageDashboardPresentation, UsageLimitEntity, UsageLimitReachedEvent, UsageRecordedEvent, UsageRecordedPayloadModel, UsageSummaryModel, example_default as example, mockCheckFeatureAccessHandler, mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockGetSubscriptionHandler, mockGetUsageSummaryHandler, mockListProjectsHandler, mockRecordUsageHandler, mockUpdateProjectHandler, saasBoilerplateSchemaContribution, schemaComposition };
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["saasBoilerplateSchemaContribution: ModuleSchemaContribution"],"sources":["../src/index.ts"],"sourcesContent":["// SaaS Boilerplate Example\n// Demonstrates ContractSpec principles for a complete SaaS application\n\n// Export all domain modules\nexport * from './billing';\nexport * from './project';\nexport * from './settings';\nexport * from './dashboard';\n\n// Export feature and example metadata\nexport * from './saas-boilerplate.feature';\nexport { default as example } from './example';\n\n// Import docs for registration\nimport './docs';\n\n// Schema composition configuration\nimport { identityRbacSchemaContribution } from '@contractspec/lib.identity-rbac';\nimport { jobsSchemaContribution } from '@contractspec/lib.jobs';\nimport { auditTrailSchemaContribution } from '@contractspec/module.audit-trail';\nimport { notificationsSchemaContribution } from '@contractspec/module.notifications';\nimport type { ModuleSchemaContribution } from '@contractspec/lib.schema';\nimport {\n ProjectEntity,\n ProjectMemberEntity,\n ProjectStatusEnum,\n} from './project/project.entity';\nimport {\n SettingsEntity,\n FeatureFlagEntity,\n SettingsScopeEnum,\n} from './settings';\nimport {\n SubscriptionEntity,\n BillingUsageEntity,\n UsageLimitEntity,\n SubscriptionStatusEnum,\n} from './billing/billing.entity';\n\n/**\n * SaaS boilerplate schema contribution.\n */\nexport const saasBoilerplateSchemaContribution: ModuleSchemaContribution = {\n moduleId: '@contractspec/example.saas-boilerplate',\n entities: [\n ProjectEntity,\n ProjectMemberEntity,\n SettingsEntity,\n FeatureFlagEntity,\n SubscriptionEntity,\n BillingUsageEntity,\n UsageLimitEntity,\n ],\n enums: [ProjectStatusEnum, SettingsScopeEnum, SubscriptionStatusEnum],\n};\n\n/**\n * Complete schema composition for SaaS Boilerplate.\n * Use with `database schema:compose` to generate Prisma schema.\n */\nexport const schemaComposition = {\n modules: [\n identityRbacSchemaContribution,\n jobsSchemaContribution,\n auditTrailSchemaContribution,\n notificationsSchemaContribution,\n saasBoilerplateSchemaContribution,\n ],\n provider: 'postgresql' as const,\n outputPath: './prisma/schema/generated.prisma',\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAaA,oCAA8D;CACzE,UAAU;CACV,UAAU;EACR;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,OAAO;EAAC;EAAmB;EAAmB;EAAuB;CACtE;;;;;AAMD,MAAa,oBAAoB;CAC/B,SAAS;EACP;EACA;EACA;EACA;EACA;EACD;CACD,UAAU;CACV,YAAY;CACb"}
@@ -0,0 +1,17 @@
1
+ import { SubscriptionPresentation, UsageDashboardPresentation } from "../billing/billing.presentation.js";
2
+ import { SaasDashboardPresentation, SettingsPanelPresentation } from "../dashboard/dashboard.presentation.js";
3
+ import { ProjectDetailPresentation, ProjectListPresentation } from "../project/project.presentation.js";
4
+
5
+ //#region src/presentations/index.d.ts
6
+
7
+ declare const SaasBoilerplatePresentations: {
8
+ SubscriptionPresentation: undefined;
9
+ UsageDashboardPresentation: undefined;
10
+ ProjectListPresentation: undefined;
11
+ ProjectDetailPresentation: undefined;
12
+ SaasDashboardPresentation: undefined;
13
+ SettingsPanelPresentation: undefined;
14
+ };
15
+ //#endregion
16
+ export { ProjectDetailPresentation, ProjectListPresentation, SaasBoilerplatePresentations, SaasDashboardPresentation, SettingsPanelPresentation, SubscriptionPresentation, UsageDashboardPresentation };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/presentations/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAuBa"}
@@ -0,0 +1,17 @@
1
+ import { SubscriptionPresentation, UsageDashboardPresentation } from "../billing/billing.presentation.js";
2
+ import { ProjectDetailPresentation, ProjectListPresentation } from "../project/project.presentation.js";
3
+ import { SaasDashboardPresentation, SettingsPanelPresentation } from "../dashboard/dashboard.presentation.js";
4
+
5
+ //#region src/presentations/index.ts
6
+ const SaasBoilerplatePresentations = {
7
+ SubscriptionPresentation: void 0,
8
+ UsageDashboardPresentation: void 0,
9
+ ProjectListPresentation: void 0,
10
+ ProjectDetailPresentation: void 0,
11
+ SaasDashboardPresentation: void 0,
12
+ SettingsPanelPresentation: void 0
13
+ };
14
+
15
+ //#endregion
16
+ export { ProjectDetailPresentation, ProjectListPresentation, SaasBoilerplatePresentations, SaasDashboardPresentation, SettingsPanelPresentation, SubscriptionPresentation, UsageDashboardPresentation };
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/presentations/index.ts"],"sourcesContent":["/**\n * SaaS Boilerplate Presentations - re-exports from domain modules for backward compatibility.\n */\n\n// Billing presentations\nexport {\n SubscriptionPresentation,\n UsageDashboardPresentation,\n} from '../billing/billing.presentation';\n\n// Project presentations\nexport {\n ProjectListPresentation,\n ProjectDetailPresentation,\n} from '../project/project.presentation';\n\n// Dashboard presentations\nexport {\n SaasDashboardPresentation,\n SettingsPanelPresentation,\n} from '../dashboard/dashboard.presentation';\n\n// All presentations collection\nexport const SaasBoilerplatePresentations = {\n // Billing\n SubscriptionPresentation: undefined,\n UsageDashboardPresentation: undefined,\n\n // Project\n ProjectListPresentation: undefined,\n ProjectDetailPresentation: undefined,\n\n // Dashboard\n SaasDashboardPresentation: undefined,\n SettingsPanelPresentation: undefined,\n};\n"],"mappings":";;;;;AAuBA,MAAa,+BAA+B;CAE1C,0BAA0B;CAC1B,4BAA4B;CAG5B,yBAAyB;CACzB,2BAA2B;CAG3B,2BAA2B;CAC3B,2BAA2B;CAC5B"}
@@ -0,0 +1,8 @@
1
+ import { CreateProjectInput, ListProjectsInput, ListProjectsOutput, Project, UpdateProjectInput, mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockListProjectsHandler, mockUpdateProjectHandler } from "./project.handler.js";
2
+ import { ProjectStatusFilterEnum, ProjectStatusSchemaEnum } from "./project.enum.js";
3
+ import { CreateProjectInputModel, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectInputModel, ListProjectsInputModel, ListProjectsOutputModel, ProjectDeletedPayloadModel, ProjectModel, UpdateProjectInputModel } from "./project.schema.js";
4
+ import { CreateProjectContract, DeleteProjectContract, GetProjectContract, ListProjectsContract, UpdateProjectContract } from "./project.operations.js";
5
+ import { ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectUpdatedEvent } from "./project.event.js";
6
+ import { ProjectEntity, ProjectMemberEntity, ProjectStatusEnum } from "./project.entity.js";
7
+ import { ProjectDetailPresentation, ProjectListPresentation } from "./project.presentation.js";
8
+ export { CreateProjectContract, type CreateProjectInput, CreateProjectInputModel, DeleteProjectContract, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectContract, GetProjectInputModel, ListProjectsContract, type ListProjectsInput, ListProjectsInputModel, type ListProjectsOutput, ListProjectsOutputModel, type Project, ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectDeletedPayloadModel, ProjectDetailPresentation, ProjectEntity, ProjectListPresentation, ProjectMemberEntity, ProjectModel, ProjectStatusEnum, ProjectStatusFilterEnum, ProjectStatusSchemaEnum, ProjectUpdatedEvent, UpdateProjectContract, type UpdateProjectInput, UpdateProjectInputModel, mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockListProjectsHandler, mockUpdateProjectHandler };
@@ -0,0 +1,9 @@
1
+ import { ProjectStatusFilterEnum, ProjectStatusSchemaEnum } from "./project.enum.js";
2
+ import { CreateProjectInputModel, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectInputModel, ListProjectsInputModel, ListProjectsOutputModel, ProjectDeletedPayloadModel, ProjectModel, UpdateProjectInputModel } from "./project.schema.js";
3
+ import { CreateProjectContract, DeleteProjectContract, GetProjectContract, ListProjectsContract, UpdateProjectContract } from "./project.operations.js";
4
+ import { ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectUpdatedEvent } from "./project.event.js";
5
+ import { ProjectEntity, ProjectMemberEntity, ProjectStatusEnum } from "./project.entity.js";
6
+ import { ProjectDetailPresentation, ProjectListPresentation } from "./project.presentation.js";
7
+ import { mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockListProjectsHandler, mockUpdateProjectHandler } from "./project.handler.js";
8
+
9
+ export { CreateProjectContract, CreateProjectInputModel, DeleteProjectContract, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectContract, GetProjectInputModel, ListProjectsContract, ListProjectsInputModel, ListProjectsOutputModel, ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectDeletedPayloadModel, ProjectDetailPresentation, ProjectEntity, ProjectListPresentation, ProjectMemberEntity, ProjectModel, ProjectStatusEnum, ProjectStatusFilterEnum, ProjectStatusSchemaEnum, ProjectUpdatedEvent, UpdateProjectContract, UpdateProjectInputModel, mockCreateProjectHandler, mockDeleteProjectHandler, mockGetProjectHandler, mockListProjectsHandler, mockUpdateProjectHandler };
@@ -0,0 +1,40 @@
1
+ import * as _contractspec_lib_schema147 from "@contractspec/lib.schema";
2
+
3
+ //#region src/project/project.entity.d.ts
4
+ /**
5
+ * Project status enum for entities.
6
+ */
7
+ declare const ProjectStatusEnum: _contractspec_lib_schema147.EntityEnumDef;
8
+ /**
9
+ * Project entity - team-scoped work container.
10
+ */
11
+ declare const ProjectEntity: _contractspec_lib_schema147.EntitySpec<{
12
+ id: _contractspec_lib_schema147.EntityScalarField;
13
+ name: _contractspec_lib_schema147.EntityScalarField;
14
+ description: _contractspec_lib_schema147.EntityScalarField;
15
+ slug: _contractspec_lib_schema147.EntityScalarField;
16
+ organizationId: _contractspec_lib_schema147.EntityScalarField;
17
+ createdBy: _contractspec_lib_schema147.EntityScalarField;
18
+ status: _contractspec_lib_schema147.EntityEnumField;
19
+ isPublic: _contractspec_lib_schema147.EntityScalarField;
20
+ settings: _contractspec_lib_schema147.EntityScalarField;
21
+ tags: _contractspec_lib_schema147.EntityScalarField;
22
+ metadata: _contractspec_lib_schema147.EntityScalarField;
23
+ createdAt: _contractspec_lib_schema147.EntityScalarField;
24
+ updatedAt: _contractspec_lib_schema147.EntityScalarField;
25
+ archivedAt: _contractspec_lib_schema147.EntityScalarField;
26
+ }>;
27
+ /**
28
+ * ProjectMember entity - project-level access.
29
+ */
30
+ declare const ProjectMemberEntity: _contractspec_lib_schema147.EntitySpec<{
31
+ id: _contractspec_lib_schema147.EntityScalarField;
32
+ projectId: _contractspec_lib_schema147.EntityScalarField;
33
+ userId: _contractspec_lib_schema147.EntityScalarField;
34
+ role: _contractspec_lib_schema147.EntityScalarField;
35
+ addedBy: _contractspec_lib_schema147.EntityScalarField;
36
+ createdAt: _contractspec_lib_schema147.EntityScalarField;
37
+ }>;
38
+ //#endregion
39
+ export { ProjectEntity, ProjectMemberEntity, ProjectStatusEnum };
40
+ //# sourceMappingURL=project.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.entity.d.ts","names":[],"sources":["../../src/project/project.entity.ts"],"sourcesContent":[],"mappings":";;;;;;AAUa,cAAA,iBAKX,EAAA,2BAAA,CAL4B,aAK5B;AAKF;;;cAAa,2CAAa;MAmDxB,2BAAA,CAAA;;;;;;;;;;;0DAnDwB;EAAA,SAAA,+CAAA;EAwDb,UAAA,+CAgBX;CAAA,CAAA;;;;cAhBW,iDAAmB;MAgB9B,2BAAA,CAAA;0DAhB8B;EAAA,MAAA,+CAAA"}
@@ -0,0 +1,85 @@
1
+ import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
+
3
+ //#region src/project/project.entity.ts
4
+ /**
5
+ * Project status enum for entities.
6
+ */
7
+ const ProjectStatusEnum = defineEntityEnum({
8
+ name: "ProjectStatus",
9
+ values: [
10
+ "DRAFT",
11
+ "ACTIVE",
12
+ "ARCHIVED",
13
+ "DELETED"
14
+ ],
15
+ schema: "saas_app",
16
+ description: "Status of a project."
17
+ });
18
+ /**
19
+ * Project entity - team-scoped work container.
20
+ */
21
+ const ProjectEntity = defineEntity({
22
+ name: "Project",
23
+ description: "A project belonging to an organization.",
24
+ schema: "saas_app",
25
+ map: "project",
26
+ fields: {
27
+ id: field.id({ description: "Unique project ID" }),
28
+ name: field.string({ description: "Project name" }),
29
+ description: field.string({
30
+ isOptional: true,
31
+ description: "Project description"
32
+ }),
33
+ slug: field.string({
34
+ isOptional: true,
35
+ description: "URL-friendly identifier"
36
+ }),
37
+ organizationId: field.foreignKey({ description: "Owning organization" }),
38
+ createdBy: field.foreignKey({ description: "User who created the project" }),
39
+ status: field.enum("ProjectStatus", { default: "DRAFT" }),
40
+ isPublic: field.boolean({
41
+ default: false,
42
+ description: "Whether project is publicly visible"
43
+ }),
44
+ settings: field.json({
45
+ isOptional: true,
46
+ description: "Project-specific settings"
47
+ }),
48
+ tags: field.string({
49
+ isArray: true,
50
+ description: "Project tags"
51
+ }),
52
+ metadata: field.json({ isOptional: true }),
53
+ createdAt: field.createdAt(),
54
+ updatedAt: field.updatedAt(),
55
+ archivedAt: field.dateTime({ isOptional: true })
56
+ },
57
+ indexes: [
58
+ index.on(["organizationId", "status"]),
59
+ index.on(["organizationId", "createdAt"]),
60
+ index.unique(["organizationId", "slug"])
61
+ ],
62
+ enums: [ProjectStatusEnum]
63
+ });
64
+ /**
65
+ * ProjectMember entity - project-level access.
66
+ */
67
+ const ProjectMemberEntity = defineEntity({
68
+ name: "ProjectMember",
69
+ description: "User access to a specific project.",
70
+ schema: "saas_app",
71
+ map: "project_member",
72
+ fields: {
73
+ id: field.id(),
74
+ projectId: field.foreignKey(),
75
+ userId: field.foreignKey(),
76
+ role: field.string({ description: "Role in project (owner, editor, viewer)" }),
77
+ addedBy: field.string({ isOptional: true }),
78
+ createdAt: field.createdAt()
79
+ },
80
+ indexes: [index.unique(["projectId", "userId"])]
81
+ });
82
+
83
+ //#endregion
84
+ export { ProjectEntity, ProjectMemberEntity, ProjectStatusEnum };
85
+ //# sourceMappingURL=project.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.entity.js","names":[],"sources":["../../src/project/project.entity.ts"],"sourcesContent":["import {\n defineEntity,\n defineEntityEnum,\n field,\n index,\n} from '@contractspec/lib.schema';\n\n/**\n * Project status enum for entities.\n */\nexport const ProjectStatusEnum = defineEntityEnum({\n name: 'ProjectStatus',\n values: ['DRAFT', 'ACTIVE', 'ARCHIVED', 'DELETED'] as const,\n schema: 'saas_app',\n description: 'Status of a project.',\n});\n\n/**\n * Project entity - team-scoped work container.\n */\nexport const ProjectEntity = defineEntity({\n name: 'Project',\n description: 'A project belonging to an organization.',\n schema: 'saas_app',\n map: 'project',\n fields: {\n id: field.id({ description: 'Unique project ID' }),\n name: field.string({ description: 'Project name' }),\n description: field.string({\n isOptional: true,\n description: 'Project description',\n }),\n slug: field.string({\n isOptional: true,\n description: 'URL-friendly identifier',\n }),\n\n // Ownership\n organizationId: field.foreignKey({ description: 'Owning organization' }),\n createdBy: field.foreignKey({\n description: 'User who created the project',\n }),\n\n // Status\n status: field.enum('ProjectStatus', { default: 'DRAFT' }),\n\n // Settings\n isPublic: field.boolean({\n default: false,\n description: 'Whether project is publicly visible',\n }),\n settings: field.json({\n isOptional: true,\n description: 'Project-specific settings',\n }),\n\n // Metadata\n tags: field.string({ isArray: true, description: 'Project tags' }),\n metadata: field.json({ isOptional: true }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n archivedAt: field.dateTime({ isOptional: true }),\n },\n indexes: [\n index.on(['organizationId', 'status']),\n index.on(['organizationId', 'createdAt']),\n index.unique(['organizationId', 'slug']),\n ],\n enums: [ProjectStatusEnum],\n});\n\n/**\n * ProjectMember entity - project-level access.\n */\nexport const ProjectMemberEntity = defineEntity({\n name: 'ProjectMember',\n description: 'User access to a specific project.',\n schema: 'saas_app',\n map: 'project_member',\n fields: {\n id: field.id(),\n projectId: field.foreignKey(),\n userId: field.foreignKey(),\n role: field.string({\n description: 'Role in project (owner, editor, viewer)',\n }),\n addedBy: field.string({ isOptional: true }),\n createdAt: field.createdAt(),\n },\n indexes: [index.unique(['projectId', 'userId'])],\n});\n"],"mappings":";;;;;;AAUA,MAAa,oBAAoB,iBAAiB;CAChD,MAAM;CACN,QAAQ;EAAC;EAAS;EAAU;EAAY;EAAU;CAClD,QAAQ;CACR,aAAa;CACd,CAAC;;;;AAKF,MAAa,gBAAgB,aAAa;CACxC,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAI,MAAM,GAAG,EAAE,aAAa,qBAAqB,CAAC;EAClD,MAAM,MAAM,OAAO,EAAE,aAAa,gBAAgB,CAAC;EACnD,aAAa,MAAM,OAAO;GACxB,YAAY;GACZ,aAAa;GACd,CAAC;EACF,MAAM,MAAM,OAAO;GACjB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,gBAAgB,MAAM,WAAW,EAAE,aAAa,uBAAuB,CAAC;EACxE,WAAW,MAAM,WAAW,EAC1B,aAAa,gCACd,CAAC;EAGF,QAAQ,MAAM,KAAK,iBAAiB,EAAE,SAAS,SAAS,CAAC;EAGzD,UAAU,MAAM,QAAQ;GACtB,SAAS;GACT,aAAa;GACd,CAAC;EACF,UAAU,MAAM,KAAK;GACnB,YAAY;GACZ,aAAa;GACd,CAAC;EAGF,MAAM,MAAM,OAAO;GAAE,SAAS;GAAM,aAAa;GAAgB,CAAC;EAClE,UAAU,MAAM,KAAK,EAAE,YAAY,MAAM,CAAC;EAG1C,WAAW,MAAM,WAAW;EAC5B,WAAW,MAAM,WAAW;EAC5B,YAAY,MAAM,SAAS,EAAE,YAAY,MAAM,CAAC;EACjD;CACD,SAAS;EACP,MAAM,GAAG,CAAC,kBAAkB,SAAS,CAAC;EACtC,MAAM,GAAG,CAAC,kBAAkB,YAAY,CAAC;EACzC,MAAM,OAAO,CAAC,kBAAkB,OAAO,CAAC;EACzC;CACD,OAAO,CAAC,kBAAkB;CAC3B,CAAC;;;;AAKF,MAAa,sBAAsB,aAAa;CAC9C,MAAM;CACN,aAAa;CACb,QAAQ;CACR,KAAK;CACL,QAAQ;EACN,IAAI,MAAM,IAAI;EACd,WAAW,MAAM,YAAY;EAC7B,QAAQ,MAAM,YAAY;EAC1B,MAAM,MAAM,OAAO,EACjB,aAAa,2CACd,CAAC;EACF,SAAS,MAAM,OAAO,EAAE,YAAY,MAAM,CAAC;EAC3C,WAAW,MAAM,WAAW;EAC7B;CACD,SAAS,CAAC,MAAM,OAAO,CAAC,aAAa,SAAS,CAAC,CAAC;CACjD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import * as _contractspec_lib_schema170 from "@contractspec/lib.schema";
2
+
3
+ //#region src/project/project.enum.d.ts
4
+
5
+ /**
6
+ * Project status enum for contract schemas.
7
+ * Note: Entity enum is defined separately in project.entity.ts
8
+ */
9
+ declare const ProjectStatusSchemaEnum: _contractspec_lib_schema170.EnumType<[string, string, string, string]>;
10
+ /**
11
+ * Project status filter enum (includes 'all' option).
12
+ */
13
+ declare const ProjectStatusFilterEnum: _contractspec_lib_schema170.EnumType<[string, string, string, string]>;
14
+ //#endregion
15
+ export { ProjectStatusFilterEnum, ProjectStatusSchemaEnum };
16
+ //# sourceMappingURL=project.enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.enum.d.ts","names":[],"sources":["../../src/project/project.enum.ts"],"sourcesContent":[],"mappings":";;;;;;;AAMA;AAUa,cAVA,uBAeX,EAVA,2BAAA,CALkC,QAUA,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,CAAA,CAAA;;;;cAAvB,yBAKX,2BAAA,CALkC"}
@@ -0,0 +1,26 @@
1
+ import { defineEnum } from "@contractspec/lib.schema";
2
+
3
+ //#region src/project/project.enum.ts
4
+ /**
5
+ * Project status enum for contract schemas.
6
+ * Note: Entity enum is defined separately in project.entity.ts
7
+ */
8
+ const ProjectStatusSchemaEnum = defineEnum("ProjectStatus", [
9
+ "DRAFT",
10
+ "ACTIVE",
11
+ "ARCHIVED",
12
+ "DELETED"
13
+ ]);
14
+ /**
15
+ * Project status filter enum (includes 'all' option).
16
+ */
17
+ const ProjectStatusFilterEnum = defineEnum("ProjectStatusFilter", [
18
+ "DRAFT",
19
+ "ACTIVE",
20
+ "ARCHIVED",
21
+ "all"
22
+ ]);
23
+
24
+ //#endregion
25
+ export { ProjectStatusFilterEnum, ProjectStatusSchemaEnum };
26
+ //# sourceMappingURL=project.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.enum.js","names":[],"sources":["../../src/project/project.enum.ts"],"sourcesContent":["import { defineEnum } from '@contractspec/lib.schema';\n\n/**\n * Project status enum for contract schemas.\n * Note: Entity enum is defined separately in project.entity.ts\n */\nexport const ProjectStatusSchemaEnum = defineEnum('ProjectStatus', [\n 'DRAFT',\n 'ACTIVE',\n 'ARCHIVED',\n 'DELETED',\n]);\n\n/**\n * Project status filter enum (includes 'all' option).\n */\nexport const ProjectStatusFilterEnum = defineEnum('ProjectStatusFilter', [\n 'DRAFT',\n 'ACTIVE',\n 'ARCHIVED',\n 'all',\n]);\n"],"mappings":";;;;;;;AAMA,MAAa,0BAA0B,WAAW,iBAAiB;CACjE;CACA;CACA;CACA;CACD,CAAC;;;;AAKF,MAAa,0BAA0B,WAAW,uBAAuB;CACvE;CACA;CACA;CACA;CACD,CAAC"}
@@ -0,0 +1,92 @@
1
+ import * as _contractspec_lib_schema172 from "@contractspec/lib.schema";
2
+ import * as _contractspec_lib_contracts6 from "@contractspec/lib.contracts";
3
+
4
+ //#region src/project/project.event.d.ts
5
+ /**
6
+ * Event: A new project has been created.
7
+ */
8
+ declare const ProjectCreatedEvent: _contractspec_lib_contracts6.EventSpec<_contractspec_lib_schema172.SchemaModel<{
9
+ projectId: {
10
+ type: _contractspec_lib_schema172.FieldType<string, string>;
11
+ isOptional: false;
12
+ };
13
+ name: {
14
+ type: _contractspec_lib_schema172.FieldType<string, string>;
15
+ isOptional: false;
16
+ };
17
+ organizationId: {
18
+ type: _contractspec_lib_schema172.FieldType<string, string>;
19
+ isOptional: false;
20
+ };
21
+ createdBy: {
22
+ type: _contractspec_lib_schema172.FieldType<string, string>;
23
+ isOptional: false;
24
+ };
25
+ createdAt: {
26
+ type: _contractspec_lib_schema172.FieldType<Date, string>;
27
+ isOptional: false;
28
+ };
29
+ }>>;
30
+ /**
31
+ * Event: A project has been updated.
32
+ */
33
+ declare const ProjectUpdatedEvent: _contractspec_lib_contracts6.EventSpec<_contractspec_lib_schema172.SchemaModel<{
34
+ projectId: {
35
+ type: _contractspec_lib_schema172.FieldType<string, string>;
36
+ isOptional: false;
37
+ };
38
+ updatedFields: {
39
+ type: _contractspec_lib_schema172.FieldType<string, string>;
40
+ isArray: true;
41
+ isOptional: false;
42
+ };
43
+ updatedBy: {
44
+ type: _contractspec_lib_schema172.FieldType<string, string>;
45
+ isOptional: false;
46
+ };
47
+ updatedAt: {
48
+ type: _contractspec_lib_schema172.FieldType<Date, string>;
49
+ isOptional: false;
50
+ };
51
+ }>>;
52
+ /**
53
+ * Event: A project has been deleted.
54
+ */
55
+ declare const ProjectDeletedEvent: _contractspec_lib_contracts6.EventSpec<_contractspec_lib_schema172.SchemaModel<{
56
+ projectId: {
57
+ type: _contractspec_lib_schema172.FieldType<string, string>;
58
+ isOptional: false;
59
+ };
60
+ organizationId: {
61
+ type: _contractspec_lib_schema172.FieldType<string, string>;
62
+ isOptional: false;
63
+ };
64
+ deletedBy: {
65
+ type: _contractspec_lib_schema172.FieldType<string, string>;
66
+ isOptional: false;
67
+ };
68
+ deletedAt: {
69
+ type: _contractspec_lib_schema172.FieldType<Date, string>;
70
+ isOptional: false;
71
+ };
72
+ }>>;
73
+ /**
74
+ * Event: A project has been archived.
75
+ */
76
+ declare const ProjectArchivedEvent: _contractspec_lib_contracts6.EventSpec<_contractspec_lib_schema172.SchemaModel<{
77
+ projectId: {
78
+ type: _contractspec_lib_schema172.FieldType<string, string>;
79
+ isOptional: false;
80
+ };
81
+ archivedBy: {
82
+ type: _contractspec_lib_schema172.FieldType<string, string>;
83
+ isOptional: false;
84
+ };
85
+ archivedAt: {
86
+ type: _contractspec_lib_schema172.FieldType<Date, string>;
87
+ isOptional: false;
88
+ };
89
+ }>>;
90
+ //#endregion
91
+ export { ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectUpdatedEvent };
92
+ //# sourceMappingURL=project.event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.event.d.ts","names":[],"sources":["../../src/project/project.event.ts"],"sourcesContent":[],"mappings":";;;;;;;cAwEa,qBAAmB,4BAAA,CAAA,sCAAA;EAAnB,SAAA,EAAA;IAUX,IAAA,EAAA,2BAAA,CAAA,SAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;EAV8B,cAAA,EAAA;IAAA,IAAA,uCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAenB,UAAA,EAAA,KAAA;EAUX,CAAA;;;;;;IAV8B,IAAA,uCAAA,KAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAenB,CAAA;CAUX,CAAA,CAAA;;;;cAzBW,qBAAmB,4BAAA,CAAA,sCAAA;;IAeA,IAAA,EAL9B,2BAAA,CAAA,SAK8B,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAenB,CAAA;EAUX,aAAA,EAAA;;;;;EAV+B,SAAA,EAAA;IAAA,IAAA,uCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;;;;;cAfpB,qBAAmB,4BAAA,CAAA,sCAAA;;UAU9B,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;cAKW,sBAAoB,4BAAA,CAAA,sCAAA;;UAU/B,2BAAA,CAAA"}
@@ -0,0 +1,165 @@
1
+ import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
2
+ import { defineEvent } from "@contractspec/lib.contracts";
3
+
4
+ //#region src/project/project.event.ts
5
+ /**
6
+ * Payload when a project is created.
7
+ */
8
+ const ProjectCreatedPayload = defineSchemaModel({
9
+ name: "ProjectCreatedPayload",
10
+ description: "Payload when a project is created",
11
+ fields: {
12
+ projectId: {
13
+ type: ScalarTypeEnum.String_unsecure(),
14
+ isOptional: false
15
+ },
16
+ name: {
17
+ type: ScalarTypeEnum.String_unsecure(),
18
+ isOptional: false
19
+ },
20
+ organizationId: {
21
+ type: ScalarTypeEnum.String_unsecure(),
22
+ isOptional: false
23
+ },
24
+ createdBy: {
25
+ type: ScalarTypeEnum.String_unsecure(),
26
+ isOptional: false
27
+ },
28
+ createdAt: {
29
+ type: ScalarTypeEnum.DateTime(),
30
+ isOptional: false
31
+ }
32
+ }
33
+ });
34
+ /**
35
+ * Payload when a project is updated.
36
+ */
37
+ const ProjectUpdatedPayload = defineSchemaModel({
38
+ name: "ProjectUpdatedPayload",
39
+ description: "Payload when a project is updated",
40
+ fields: {
41
+ projectId: {
42
+ type: ScalarTypeEnum.String_unsecure(),
43
+ isOptional: false
44
+ },
45
+ updatedFields: {
46
+ type: ScalarTypeEnum.String_unsecure(),
47
+ isArray: true,
48
+ isOptional: false
49
+ },
50
+ updatedBy: {
51
+ type: ScalarTypeEnum.String_unsecure(),
52
+ isOptional: false
53
+ },
54
+ updatedAt: {
55
+ type: ScalarTypeEnum.DateTime(),
56
+ isOptional: false
57
+ }
58
+ }
59
+ });
60
+ /**
61
+ * Payload when a project is deleted.
62
+ */
63
+ const ProjectDeletedPayload = defineSchemaModel({
64
+ name: "ProjectDeletedPayload",
65
+ description: "Payload when a project is deleted",
66
+ fields: {
67
+ projectId: {
68
+ type: ScalarTypeEnum.String_unsecure(),
69
+ isOptional: false
70
+ },
71
+ organizationId: {
72
+ type: ScalarTypeEnum.String_unsecure(),
73
+ isOptional: false
74
+ },
75
+ deletedBy: {
76
+ type: ScalarTypeEnum.String_unsecure(),
77
+ isOptional: false
78
+ },
79
+ deletedAt: {
80
+ type: ScalarTypeEnum.DateTime(),
81
+ isOptional: false
82
+ }
83
+ }
84
+ });
85
+ /**
86
+ * Payload when a project is archived.
87
+ */
88
+ const ProjectArchivedPayload = defineSchemaModel({
89
+ name: "ProjectArchivedPayload",
90
+ description: "Payload when a project is archived",
91
+ fields: {
92
+ projectId: {
93
+ type: ScalarTypeEnum.String_unsecure(),
94
+ isOptional: false
95
+ },
96
+ archivedBy: {
97
+ type: ScalarTypeEnum.String_unsecure(),
98
+ isOptional: false
99
+ },
100
+ archivedAt: {
101
+ type: ScalarTypeEnum.DateTime(),
102
+ isOptional: false
103
+ }
104
+ }
105
+ });
106
+ /**
107
+ * Event: A new project has been created.
108
+ */
109
+ const ProjectCreatedEvent = defineEvent({
110
+ meta: {
111
+ key: "project.created",
112
+ version: 1,
113
+ description: "A new project has been created.",
114
+ stability: "stable",
115
+ owners: ["@saas-team"],
116
+ tags: ["project", "created"]
117
+ },
118
+ payload: ProjectCreatedPayload
119
+ });
120
+ /**
121
+ * Event: A project has been updated.
122
+ */
123
+ const ProjectUpdatedEvent = defineEvent({
124
+ meta: {
125
+ key: "project.updated",
126
+ version: 1,
127
+ description: "A project has been updated.",
128
+ stability: "stable",
129
+ owners: ["@saas-team"],
130
+ tags: ["project", "updated"]
131
+ },
132
+ payload: ProjectUpdatedPayload
133
+ });
134
+ /**
135
+ * Event: A project has been deleted.
136
+ */
137
+ const ProjectDeletedEvent = defineEvent({
138
+ meta: {
139
+ key: "project.deleted",
140
+ version: 1,
141
+ description: "A project has been deleted.",
142
+ stability: "stable",
143
+ owners: ["@saas-team"],
144
+ tags: ["project", "deleted"]
145
+ },
146
+ payload: ProjectDeletedPayload
147
+ });
148
+ /**
149
+ * Event: A project has been archived.
150
+ */
151
+ const ProjectArchivedEvent = defineEvent({
152
+ meta: {
153
+ key: "project.archived",
154
+ version: 1,
155
+ description: "A project has been archived.",
156
+ stability: "stable",
157
+ owners: ["@saas-team"],
158
+ tags: ["project", "archived"]
159
+ },
160
+ payload: ProjectArchivedPayload
161
+ });
162
+
163
+ //#endregion
164
+ export { ProjectArchivedEvent, ProjectCreatedEvent, ProjectDeletedEvent, ProjectUpdatedEvent };
165
+ //# sourceMappingURL=project.event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.event.js","names":[],"sources":["../../src/project/project.event.ts"],"sourcesContent":["import { ScalarTypeEnum, defineSchemaModel } from '@contractspec/lib.schema';\nimport { defineEvent } from '@contractspec/lib.contracts';\n\n/**\n * Payload when a project is created.\n */\nconst ProjectCreatedPayload = defineSchemaModel({\n name: 'ProjectCreatedPayload',\n description: 'Payload when a project is created',\n fields: {\n projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n organizationId: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: false,\n },\n createdBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\n/**\n * Payload when a project is updated.\n */\nconst ProjectUpdatedPayload = defineSchemaModel({\n name: 'ProjectUpdatedPayload',\n description: 'Payload when a project is updated',\n fields: {\n projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n updatedFields: {\n type: ScalarTypeEnum.String_unsecure(),\n isArray: true,\n isOptional: false,\n },\n updatedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\n/**\n * Payload when a project is deleted.\n */\nconst ProjectDeletedPayload = defineSchemaModel({\n name: 'ProjectDeletedPayload',\n description: 'Payload when a project is deleted',\n fields: {\n projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n organizationId: {\n type: ScalarTypeEnum.String_unsecure(),\n isOptional: false,\n },\n deletedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n deletedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\n/**\n * Payload when a project is archived.\n */\nconst ProjectArchivedPayload = defineSchemaModel({\n name: 'ProjectArchivedPayload',\n description: 'Payload when a project is archived',\n fields: {\n projectId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n archivedBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n archivedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\n/**\n * Event: A new project has been created.\n */\nexport const ProjectCreatedEvent = defineEvent({\n meta: {\n key: 'project.created',\n version: 1,\n description: 'A new project has been created.',\n stability: 'stable',\n owners: ['@saas-team'],\n tags: ['project', 'created'],\n },\n payload: ProjectCreatedPayload,\n});\n\n/**\n * Event: A project has been updated.\n */\nexport const ProjectUpdatedEvent = defineEvent({\n meta: {\n key: 'project.updated',\n version: 1,\n description: 'A project has been updated.',\n stability: 'stable',\n owners: ['@saas-team'],\n tags: ['project', 'updated'],\n },\n payload: ProjectUpdatedPayload,\n});\n\n/**\n * Event: A project has been deleted.\n */\nexport const ProjectDeletedEvent = defineEvent({\n meta: {\n key: 'project.deleted',\n version: 1,\n description: 'A project has been deleted.',\n stability: 'stable',\n owners: ['@saas-team'],\n tags: ['project', 'deleted'],\n },\n payload: ProjectDeletedPayload,\n});\n\n/**\n * Event: A project has been archived.\n */\nexport const ProjectArchivedEvent = defineEvent({\n meta: {\n key: 'project.archived',\n version: 1,\n description: 'A project has been archived.',\n stability: 'stable',\n owners: ['@saas-team'],\n tags: ['project', 'archived'],\n },\n payload: ProjectArchivedPayload,\n});\n"],"mappings":";;;;;;;AAMA,MAAM,wBAAwB,kBAAkB;CAC9C,MAAM;CACN,aAAa;CACb,QAAQ;EACN,WAAW;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACxE,MAAM;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACnE,gBAAgB;GACd,MAAM,eAAe,iBAAiB;GACtC,YAAY;GACb;EACD,WAAW;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACxE,WAAW;GAAE,MAAM,eAAe,UAAU;GAAE,YAAY;GAAO;EAClE;CACF,CAAC;;;;AAKF,MAAM,wBAAwB,kBAAkB;CAC9C,MAAM;CACN,aAAa;CACb,QAAQ;EACN,WAAW;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACxE,eAAe;GACb,MAAM,eAAe,iBAAiB;GACtC,SAAS;GACT,YAAY;GACb;EACD,WAAW;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACxE,WAAW;GAAE,MAAM,eAAe,UAAU;GAAE,YAAY;GAAO;EAClE;CACF,CAAC;;;;AAKF,MAAM,wBAAwB,kBAAkB;CAC9C,MAAM;CACN,aAAa;CACb,QAAQ;EACN,WAAW;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACxE,gBAAgB;GACd,MAAM,eAAe,iBAAiB;GACtC,YAAY;GACb;EACD,WAAW;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACxE,WAAW;GAAE,MAAM,eAAe,UAAU;GAAE,YAAY;GAAO;EAClE;CACF,CAAC;;;;AAKF,MAAM,yBAAyB,kBAAkB;CAC/C,MAAM;CACN,aAAa;CACb,QAAQ;EACN,WAAW;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACxE,YAAY;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACzE,YAAY;GAAE,MAAM,eAAe,UAAU;GAAE,YAAY;GAAO;EACnE;CACF,CAAC;;;;AAKF,MAAa,sBAAsB,YAAY;CAC7C,MAAM;EACJ,KAAK;EACL,SAAS;EACT,aAAa;EACb,WAAW;EACX,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,WAAW,UAAU;EAC7B;CACD,SAAS;CACV,CAAC;;;;AAKF,MAAa,sBAAsB,YAAY;CAC7C,MAAM;EACJ,KAAK;EACL,SAAS;EACT,aAAa;EACb,WAAW;EACX,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,WAAW,UAAU;EAC7B;CACD,SAAS;CACV,CAAC;;;;AAKF,MAAa,sBAAsB,YAAY;CAC7C,MAAM;EACJ,KAAK;EACL,SAAS;EACT,aAAa;EACb,WAAW;EACX,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,WAAW,UAAU;EAC7B;CACD,SAAS;CACV,CAAC;;;;AAKF,MAAa,uBAAuB,YAAY;CAC9C,MAAM;EACJ,KAAK;EACL,SAAS;EACT,aAAa;EACb,WAAW;EACX,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,WAAW,WAAW;EAC9B;CACD,SAAS;CACV,CAAC"}