@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.
- package/.turbo/turbo-build$colon$bundle.log +113 -0
- package/.turbo/turbo-build.log +114 -0
- package/CHANGELOG.md +246 -0
- package/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/billing/billing.entity.d.ts +61 -0
- package/dist/billing/billing.entity.d.ts.map +1 -0
- package/dist/billing/billing.entity.js +122 -0
- package/dist/billing/billing.entity.js.map +1 -0
- package/dist/billing/billing.enum.d.ts +16 -0
- package/dist/billing/billing.enum.d.ts.map +1 -0
- package/dist/billing/billing.enum.js +27 -0
- package/dist/billing/billing.enum.js.map +1 -0
- package/dist/billing/billing.event.d.ts +86 -0
- package/dist/billing/billing.event.d.ts.map +1 -0
- package/dist/billing/billing.event.js +153 -0
- package/dist/billing/billing.event.js.map +1 -0
- package/dist/billing/billing.handler.d.ts +82 -0
- package/dist/billing/billing.handler.d.ts.map +1 -0
- package/dist/billing/billing.handler.js +58 -0
- package/dist/billing/billing.handler.js.map +1 -0
- package/dist/billing/billing.operations.d.ts +166 -0
- package/dist/billing/billing.operations.d.ts.map +1 -0
- package/dist/billing/billing.operations.js +181 -0
- package/dist/billing/billing.operations.js.map +1 -0
- package/dist/billing/billing.presentation.d.ts +15 -0
- package/dist/billing/billing.presentation.d.ts.map +1 -0
- package/dist/billing/billing.presentation.js +59 -0
- package/dist/billing/billing.presentation.js.map +1 -0
- package/dist/billing/billing.schema.d.ts +201 -0
- package/dist/billing/billing.schema.d.ts.map +1 -0
- package/dist/billing/billing.schema.js +214 -0
- package/dist/billing/billing.schema.js.map +1 -0
- package/dist/billing/index.d.ts +8 -0
- package/dist/billing/index.js +9 -0
- package/dist/dashboard/dashboard.presentation.d.ts +15 -0
- package/dist/dashboard/dashboard.presentation.d.ts.map +1 -0
- package/dist/dashboard/dashboard.presentation.js +55 -0
- package/dist/dashboard/dashboard.presentation.js.map +1 -0
- package/dist/dashboard/index.d.ts +2 -0
- package/dist/dashboard/index.js +3 -0
- package/dist/docs/index.d.ts +1 -0
- package/dist/docs/index.js +1 -0
- package/dist/docs/saas-boilerplate.docblock.d.ts +1 -0
- package/dist/docs/saas-boilerplate.docblock.js +100 -0
- package/dist/docs/saas-boilerplate.docblock.js.map +1 -0
- package/dist/example.d.ts +37 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +46 -0
- package/dist/example.js.map +1 -0
- package/dist/handlers/index.d.ts +3 -0
- package/dist/handlers/index.js +4 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/presentations/index.d.ts +17 -0
- package/dist/presentations/index.d.ts.map +1 -0
- package/dist/presentations/index.js +17 -0
- package/dist/presentations/index.js.map +1 -0
- package/dist/project/index.d.ts +8 -0
- package/dist/project/index.js +9 -0
- package/dist/project/project.entity.d.ts +40 -0
- package/dist/project/project.entity.d.ts.map +1 -0
- package/dist/project/project.entity.js +85 -0
- package/dist/project/project.entity.js.map +1 -0
- package/dist/project/project.enum.d.ts +16 -0
- package/dist/project/project.enum.d.ts.map +1 -0
- package/dist/project/project.enum.js +26 -0
- package/dist/project/project.enum.js.map +1 -0
- package/dist/project/project.event.d.ts +92 -0
- package/dist/project/project.event.d.ts.map +1 -0
- package/dist/project/project.event.js +165 -0
- package/dist/project/project.event.js.map +1 -0
- package/dist/project/project.handler.d.ts +72 -0
- package/dist/project/project.handler.d.ts.map +1 -0
- package/dist/project/project.handler.js +82 -0
- package/dist/project/project.handler.js.map +1 -0
- package/dist/project/project.operations.d.ts +419 -0
- package/dist/project/project.operations.d.ts.map +1 -0
- package/dist/project/project.operations.js +260 -0
- package/dist/project/project.operations.js.map +1 -0
- package/dist/project/project.presentation.d.ts +15 -0
- package/dist/project/project.presentation.d.ts.map +1 -0
- package/dist/project/project.presentation.js +65 -0
- package/dist/project/project.presentation.js.map +1 -0
- package/dist/project/project.schema.d.ts +235 -0
- package/dist/project/project.schema.d.ts.map +1 -0
- package/dist/project/project.schema.js +215 -0
- package/dist/project/project.schema.js.map +1 -0
- package/dist/saas-boilerplate.feature.d.ts +12 -0
- package/dist/saas-boilerplate.feature.d.ts.map +1 -0
- package/dist/saas-boilerplate.feature.js +201 -0
- package/dist/saas-boilerplate.feature.js.map +1 -0
- package/dist/settings/index.d.ts +3 -0
- package/dist/settings/index.js +4 -0
- package/dist/settings/settings.entity.d.ts +37 -0
- package/dist/settings/settings.entity.d.ts.map +1 -0
- package/dist/settings/settings.entity.js +78 -0
- package/dist/settings/settings.entity.js.map +1 -0
- package/dist/settings/settings.enum.d.ts +10 -0
- package/dist/settings/settings.enum.d.ts.map +1 -0
- package/dist/settings/settings.enum.js +21 -0
- package/dist/settings/settings.enum.js.map +1 -0
- package/dist/shared/mock-data.d.ts +86 -0
- package/dist/shared/mock-data.d.ts.map +1 -0
- package/dist/shared/mock-data.js +138 -0
- package/dist/shared/mock-data.js.map +1 -0
- package/example.ts +1 -0
- package/package.json +113 -0
- package/src/billing/billing.entity.ts +158 -0
- package/src/billing/billing.enum.ts +23 -0
- package/src/billing/billing.event.ts +108 -0
- package/src/billing/billing.handler.ts +137 -0
- package/src/billing/billing.operations.ts +187 -0
- package/src/billing/billing.presentation.ts +57 -0
- package/src/billing/billing.schema.ts +133 -0
- package/src/billing/index.ts +64 -0
- package/src/dashboard/dashboard.presentation.ts +57 -0
- package/src/dashboard/index.ts +8 -0
- package/src/docs/index.ts +1 -0
- package/src/docs/saas-boilerplate.docblock.ts +98 -0
- package/src/example.ts +31 -0
- package/src/handlers/index.ts +20 -0
- package/src/index.ts +71 -0
- package/src/presentations/index.ts +36 -0
- package/src/project/index.ts +66 -0
- package/src/project/project.entity.ts +93 -0
- package/src/project/project.enum.ts +22 -0
- package/src/project/project.event.ts +128 -0
- package/src/project/project.handler.ts +168 -0
- package/src/project/project.operations.ts +272 -0
- package/src/project/project.presentation.ts +59 -0
- package/src/project/project.schema.ts +147 -0
- package/src/saas-boilerplate.feature.ts +109 -0
- package/src/settings/index.ts +9 -0
- package/src/settings/settings.entity.ts +89 -0
- package/src/settings/settings.enum.ts +11 -0
- package/src/shared/mock-data.ts +110 -0
- package/tsconfig.json +10 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/tsdown.config.js +7 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { CreateProjectInputModel, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectInputModel, ListProjectsInputModel, ListProjectsOutputModel, ProjectDeletedPayloadModel, ProjectModel, UpdateProjectInputModel } from "./project.schema.js";
|
|
2
|
+
import { defineCommand, defineQuery } from "@contractspec/lib.contracts/operations";
|
|
3
|
+
|
|
4
|
+
//#region src/project/project.operations.ts
|
|
5
|
+
const OWNERS = ["example.saas-boilerplate"];
|
|
6
|
+
/**
|
|
7
|
+
* Create a new project.
|
|
8
|
+
*/
|
|
9
|
+
const CreateProjectContract = defineCommand({
|
|
10
|
+
meta: {
|
|
11
|
+
key: "saas.project.create",
|
|
12
|
+
version: 1,
|
|
13
|
+
stability: "stable",
|
|
14
|
+
owners: [...OWNERS],
|
|
15
|
+
tags: [
|
|
16
|
+
"saas",
|
|
17
|
+
"project",
|
|
18
|
+
"create"
|
|
19
|
+
],
|
|
20
|
+
description: "Create a new project in the organization.",
|
|
21
|
+
goal: "Allow users to create projects for organizing work.",
|
|
22
|
+
context: "Called from project creation UI or API."
|
|
23
|
+
},
|
|
24
|
+
io: {
|
|
25
|
+
input: CreateProjectInputModel,
|
|
26
|
+
output: ProjectModel,
|
|
27
|
+
errors: {
|
|
28
|
+
SLUG_EXISTS: {
|
|
29
|
+
description: "A project with this slug already exists",
|
|
30
|
+
http: 409,
|
|
31
|
+
gqlCode: "SLUG_EXISTS",
|
|
32
|
+
when: "Slug is already taken in the organization"
|
|
33
|
+
},
|
|
34
|
+
LIMIT_REACHED: {
|
|
35
|
+
description: "Project limit reached for this plan",
|
|
36
|
+
http: 403,
|
|
37
|
+
gqlCode: "LIMIT_REACHED",
|
|
38
|
+
when: "Organization has reached project limit"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
policy: { auth: "user" },
|
|
43
|
+
sideEffects: {
|
|
44
|
+
emits: [{
|
|
45
|
+
key: "project.created",
|
|
46
|
+
version: 1,
|
|
47
|
+
when: "Project is created",
|
|
48
|
+
payload: ProjectModel
|
|
49
|
+
}],
|
|
50
|
+
audit: ["project.created"]
|
|
51
|
+
},
|
|
52
|
+
acceptance: {
|
|
53
|
+
scenarios: [{
|
|
54
|
+
key: "create-project-happy-path",
|
|
55
|
+
given: ["User is authenticated"],
|
|
56
|
+
when: ["User creates project"],
|
|
57
|
+
then: ["Project is created", "ProjectCreated event is emitted"]
|
|
58
|
+
}],
|
|
59
|
+
examples: [{
|
|
60
|
+
key: "create-basic",
|
|
61
|
+
input: {
|
|
62
|
+
name: "Website Redesign",
|
|
63
|
+
slug: "website-redesign"
|
|
64
|
+
},
|
|
65
|
+
output: {
|
|
66
|
+
id: "proj-123",
|
|
67
|
+
name: "Website Redesign",
|
|
68
|
+
isArchived: false
|
|
69
|
+
}
|
|
70
|
+
}]
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Get project by ID.
|
|
75
|
+
*/
|
|
76
|
+
const GetProjectContract = defineQuery({
|
|
77
|
+
meta: {
|
|
78
|
+
key: "saas.project.get",
|
|
79
|
+
version: 1,
|
|
80
|
+
stability: "stable",
|
|
81
|
+
owners: [...OWNERS],
|
|
82
|
+
tags: [
|
|
83
|
+
"saas",
|
|
84
|
+
"project",
|
|
85
|
+
"get"
|
|
86
|
+
],
|
|
87
|
+
description: "Get a project by ID.",
|
|
88
|
+
goal: "Retrieve project details.",
|
|
89
|
+
context: "Project detail page, API calls."
|
|
90
|
+
},
|
|
91
|
+
io: {
|
|
92
|
+
input: GetProjectInputModel,
|
|
93
|
+
output: ProjectModel,
|
|
94
|
+
errors: { NOT_FOUND: {
|
|
95
|
+
description: "Project not found",
|
|
96
|
+
http: 404,
|
|
97
|
+
gqlCode: "NOT_FOUND",
|
|
98
|
+
when: "Project ID is invalid or user lacks access"
|
|
99
|
+
} }
|
|
100
|
+
},
|
|
101
|
+
policy: { auth: "user" },
|
|
102
|
+
acceptance: {
|
|
103
|
+
scenarios: [{
|
|
104
|
+
key: "get-project-happy-path",
|
|
105
|
+
given: ["Project exists"],
|
|
106
|
+
when: ["User requests project"],
|
|
107
|
+
then: ["Project details are returned"]
|
|
108
|
+
}],
|
|
109
|
+
examples: [{
|
|
110
|
+
key: "get-existing",
|
|
111
|
+
input: { projectId: "proj-123" },
|
|
112
|
+
output: {
|
|
113
|
+
id: "proj-123",
|
|
114
|
+
name: "Website Redesign"
|
|
115
|
+
}
|
|
116
|
+
}]
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Update a project.
|
|
121
|
+
*/
|
|
122
|
+
const UpdateProjectContract = defineCommand({
|
|
123
|
+
meta: {
|
|
124
|
+
key: "saas.project.update",
|
|
125
|
+
version: 1,
|
|
126
|
+
stability: "stable",
|
|
127
|
+
owners: [...OWNERS],
|
|
128
|
+
tags: [
|
|
129
|
+
"saas",
|
|
130
|
+
"project",
|
|
131
|
+
"update"
|
|
132
|
+
],
|
|
133
|
+
description: "Update project details.",
|
|
134
|
+
goal: "Allow project owners/editors to modify project.",
|
|
135
|
+
context: "Project settings page."
|
|
136
|
+
},
|
|
137
|
+
io: {
|
|
138
|
+
input: UpdateProjectInputModel,
|
|
139
|
+
output: ProjectModel
|
|
140
|
+
},
|
|
141
|
+
policy: { auth: "user" },
|
|
142
|
+
sideEffects: {
|
|
143
|
+
emits: [{
|
|
144
|
+
key: "project.updated",
|
|
145
|
+
version: 1,
|
|
146
|
+
when: "Project is updated",
|
|
147
|
+
payload: ProjectModel
|
|
148
|
+
}],
|
|
149
|
+
audit: ["project.updated"]
|
|
150
|
+
},
|
|
151
|
+
acceptance: {
|
|
152
|
+
scenarios: [{
|
|
153
|
+
key: "update-project-happy-path",
|
|
154
|
+
given: ["Project exists"],
|
|
155
|
+
when: ["User updates description"],
|
|
156
|
+
then: ["Project is updated", "ProjectUpdated event is emitted"]
|
|
157
|
+
}],
|
|
158
|
+
examples: [{
|
|
159
|
+
key: "update-desc",
|
|
160
|
+
input: {
|
|
161
|
+
projectId: "proj-123",
|
|
162
|
+
description: "New description"
|
|
163
|
+
},
|
|
164
|
+
output: {
|
|
165
|
+
id: "proj-123",
|
|
166
|
+
description: "New description"
|
|
167
|
+
}
|
|
168
|
+
}]
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
/**
|
|
172
|
+
* Delete a project.
|
|
173
|
+
*/
|
|
174
|
+
const DeleteProjectContract = defineCommand({
|
|
175
|
+
meta: {
|
|
176
|
+
key: "saas.project.delete",
|
|
177
|
+
version: 1,
|
|
178
|
+
stability: "stable",
|
|
179
|
+
owners: [...OWNERS],
|
|
180
|
+
tags: [
|
|
181
|
+
"saas",
|
|
182
|
+
"project",
|
|
183
|
+
"delete"
|
|
184
|
+
],
|
|
185
|
+
description: "Delete a project (soft delete).",
|
|
186
|
+
goal: "Allow project owners to remove projects.",
|
|
187
|
+
context: "Project settings page."
|
|
188
|
+
},
|
|
189
|
+
io: {
|
|
190
|
+
input: DeleteProjectInputModel,
|
|
191
|
+
output: DeleteProjectOutputModel
|
|
192
|
+
},
|
|
193
|
+
policy: { auth: "user" },
|
|
194
|
+
sideEffects: {
|
|
195
|
+
emits: [{
|
|
196
|
+
key: "project.deleted",
|
|
197
|
+
version: 1,
|
|
198
|
+
when: "Project is deleted",
|
|
199
|
+
payload: ProjectDeletedPayloadModel
|
|
200
|
+
}],
|
|
201
|
+
audit: ["project.deleted"]
|
|
202
|
+
},
|
|
203
|
+
acceptance: {
|
|
204
|
+
scenarios: [{
|
|
205
|
+
key: "delete-project-happy-path",
|
|
206
|
+
given: ["Project exists"],
|
|
207
|
+
when: ["User deletes project"],
|
|
208
|
+
then: ["Project is deleted", "ProjectDeleted event is emitted"]
|
|
209
|
+
}],
|
|
210
|
+
examples: [{
|
|
211
|
+
key: "delete-existing",
|
|
212
|
+
input: { projectId: "proj-123" },
|
|
213
|
+
output: { success: true }
|
|
214
|
+
}]
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
/**
|
|
218
|
+
* List organization projects.
|
|
219
|
+
*/
|
|
220
|
+
const ListProjectsContract = defineQuery({
|
|
221
|
+
meta: {
|
|
222
|
+
key: "saas.project.list",
|
|
223
|
+
version: 1,
|
|
224
|
+
stability: "stable",
|
|
225
|
+
owners: [...OWNERS],
|
|
226
|
+
tags: [
|
|
227
|
+
"saas",
|
|
228
|
+
"project",
|
|
229
|
+
"list"
|
|
230
|
+
],
|
|
231
|
+
description: "List projects in the organization.",
|
|
232
|
+
goal: "Show all projects user has access to.",
|
|
233
|
+
context: "Project list page, dashboard."
|
|
234
|
+
},
|
|
235
|
+
io: {
|
|
236
|
+
input: ListProjectsInputModel,
|
|
237
|
+
output: ListProjectsOutputModel
|
|
238
|
+
},
|
|
239
|
+
policy: { auth: "user" },
|
|
240
|
+
acceptance: {
|
|
241
|
+
scenarios: [{
|
|
242
|
+
key: "list-projects-happy-path",
|
|
243
|
+
given: ["Projects exist"],
|
|
244
|
+
when: ["User lists projects"],
|
|
245
|
+
then: ["List of projects is returned"]
|
|
246
|
+
}],
|
|
247
|
+
examples: [{
|
|
248
|
+
key: "list-all",
|
|
249
|
+
input: { limit: 10 },
|
|
250
|
+
output: {
|
|
251
|
+
items: [],
|
|
252
|
+
total: 5
|
|
253
|
+
}
|
|
254
|
+
}]
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
//#endregion
|
|
259
|
+
export { CreateProjectContract, DeleteProjectContract, GetProjectContract, ListProjectsContract, UpdateProjectContract };
|
|
260
|
+
//# sourceMappingURL=project.operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.operations.js","names":[],"sources":["../../src/project/project.operations.ts"],"sourcesContent":["import {\n defineCommand,\n defineQuery,\n} from '@contractspec/lib.contracts/operations';\nimport {\n CreateProjectInputModel,\n DeleteProjectInputModel,\n DeleteProjectOutputModel,\n GetProjectInputModel,\n ListProjectsInputModel,\n ListProjectsOutputModel,\n ProjectDeletedPayloadModel,\n ProjectModel,\n UpdateProjectInputModel,\n} from './project.schema';\n\nconst OWNERS = ['example.saas-boilerplate'] as const;\n\n/**\n * Create a new project.\n */\nexport const CreateProjectContract = defineCommand({\n meta: {\n key: 'saas.project.create',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'project', 'create'],\n description: 'Create a new project in the organization.',\n goal: 'Allow users to create projects for organizing work.',\n context: 'Called from project creation UI or API.',\n },\n io: {\n input: CreateProjectInputModel,\n output: ProjectModel,\n errors: {\n SLUG_EXISTS: {\n description: 'A project with this slug already exists',\n http: 409,\n gqlCode: 'SLUG_EXISTS',\n when: 'Slug is already taken in the organization',\n },\n LIMIT_REACHED: {\n description: 'Project limit reached for this plan',\n http: 403,\n gqlCode: 'LIMIT_REACHED',\n when: 'Organization has reached project limit',\n },\n },\n },\n policy: {\n auth: 'user',\n },\n sideEffects: {\n emits: [\n {\n key: 'project.created',\n version: 1,\n when: 'Project is created',\n payload: ProjectModel,\n },\n ],\n audit: ['project.created'],\n },\n acceptance: {\n scenarios: [\n {\n key: 'create-project-happy-path',\n given: ['User is authenticated'],\n when: ['User creates project'],\n then: ['Project is created', 'ProjectCreated event is emitted'],\n },\n ],\n examples: [\n {\n key: 'create-basic',\n input: { name: 'Website Redesign', slug: 'website-redesign' },\n output: { id: 'proj-123', name: 'Website Redesign', isArchived: false },\n },\n ],\n },\n});\n\n/**\n * Get project by ID.\n */\nexport const GetProjectContract = defineQuery({\n meta: {\n key: 'saas.project.get',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'project', 'get'],\n description: 'Get a project by ID.',\n goal: 'Retrieve project details.',\n context: 'Project detail page, API calls.',\n },\n io: {\n input: GetProjectInputModel,\n output: ProjectModel,\n errors: {\n NOT_FOUND: {\n description: 'Project not found',\n http: 404,\n gqlCode: 'NOT_FOUND',\n when: 'Project ID is invalid or user lacks access',\n },\n },\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'get-project-happy-path',\n given: ['Project exists'],\n when: ['User requests project'],\n then: ['Project details are returned'],\n },\n ],\n examples: [\n {\n key: 'get-existing',\n input: { projectId: 'proj-123' },\n output: { id: 'proj-123', name: 'Website Redesign' },\n },\n ],\n },\n});\n\n/**\n * Update a project.\n */\nexport const UpdateProjectContract = defineCommand({\n meta: {\n key: 'saas.project.update',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'project', 'update'],\n description: 'Update project details.',\n goal: 'Allow project owners/editors to modify project.',\n context: 'Project settings page.',\n },\n io: {\n input: UpdateProjectInputModel,\n output: ProjectModel,\n },\n policy: {\n auth: 'user',\n },\n sideEffects: {\n emits: [\n {\n key: 'project.updated',\n version: 1,\n when: 'Project is updated',\n payload: ProjectModel,\n },\n ],\n audit: ['project.updated'],\n },\n acceptance: {\n scenarios: [\n {\n key: 'update-project-happy-path',\n given: ['Project exists'],\n when: ['User updates description'],\n then: ['Project is updated', 'ProjectUpdated event is emitted'],\n },\n ],\n examples: [\n {\n key: 'update-desc',\n input: { projectId: 'proj-123', description: 'New description' },\n output: { id: 'proj-123', description: 'New description' },\n },\n ],\n },\n});\n\n/**\n * Delete a project.\n */\nexport const DeleteProjectContract = defineCommand({\n meta: {\n key: 'saas.project.delete',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'project', 'delete'],\n description: 'Delete a project (soft delete).',\n goal: 'Allow project owners to remove projects.',\n context: 'Project settings page.',\n },\n io: {\n input: DeleteProjectInputModel,\n output: DeleteProjectOutputModel,\n },\n policy: {\n auth: 'user',\n },\n sideEffects: {\n emits: [\n {\n key: 'project.deleted',\n version: 1,\n when: 'Project is deleted',\n payload: ProjectDeletedPayloadModel,\n },\n ],\n audit: ['project.deleted'],\n },\n acceptance: {\n scenarios: [\n {\n key: 'delete-project-happy-path',\n given: ['Project exists'],\n when: ['User deletes project'],\n then: ['Project is deleted', 'ProjectDeleted event is emitted'],\n },\n ],\n examples: [\n {\n key: 'delete-existing',\n input: { projectId: 'proj-123' },\n output: { success: true },\n },\n ],\n },\n});\n\n/**\n * List organization projects.\n */\nexport const ListProjectsContract = defineQuery({\n meta: {\n key: 'saas.project.list',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['saas', 'project', 'list'],\n description: 'List projects in the organization.',\n goal: 'Show all projects user has access to.',\n context: 'Project list page, dashboard.',\n },\n io: {\n input: ListProjectsInputModel,\n output: ListProjectsOutputModel,\n },\n policy: {\n auth: 'user',\n },\n acceptance: {\n scenarios: [\n {\n key: 'list-projects-happy-path',\n given: ['Projects exist'],\n when: ['User lists projects'],\n then: ['List of projects is returned'],\n },\n ],\n examples: [\n {\n key: 'list-all',\n input: { limit: 10 },\n output: { items: [], total: 5 },\n },\n ],\n },\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PresentationSpec } from "@contractspec/lib.contracts";
|
|
2
|
+
|
|
3
|
+
//#region src/project/project.presentation.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Presentation for displaying a list of projects.
|
|
7
|
+
*/
|
|
8
|
+
declare const ProjectListPresentation: PresentationSpec;
|
|
9
|
+
/**
|
|
10
|
+
* Presentation for project detail view.
|
|
11
|
+
*/
|
|
12
|
+
declare const ProjectDetailPresentation: PresentationSpec;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { ProjectDetailPresentation, ProjectListPresentation };
|
|
15
|
+
//# sourceMappingURL=project.presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.presentation.d.ts","names":[],"sources":["../../src/project/project.presentation.ts"],"sourcesContent":[],"mappings":";;;;;;AAOA;AA6Ba,cA7BA,uBA6B2B,EA7BF,gBAmDrC;;;;cAtBY,2BAA2B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ProjectModel } from "./project.schema.js";
|
|
2
|
+
import { StabilityEnum } from "@contractspec/lib.contracts";
|
|
3
|
+
|
|
4
|
+
//#region src/project/project.presentation.ts
|
|
5
|
+
/**
|
|
6
|
+
* Presentation for displaying a list of projects.
|
|
7
|
+
*/
|
|
8
|
+
const ProjectListPresentation = {
|
|
9
|
+
meta: {
|
|
10
|
+
key: "saas.project.list",
|
|
11
|
+
version: 1,
|
|
12
|
+
title: "Project List",
|
|
13
|
+
description: "List view of projects with status, tags, and last updated info",
|
|
14
|
+
domain: "saas-boilerplate",
|
|
15
|
+
owners: ["@saas-team"],
|
|
16
|
+
tags: [
|
|
17
|
+
"project",
|
|
18
|
+
"list",
|
|
19
|
+
"dashboard"
|
|
20
|
+
],
|
|
21
|
+
stability: StabilityEnum.Beta,
|
|
22
|
+
goal: "Browse and manage projects",
|
|
23
|
+
context: "Project list page"
|
|
24
|
+
},
|
|
25
|
+
source: {
|
|
26
|
+
type: "component",
|
|
27
|
+
framework: "react",
|
|
28
|
+
componentKey: "ProjectListView",
|
|
29
|
+
props: ProjectModel
|
|
30
|
+
},
|
|
31
|
+
targets: [
|
|
32
|
+
"react",
|
|
33
|
+
"markdown",
|
|
34
|
+
"application/json"
|
|
35
|
+
],
|
|
36
|
+
policy: { flags: ["saas.projects.enabled"] }
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Presentation for project detail view.
|
|
40
|
+
*/
|
|
41
|
+
const ProjectDetailPresentation = {
|
|
42
|
+
meta: {
|
|
43
|
+
key: "saas.project.detail",
|
|
44
|
+
version: 1,
|
|
45
|
+
title: "Project Details",
|
|
46
|
+
description: "Detailed view of a project with settings and activity",
|
|
47
|
+
domain: "saas-boilerplate",
|
|
48
|
+
owners: ["@saas-team"],
|
|
49
|
+
tags: ["project", "detail"],
|
|
50
|
+
stability: StabilityEnum.Beta,
|
|
51
|
+
goal: "View and edit project details",
|
|
52
|
+
context: "Project detail page"
|
|
53
|
+
},
|
|
54
|
+
source: {
|
|
55
|
+
type: "component",
|
|
56
|
+
framework: "react",
|
|
57
|
+
componentKey: "ProjectDetailView"
|
|
58
|
+
},
|
|
59
|
+
targets: ["react", "markdown"],
|
|
60
|
+
policy: { flags: ["saas.projects.enabled"] }
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { ProjectDetailPresentation, ProjectListPresentation };
|
|
65
|
+
//# sourceMappingURL=project.presentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.presentation.js","names":["ProjectListPresentation: PresentationSpec","ProjectDetailPresentation: PresentationSpec"],"sources":["../../src/project/project.presentation.ts"],"sourcesContent":["import type { PresentationSpec } from '@contractspec/lib.contracts';\nimport { StabilityEnum } from '@contractspec/lib.contracts';\nimport { ProjectModel } from './project.schema';\n\n/**\n * Presentation for displaying a list of projects.\n */\nexport const ProjectListPresentation: PresentationSpec = {\n meta: {\n key: 'saas.project.list',\n version: 1,\n title: 'Project List',\n description:\n 'List view of projects with status, tags, and last updated info',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['project', 'list', 'dashboard'],\n stability: StabilityEnum.Beta,\n goal: 'Browse and manage projects',\n context: 'Project list page',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'ProjectListView',\n props: ProjectModel,\n },\n targets: ['react', 'markdown', 'application/json'],\n policy: {\n flags: ['saas.projects.enabled'],\n },\n};\n\n/**\n * Presentation for project detail view.\n */\nexport const ProjectDetailPresentation: PresentationSpec = {\n meta: {\n key: 'saas.project.detail',\n version: 1,\n title: 'Project Details',\n description: 'Detailed view of a project with settings and activity',\n domain: 'saas-boilerplate',\n owners: ['@saas-team'],\n tags: ['project', 'detail'],\n stability: StabilityEnum.Beta,\n goal: 'View and edit project details',\n context: 'Project detail page',\n },\n source: {\n type: 'component',\n framework: 'react',\n componentKey: 'ProjectDetailView',\n },\n targets: ['react', 'markdown'],\n policy: {\n flags: ['saas.projects.enabled'],\n },\n};\n"],"mappings":";;;;;;;AAOA,MAAaA,0BAA4C;CACvD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM;GAAC;GAAW;GAAQ;GAAY;EACtC,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACd,OAAO;EACR;CACD,SAAS;EAAC;EAAS;EAAY;EAAmB;CAClD,QAAQ,EACN,OAAO,CAAC,wBAAwB,EACjC;CACF;;;;AAKD,MAAaC,4BAA8C;CACzD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ,CAAC,aAAa;EACtB,MAAM,CAAC,WAAW,SAAS;EAC3B,WAAW,cAAc;EACzB,MAAM;EACN,SAAS;EACV;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,cAAc;EACf;CACD,SAAS,CAAC,SAAS,WAAW;CAC9B,QAAQ,EACN,OAAO,CAAC,wBAAwB,EACjC;CACF"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import * as _contractspec_lib_schema293 from "@contractspec/lib.schema";
|
|
2
|
+
|
|
3
|
+
//#region src/project/project.schema.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* A project within an organization.
|
|
6
|
+
*/
|
|
7
|
+
declare const ProjectModel: _contractspec_lib_schema293.SchemaModel<{
|
|
8
|
+
id: {
|
|
9
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
10
|
+
isOptional: false;
|
|
11
|
+
};
|
|
12
|
+
name: {
|
|
13
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
14
|
+
isOptional: false;
|
|
15
|
+
};
|
|
16
|
+
description: {
|
|
17
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
18
|
+
isOptional: true;
|
|
19
|
+
};
|
|
20
|
+
slug: {
|
|
21
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
22
|
+
isOptional: true;
|
|
23
|
+
};
|
|
24
|
+
organizationId: {
|
|
25
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
26
|
+
isOptional: false;
|
|
27
|
+
};
|
|
28
|
+
createdBy: {
|
|
29
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
30
|
+
isOptional: false;
|
|
31
|
+
};
|
|
32
|
+
status: {
|
|
33
|
+
type: _contractspec_lib_schema293.EnumType<[string, string, string, string]>;
|
|
34
|
+
isOptional: false;
|
|
35
|
+
};
|
|
36
|
+
isPublic: {
|
|
37
|
+
type: _contractspec_lib_schema293.FieldType<boolean, boolean>;
|
|
38
|
+
isOptional: false;
|
|
39
|
+
};
|
|
40
|
+
tags: {
|
|
41
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
42
|
+
isArray: true;
|
|
43
|
+
isOptional: false;
|
|
44
|
+
};
|
|
45
|
+
createdAt: {
|
|
46
|
+
type: _contractspec_lib_schema293.FieldType<Date, string>;
|
|
47
|
+
isOptional: false;
|
|
48
|
+
};
|
|
49
|
+
updatedAt: {
|
|
50
|
+
type: _contractspec_lib_schema293.FieldType<Date, string>;
|
|
51
|
+
isOptional: false;
|
|
52
|
+
};
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Input for creating a project.
|
|
56
|
+
*/
|
|
57
|
+
declare const CreateProjectInputModel: _contractspec_lib_schema293.SchemaModel<{
|
|
58
|
+
name: {
|
|
59
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
60
|
+
isOptional: false;
|
|
61
|
+
};
|
|
62
|
+
description: {
|
|
63
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
64
|
+
isOptional: true;
|
|
65
|
+
};
|
|
66
|
+
slug: {
|
|
67
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
68
|
+
isOptional: true;
|
|
69
|
+
};
|
|
70
|
+
isPublic: {
|
|
71
|
+
type: _contractspec_lib_schema293.FieldType<boolean, boolean>;
|
|
72
|
+
isOptional: true;
|
|
73
|
+
};
|
|
74
|
+
tags: {
|
|
75
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
76
|
+
isArray: true;
|
|
77
|
+
isOptional: true;
|
|
78
|
+
};
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Input for updating a project.
|
|
82
|
+
*/
|
|
83
|
+
declare const UpdateProjectInputModel: _contractspec_lib_schema293.SchemaModel<{
|
|
84
|
+
projectId: {
|
|
85
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
86
|
+
isOptional: false;
|
|
87
|
+
};
|
|
88
|
+
name: {
|
|
89
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
90
|
+
isOptional: true;
|
|
91
|
+
};
|
|
92
|
+
description: {
|
|
93
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
94
|
+
isOptional: true;
|
|
95
|
+
};
|
|
96
|
+
slug: {
|
|
97
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
98
|
+
isOptional: true;
|
|
99
|
+
};
|
|
100
|
+
isPublic: {
|
|
101
|
+
type: _contractspec_lib_schema293.FieldType<boolean, boolean>;
|
|
102
|
+
isOptional: true;
|
|
103
|
+
};
|
|
104
|
+
tags: {
|
|
105
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
106
|
+
isArray: true;
|
|
107
|
+
isOptional: true;
|
|
108
|
+
};
|
|
109
|
+
status: {
|
|
110
|
+
type: _contractspec_lib_schema293.EnumType<[string, string, string, string]>;
|
|
111
|
+
isOptional: true;
|
|
112
|
+
};
|
|
113
|
+
}>;
|
|
114
|
+
/**
|
|
115
|
+
* Input for getting a project.
|
|
116
|
+
*/
|
|
117
|
+
declare const GetProjectInputModel: _contractspec_lib_schema293.SchemaModel<{
|
|
118
|
+
projectId: {
|
|
119
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
120
|
+
isOptional: false;
|
|
121
|
+
};
|
|
122
|
+
}>;
|
|
123
|
+
/**
|
|
124
|
+
* Input for deleting a project.
|
|
125
|
+
*/
|
|
126
|
+
declare const DeleteProjectInputModel: _contractspec_lib_schema293.SchemaModel<{
|
|
127
|
+
projectId: {
|
|
128
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
129
|
+
isOptional: false;
|
|
130
|
+
};
|
|
131
|
+
}>;
|
|
132
|
+
/**
|
|
133
|
+
* Output for delete operation.
|
|
134
|
+
*/
|
|
135
|
+
declare const DeleteProjectOutputModel: _contractspec_lib_schema293.SchemaModel<{
|
|
136
|
+
success: {
|
|
137
|
+
type: _contractspec_lib_schema293.FieldType<boolean, boolean>;
|
|
138
|
+
isOptional: false;
|
|
139
|
+
};
|
|
140
|
+
}>;
|
|
141
|
+
/**
|
|
142
|
+
* Payload for project deleted event.
|
|
143
|
+
*/
|
|
144
|
+
declare const ProjectDeletedPayloadModel: _contractspec_lib_schema293.SchemaModel<{
|
|
145
|
+
projectId: {
|
|
146
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
147
|
+
isOptional: false;
|
|
148
|
+
};
|
|
149
|
+
}>;
|
|
150
|
+
/**
|
|
151
|
+
* Input for listing projects.
|
|
152
|
+
*/
|
|
153
|
+
declare const ListProjectsInputModel: _contractspec_lib_schema293.SchemaModel<{
|
|
154
|
+
status: {
|
|
155
|
+
type: _contractspec_lib_schema293.EnumType<[string, string, string, string]>;
|
|
156
|
+
isOptional: true;
|
|
157
|
+
};
|
|
158
|
+
search: {
|
|
159
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
160
|
+
isOptional: true;
|
|
161
|
+
};
|
|
162
|
+
limit: {
|
|
163
|
+
type: _contractspec_lib_schema293.FieldType<number, number>;
|
|
164
|
+
isOptional: true;
|
|
165
|
+
defaultValue: number;
|
|
166
|
+
};
|
|
167
|
+
offset: {
|
|
168
|
+
type: _contractspec_lib_schema293.FieldType<number, number>;
|
|
169
|
+
isOptional: true;
|
|
170
|
+
defaultValue: number;
|
|
171
|
+
};
|
|
172
|
+
}>;
|
|
173
|
+
/**
|
|
174
|
+
* Output for listing projects.
|
|
175
|
+
*/
|
|
176
|
+
declare const ListProjectsOutputModel: _contractspec_lib_schema293.SchemaModel<{
|
|
177
|
+
projects: {
|
|
178
|
+
type: _contractspec_lib_schema293.SchemaModel<{
|
|
179
|
+
id: {
|
|
180
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
181
|
+
isOptional: false;
|
|
182
|
+
};
|
|
183
|
+
name: {
|
|
184
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
185
|
+
isOptional: false;
|
|
186
|
+
};
|
|
187
|
+
description: {
|
|
188
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
189
|
+
isOptional: true;
|
|
190
|
+
};
|
|
191
|
+
slug: {
|
|
192
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
193
|
+
isOptional: true;
|
|
194
|
+
};
|
|
195
|
+
organizationId: {
|
|
196
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
197
|
+
isOptional: false;
|
|
198
|
+
};
|
|
199
|
+
createdBy: {
|
|
200
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
201
|
+
isOptional: false;
|
|
202
|
+
};
|
|
203
|
+
status: {
|
|
204
|
+
type: _contractspec_lib_schema293.EnumType<[string, string, string, string]>;
|
|
205
|
+
isOptional: false;
|
|
206
|
+
};
|
|
207
|
+
isPublic: {
|
|
208
|
+
type: _contractspec_lib_schema293.FieldType<boolean, boolean>;
|
|
209
|
+
isOptional: false;
|
|
210
|
+
};
|
|
211
|
+
tags: {
|
|
212
|
+
type: _contractspec_lib_schema293.FieldType<string, string>;
|
|
213
|
+
isArray: true;
|
|
214
|
+
isOptional: false;
|
|
215
|
+
};
|
|
216
|
+
createdAt: {
|
|
217
|
+
type: _contractspec_lib_schema293.FieldType<Date, string>;
|
|
218
|
+
isOptional: false;
|
|
219
|
+
};
|
|
220
|
+
updatedAt: {
|
|
221
|
+
type: _contractspec_lib_schema293.FieldType<Date, string>;
|
|
222
|
+
isOptional: false;
|
|
223
|
+
};
|
|
224
|
+
}>;
|
|
225
|
+
isArray: true;
|
|
226
|
+
isOptional: false;
|
|
227
|
+
};
|
|
228
|
+
total: {
|
|
229
|
+
type: _contractspec_lib_schema293.FieldType<number, number>;
|
|
230
|
+
isOptional: false;
|
|
231
|
+
};
|
|
232
|
+
}>;
|
|
233
|
+
//#endregion
|
|
234
|
+
export { CreateProjectInputModel, DeleteProjectInputModel, DeleteProjectOutputModel, GetProjectInputModel, ListProjectsInputModel, ListProjectsOutputModel, ProjectDeletedPayloadModel, ProjectModel, UpdateProjectInputModel };
|
|
235
|
+
//# sourceMappingURL=project.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.schema.d.ts","names":[],"sources":["../../src/project/project.schema.ts"],"sourcesContent":[],"mappings":";;;;;;AASa,cAAA,YAuBX,8BAvBuB,WAuBvB,CAAA;EAAA,EAAA,EAAA;UAAA,2BAAA,CAAA;;;;;;;;;;;;+CAvBuB,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,IAAA;EA4BZ,CAAA;EAcX,cAAA,EAAA;;;;;+CAdkC,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAmBvB,CAAA;EAgBX,MAAA,EAAA;;;;;;;;EAhBkC,IAAA,EAAA;IAqBvB,IAAA,uCAKX,CAAA,MAAA,EAAA,MAAA,CAAA;IAKW,OAAA,EAAA,IAAA;IAUA,UAAA,EAAA,KAAA;EAUA,CAAA;EAUA,SAAA,EAAA;IAiBX,IAAA,uCAAA,KAAA,EAAA,MAAA,CAAA;;;;+CAjBiC,KAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;EAsBtB,CAAA;CAOX,CAAA;;;;cA7GW,qDAAuB;;UAclC,2BAAA,CAAA;;;;;;;;;;EAwFkC,CAAA;;;;;;;;;;;;;;cAnFvB,qDAAuB;;UAgBlC,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKW,sBAKX,2BAAA,CAL+B;;UAK/B,2BAAA,CAAA;;;;;;;cAKW,yBAKX,2BAAA,CALkC;;UAKlC,2BAAA,CAAA;;;;;;;cAKW,0BAKX,2BAAA,CALmC;;UAKnC,2BAAA,CAAA;;;;;;;cAKW,4BAKX,2BAAA,CALqC;;UAKrC,2BAAA,CAAA;;;;;;;cAKW,oDAAsB;;UAiBjC,2BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;cAKW,qDAAuB;;;;cAOlC,2BAAA,CAAA"}
|