@ddd-tool/domain-designer-cli 0.1.0-beta.9 → 0.3.1
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/README.md +12 -20
- package/bin/domain-designer-cli.cjs +19148 -18666
- package/package.json +42 -23
- package/packages/core/dist/README.md +43 -0
- package/packages/core/dist/actor.d.ts +2 -0
- package/packages/core/dist/agg.d.ts +2 -0
- package/packages/core/dist/command.d.ts +3 -0
- package/packages/core/dist/common.d.ts +158 -0
- package/packages/core/dist/event.d.ts +2 -0
- package/packages/core/dist/index.d.ts +33 -0
- package/packages/core/dist/index.js +1980 -0
- package/packages/core/dist/info.d.ts +2 -0
- package/packages/core/dist/note.d.ts +2 -0
- package/packages/core/dist/package.json +21 -0
- package/packages/core/dist/policy.d.ts +2 -0
- package/packages/core/dist/read-model.d.ts +2 -0
- package/packages/core/dist/service.d.ts +2 -0
- package/packages/core/dist/system.d.ts +2 -0
- package/packages/core/dist/types.d.ts +558 -0
- package/packages/playground/.env +1 -0
- package/packages/playground/node_modules/.vite/deps/_metadata.json +34 -0
- package/packages/playground/node_modules/.vite/deps/chunk-F4TQRHS6.js +2147 -0
- package/packages/playground/node_modules/.vite/deps/chunk-F4TQRHS6.js.map +7 -0
- package/packages/playground/node_modules/.vite/deps/chunk-MFAKUPMY.js +12787 -0
- package/packages/playground/node_modules/.vite/deps/chunk-MFAKUPMY.js.map +7 -0
- package/packages/playground/node_modules/.vite/deps/package.json +3 -0
- package/packages/playground/node_modules/.vite/deps/primevue_button.js +1215 -0
- package/packages/playground/node_modules/.vite/deps/primevue_button.js.map +7 -0
- package/packages/playground/node_modules/.vite/deps/primevue_dock.js +1236 -0
- package/packages/playground/node_modules/.vite/deps/primevue_dock.js.map +7 -0
- package/packages/playground/node_modules/.vite/deps/vue.js +346 -0
- package/packages/playground/node_modules/.vite/deps/vue.js.map +7 -0
- package/packages/playground/node_modules/.vue-global-types/vue_3.5_0.d.ts +136 -0
- package/packages/playground/package.json +19 -0
- package/{src → packages/playground/src}/App.vue +12 -12
- package/{src → packages/playground/src}/main.ts +27 -27
- package/{src → packages/playground/src}/views/Index.vue +16 -16
- package/packages/playground/src/views/complex-example-detail/book.ts +383 -0
- package/packages/playground/src/views/complex-example-detail/common.ts +4 -0
- package/packages/playground/src/views/complex-example-detail/user.ts +66 -0
- package/packages/playground/src/views/complex-example.ts +4 -0
- package/{src → packages/playground/src}/views/design-en.ts +110 -99
- package/{src → packages/playground/src}/views/design-zh.ts +97 -91
- package/packages/playground/src/views/index.ts +19 -0
- package/packages/playground/src/views/simple-example.ts +103 -0
- package/packages/playground/tsconfig.json +32 -0
- package/packages/playground/vite-env.d.ts +12 -0
- package/packages/playground/vite.config.ts +22 -0
- package/packages/ui-component/dist/LICENSE +201 -0
- package/packages/ui-component/dist/README.md +5 -0
- package/packages/ui-component/dist/UI.vue.d.ts +29 -0
- package/packages/ui-component/dist/common.d.ts +9 -0
- package/packages/ui-component/dist/components/drag-zoom/Index.vue.d.ts +37 -0
- package/packages/ui-component/dist/components/node-info/Index.vue.d.ts +29 -0
- package/packages/ui-component/dist/components/nomnoml/Index.vue.d.ts +24 -0
- package/packages/ui-component/dist/components/nomnoml/base-style.d.ts +2 -0
- package/packages/ui-component/dist/components/nomnoml/preprocess.d.ts +5 -0
- package/packages/ui-component/dist/components/story-bar/Index.vue.d.ts +28 -0
- package/packages/ui-component/dist/components/tool-bar/Index.vue.d.ts +29 -0
- package/packages/ui-component/dist/domain/common.d.ts +27 -0
- package/packages/ui-component/dist/domain/diagram-agg/gen-code.d.ts +64 -0
- package/packages/ui-component/dist/domain/diagram-agg/index.d.ts +8554 -0
- package/packages/ui-component/dist/domain/diagram-agg/plugins.d.ts +80 -0
- package/packages/ui-component/dist/domain/diagram-agg/types.d.ts +20 -0
- package/packages/ui-component/dist/domain/i18n-agg/index.d.ts +25 -0
- package/packages/ui-component/dist/domain/i18n-agg/locale/en-US.d.ts +3 -0
- package/packages/ui-component/dist/domain/i18n-agg/locale/zh-CN.d.ts +3 -0
- package/packages/ui-component/dist/domain/i18n-agg/message.d.ts +42 -0
- package/packages/ui-component/dist/domain/mount-plugin.d.ts +1 -0
- package/packages/ui-component/dist/favicon.ico +0 -0
- package/packages/ui-component/dist/index.css +144 -0
- package/packages/ui-component/dist/index.d.ts +6 -0
- package/packages/ui-component/dist/index.js +19776 -0
- package/packages/ui-component/dist/package.json +28 -0
- package/packages/ui-component/dist/ui.d.ts +8 -0
- package/scripts/ai-assist-worker.cjs +7123 -0
- package/scripts/sync-version.mjs +22 -0
- package/templates/CLAUDE.md +276 -0
- package/templates/README.md +97 -0
- package/templates/complex-example-detail/book.ts +383 -0
- package/templates/complex-example-detail/common.ts +4 -0
- package/templates/complex-example-detail/user.ts +66 -0
- package/templates/complex-example.ts +4 -0
- package/templates/node_modules/@ddd-tool/domain-designer-core/actor.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/agg.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/command.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/common.d.ts +7 -8
- package/templates/node_modules/@ddd-tool/domain-designer-core/event.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/index.d.ts +3 -3
- package/templates/node_modules/@ddd-tool/domain-designer-core/info.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/note.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/policy.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/read-model.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/service.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/system.d.ts +1 -1
- package/templates/node_modules/@ddd-tool/domain-designer-core/{define.d.ts → types.d.ts} +23 -4
- package/templates/node_modules/version.txt +1 -1
- package/templates/simple-example.ts +103 -0
- package/tsconfig.json +19 -6
- package/scripts/sync-ver.mjs +0 -0
- package/src/views/index.ts +0 -15
- package/templates/example-agg.ts +0 -31
- package/templates/example.ts +0 -91
- package/vite.config.ts +0 -16
- /package/{index.html → packages/playground/index.html} +0 -0
- /package/{src → packages/playground/src}/assets/logo.svg +0 -0
- /package/{src → packages/playground/src}/assets/main.css +0 -0
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { i, d } from './common'
|
|
2
|
+
import { 管理员, 会员, userValues, 定时器, 用户聚合, 会员账号读模型 } from './user'
|
|
3
|
+
|
|
4
|
+
export const bookValues = {
|
|
5
|
+
二维码: i.id('qrCode', '二维码,一书一码,业务id'),
|
|
6
|
+
书名: i.valueObj('bookName'),
|
|
7
|
+
ISBN: i.valueObj('isbn', '国际标准书号'),
|
|
8
|
+
图片: i.valueObj('picture'),
|
|
9
|
+
简介: i.valueObj('bookIntroduction'),
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const 新书已入库 = d.event(
|
|
13
|
+
'BookPutInStorage',
|
|
14
|
+
[bookValues.二维码, bookValues.ISBN, bookValues.书名, bookValues.图片, bookValues.简介],
|
|
15
|
+
'新书已入库',
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
const 书已上架 = d.event('BookPutOnShelf', [bookValues.二维码], '书已上架')
|
|
19
|
+
|
|
20
|
+
const 书已下架 = d.event('BookPutOnShelf', [bookValues.二维码], '书已下架')
|
|
21
|
+
|
|
22
|
+
const 书已被预定 = d.event(
|
|
23
|
+
'BookReserved',
|
|
24
|
+
[i.id('预定id'), bookValues.二维码, '预定人: userId', '预定时间'],
|
|
25
|
+
'书已被预定',
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
const 预定已超时 = d.event(
|
|
29
|
+
'BookReserveTimeOut',
|
|
30
|
+
[i.id('预定id'), bookValues.二维码, '预定人: userId'],
|
|
31
|
+
'预定已超时',
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
const 预定已取消 = d.event(
|
|
35
|
+
'BookReserveCanceled',
|
|
36
|
+
['预定id', bookValues.二维码, '预定人: userId'],
|
|
37
|
+
'预定已取消',
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
const 书已被借出 = d.event(
|
|
41
|
+
'BookBorrowedOut',
|
|
42
|
+
['借书id', bookValues.二维码, '借出人: userId', '借出时间', '应还书时间'],
|
|
43
|
+
'书已被借出',
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
const 书已被还 = d.event(
|
|
47
|
+
'BookReturned',
|
|
48
|
+
['借书id', bookValues.二维码, '借出人: userId', '归还前已遗失'],
|
|
49
|
+
'书已被还',
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
const 书已被遗失 = d.event(
|
|
53
|
+
'BookLost',
|
|
54
|
+
['借书id', bookValues.二维码, '借书人: userId'],
|
|
55
|
+
'书已被遗失',
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
export const 用户还书已逾期 = d.event(
|
|
59
|
+
'UserReturnBookTimeOut',
|
|
60
|
+
[userValues.用户id],
|
|
61
|
+
'用户还书已逾期',
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
const 还书已逾期 = d.event(
|
|
65
|
+
'BookReturnTimeOut',
|
|
66
|
+
['借书id', '借书人: userId', bookValues.二维码],
|
|
67
|
+
'还书已逾期',
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
const 入库新书 = d.command(
|
|
71
|
+
'PutBookInStorage',
|
|
72
|
+
[bookValues.二维码, bookValues.ISBN, bookValues.书名, bookValues.图片, bookValues.简介],
|
|
73
|
+
d.note`入库新书
|
|
74
|
+
1. 二维码不能重复`,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
const 上架书 = d.command(
|
|
78
|
+
'PutBookOnShelf',
|
|
79
|
+
[bookValues.二维码],
|
|
80
|
+
d.note`上架书
|
|
81
|
+
1. 书存在且已下架才能上架`,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
const 下架书 = d.command(
|
|
85
|
+
'RemoveBookFromShelf',
|
|
86
|
+
[bookValues.二维码],
|
|
87
|
+
d.note`下架书
|
|
88
|
+
1. 书存在且已上架才能下架`,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
const 预定书 = d.command(
|
|
92
|
+
'ReserveBook',
|
|
93
|
+
[bookValues.ISBN, '预定人: userId'],
|
|
94
|
+
d.note`预定书
|
|
95
|
+
1.有可预定的书
|
|
96
|
+
2.会员账户没有被暂停
|
|
97
|
+
3.会员已预定或者借出的书小于3本
|
|
98
|
+
4.从可预订的指定ISBN的书里随机选取`,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
const 超时预定 = d.command(
|
|
102
|
+
'ReserveTimeOut',
|
|
103
|
+
['预定id'],
|
|
104
|
+
d.note`超时预定
|
|
105
|
+
1.当前时间离预定时间超过24小时`,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
const 取消预定 = d.command(
|
|
109
|
+
'ReserveCanceled',
|
|
110
|
+
['预定id'],
|
|
111
|
+
d.note`取消预定
|
|
112
|
+
1.有预定,且在24小时内`,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
const 借出书装饰命令 = d.facadeCmd(
|
|
116
|
+
'BorrowOut',
|
|
117
|
+
['借书人:userId'],
|
|
118
|
+
d.note`借出书装饰命令
|
|
119
|
+
1.会员账号没有被暂停
|
|
120
|
+
2.书已上架,没有被借出,没有被预定
|
|
121
|
+
3.会员已预定或者借出的书小于3本
|
|
122
|
+
4.书的二维码存在`,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
const 还书 = d.command(
|
|
126
|
+
'ReturnBook',
|
|
127
|
+
[bookValues.二维码],
|
|
128
|
+
d.note`还书
|
|
129
|
+
1.书的二维码存在
|
|
130
|
+
2.书已被借出或者遗失
|
|
131
|
+
3.归还已遗失的书,如果时间过了1个月,也算逾期`,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
const 上报遗失 = d.command(
|
|
135
|
+
'ReportLost',
|
|
136
|
+
['借书id'],
|
|
137
|
+
d.note`上报遗失
|
|
138
|
+
1.书存在,被借出
|
|
139
|
+
2.遗失的书自动下架`,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
const 逾期 = d.command(
|
|
143
|
+
'TimeOutBorrowing',
|
|
144
|
+
['借书id'],
|
|
145
|
+
d.note`逾期
|
|
146
|
+
1.书被借出,且1个月未还
|
|
147
|
+
2.增加借书会员的逾期次数`,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
const 书聚合 = d.agg('BookAgg', [bookValues.二维码], '书聚合')
|
|
151
|
+
|
|
152
|
+
const 用户占用书聚合 = d.agg('UserOcuppyBookAgg', [userValues.用户id, '占用数量'], '用户占用书聚合')
|
|
153
|
+
|
|
154
|
+
const 增加账户逾期次数规则 = d.policy('SuspendAccountWhenTimeOut', d.note`增加账户逾期次数`)
|
|
155
|
+
|
|
156
|
+
const 增加逾期次数 = d.command(
|
|
157
|
+
'IncreaseAccountTimeOutCount',
|
|
158
|
+
[userValues.用户id],
|
|
159
|
+
d.note`增加逾期次数
|
|
160
|
+
1.会员累计逾期达到3次暂停账户
|
|
161
|
+
2.会员账户当前是启用才能被暂停`,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
const 下架已遗失书规则 = d.policy('RemoveBookWhenLost', d.note`下架已遗失书`)
|
|
165
|
+
|
|
166
|
+
const 上架被找回的遗失的书规则 = d.policy(
|
|
167
|
+
'PutShelfLostBook',
|
|
168
|
+
d.note`上架被找回的遗失的书规则
|
|
169
|
+
1.书被借出后遗失`,
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
const 下架书时取消预定规则 = d.policy('CancelReserveWhenRemoveFromShelf', '下架书时取消预定规则')
|
|
173
|
+
|
|
174
|
+
const 用户占用书规则 = d.policy(
|
|
175
|
+
'modifyUserOcuppyBookPolicy',
|
|
176
|
+
d.note`用户占用书规则
|
|
177
|
+
借出、预定占用书增加
|
|
178
|
+
归还、取消预定、预定超时、遗失时占用书减少`,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
const 用户占用书变化了 = d.event(
|
|
182
|
+
'UserOcuppyBookChanged',
|
|
183
|
+
[userValues.用户id, '新占用量', '旧占用量'],
|
|
184
|
+
'用户占用书变化了',
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
const 调整用户占书量 = d.command(
|
|
188
|
+
'ModifyUserOcuppyBook',
|
|
189
|
+
[userValues.用户id, '调整值'],
|
|
190
|
+
'调整用户占书量',
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
const 预定聚合 = d.agg(
|
|
194
|
+
'ReserveAgg',
|
|
195
|
+
[i.id('预定id'), '预定时间', '预定人', bookValues.二维码, '是否有效'],
|
|
196
|
+
'预定聚合',
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
const 借出聚合 = d.agg(
|
|
200
|
+
'',
|
|
201
|
+
['借书ID', bookValues.二维码, '上报过遗失', '是否待还书', '借出时间'],
|
|
202
|
+
'借出聚合',
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
const 可预订书聚合 = d.agg(
|
|
206
|
+
'AvailableBooksAgg',
|
|
207
|
+
[bookValues.ISBN, i.valueObj('二维码集合', d.note`${bookValues.二维码}`), i.func('是否包含书')],
|
|
208
|
+
'可预订书聚合',
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
const 添加可预订书 = d.command(
|
|
212
|
+
'AddToAvailableBooksCmd',
|
|
213
|
+
[bookValues.ISBN, bookValues.二维码],
|
|
214
|
+
'添加可预订书',
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
const 移除可预订书 = d.command(
|
|
218
|
+
'RemoveFromAvailableBooksCmd',
|
|
219
|
+
[bookValues.ISBN, bookValues.二维码],
|
|
220
|
+
'移除可预订书',
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
const 书已可预订 = d.event(
|
|
224
|
+
'BookAddedToAvailableEvt',
|
|
225
|
+
[bookValues.ISBN, bookValues.二维码],
|
|
226
|
+
'书已可预订',
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
const 书已不可预订 = d.event(
|
|
230
|
+
'BookRemovedFromAvailableEvt',
|
|
231
|
+
[bookValues.ISBN, bookValues.二维码],
|
|
232
|
+
'书已不可预订',
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
const 添加可预订策略 = d.policy('AddAvailablePolicy', '添加可预订策略')
|
|
236
|
+
|
|
237
|
+
const 移除可预订策略 = d.policy('RemoveAvailablePolicy', '移除可预订策略')
|
|
238
|
+
|
|
239
|
+
const 借书服务 = d.service(
|
|
240
|
+
'BorrowBookService',
|
|
241
|
+
d.note`借书服务
|
|
242
|
+
书可预定则可借出
|
|
243
|
+
书已预定时借书人是预定则可借`,
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
const 借出书 = d.command('BorrowOutCmd', ['借书人id', bookValues.二维码], '借出书')
|
|
247
|
+
|
|
248
|
+
const ISBN读模型 = d.readModel(
|
|
249
|
+
'ISBNStatsRM',
|
|
250
|
+
[bookValues.ISBN, '累计借出次数', '当前在馆数', '当前借出数', '书名', '图片', '简介'],
|
|
251
|
+
'ISBN读模型',
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
const ISBN每日借出数读模型 = d.readModel(
|
|
255
|
+
'ISBNDailyBorrowCountRM',
|
|
256
|
+
[bookValues.ISBN, i.id('date'), '借出次数'],
|
|
257
|
+
'ISBN每日借出数',
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
const 借出读模型 = d.readModel(
|
|
261
|
+
'',
|
|
262
|
+
[
|
|
263
|
+
'借书id',
|
|
264
|
+
bookValues.二维码,
|
|
265
|
+
bookValues.ISBN,
|
|
266
|
+
'书名',
|
|
267
|
+
'借书人id',
|
|
268
|
+
'借书人名',
|
|
269
|
+
'借出时间',
|
|
270
|
+
'应还书时间',
|
|
271
|
+
'还书时间',
|
|
272
|
+
'是否逾期',
|
|
273
|
+
'是否遗失',
|
|
274
|
+
],
|
|
275
|
+
'借出读模型',
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
// =========================== 流程定义 ===========================
|
|
279
|
+
|
|
280
|
+
const 新书入库流程 = d.startWorkflow('新书入库流程')
|
|
281
|
+
管理员.command(入库新书).agg(书聚合).event(新书已入库).readModel(ISBN读模型)
|
|
282
|
+
|
|
283
|
+
const 上架流程 = d.startWorkflow('上架流程')
|
|
284
|
+
管理员
|
|
285
|
+
.command(上架书)
|
|
286
|
+
.agg(书聚合)
|
|
287
|
+
.event(书已上架)
|
|
288
|
+
.policy(添加可预订策略)
|
|
289
|
+
.command(添加可预订书)
|
|
290
|
+
.agg(可预订书聚合)
|
|
291
|
+
.event(书已可预订)
|
|
292
|
+
|
|
293
|
+
const 下架流程 = d.startWorkflow('下架流程')
|
|
294
|
+
管理员.command(下架书).agg(书聚合).event(书已下架)
|
|
295
|
+
书已下架.policy(移除可预订策略).command(移除可预订书).agg(可预订书聚合).event(书已不可预订)
|
|
296
|
+
书已下架
|
|
297
|
+
.policy(下架书时取消预定规则)
|
|
298
|
+
.command(取消预定)
|
|
299
|
+
.agg(预定聚合)
|
|
300
|
+
.event(预定已取消)
|
|
301
|
+
.policy(用户占用书规则)
|
|
302
|
+
.command(调整用户占书量)
|
|
303
|
+
.agg(用户占用书聚合)
|
|
304
|
+
.event(用户占用书变化了)
|
|
305
|
+
|
|
306
|
+
d.defineUserStory('管理员对书状态进行维护', [新书入库流程, 上架流程, 下架流程])
|
|
307
|
+
|
|
308
|
+
const 预定流程 = d.startWorkflow('预定流程')
|
|
309
|
+
会员.command(预定书).agg(预定聚合).event(书已被预定)
|
|
310
|
+
书已被预定
|
|
311
|
+
.policy(用户占用书规则)
|
|
312
|
+
.command(调整用户占书量)
|
|
313
|
+
.agg(用户占用书聚合)
|
|
314
|
+
.event(用户占用书变化了)
|
|
315
|
+
书已被预定.policy(移除可预订策略).command(移除可预订书).agg(可预订书聚合).event(书已不可预订)
|
|
316
|
+
|
|
317
|
+
const 取消预定流程 = d.startWorkflow('取消预定流程')
|
|
318
|
+
会员.command(取消预定).agg(预定聚合).event(预定已取消)
|
|
319
|
+
预定已取消
|
|
320
|
+
.policy(用户占用书规则)
|
|
321
|
+
.command(调整用户占书量)
|
|
322
|
+
.agg(用户占用书聚合)
|
|
323
|
+
.event(用户占用书变化了)
|
|
324
|
+
预定已取消.policy(添加可预订策略).command(添加可预订书).agg(可预订书聚合).event(书已可预订)
|
|
325
|
+
|
|
326
|
+
const 借书流程 = d.startWorkflow('借书流程')
|
|
327
|
+
会员.facadeCmd(借出书装饰命令).service(借书服务)
|
|
328
|
+
借书服务.agg(可预订书聚合).event(书已不可预订)
|
|
329
|
+
借书服务.command(借出书).agg(借出聚合).event(书已被借出)
|
|
330
|
+
书已被借出.readModel(ISBN读模型)
|
|
331
|
+
书已被借出.readModel(ISBN每日借出数读模型)
|
|
332
|
+
书已被借出.readModel(借出读模型)
|
|
333
|
+
书已被借出.readModel(借出读模型)
|
|
334
|
+
书已被借出
|
|
335
|
+
.policy(用户占用书规则)
|
|
336
|
+
.command(调整用户占书量)
|
|
337
|
+
.agg(用户占用书聚合)
|
|
338
|
+
.event(用户占用书变化了)
|
|
339
|
+
|
|
340
|
+
const 还书流程 = d.startWorkflow('还书流程')
|
|
341
|
+
会员.command(还书).agg(借出聚合).event(书已被还).policy(上架被找回的遗失的书规则)
|
|
342
|
+
|
|
343
|
+
const 上报遗失流程 = d.startWorkflow('上报遗失流程')
|
|
344
|
+
会员.command(上报遗失)
|
|
345
|
+
.agg(借出聚合)
|
|
346
|
+
.event(书已被遗失)
|
|
347
|
+
.policy(下架已遗失书规则)
|
|
348
|
+
.command(下架书)
|
|
349
|
+
.agg(书聚合)
|
|
350
|
+
.event(书已下架)
|
|
351
|
+
.policy(移除可预订策略)
|
|
352
|
+
.command(移除可预订书)
|
|
353
|
+
.agg(可预订书聚合)
|
|
354
|
+
.event(书已不可预订)
|
|
355
|
+
|
|
356
|
+
d.defineUserStory('会员对书进行预定、借阅', [
|
|
357
|
+
预定流程,
|
|
358
|
+
取消预定流程,
|
|
359
|
+
借书流程,
|
|
360
|
+
还书流程,
|
|
361
|
+
上报遗失流程,
|
|
362
|
+
])
|
|
363
|
+
|
|
364
|
+
const 自动处理逾期流程 = d.startWorkflow('自动处理逾期流程')
|
|
365
|
+
定时器.command(逾期).agg(借出聚合).event(还书已逾期)
|
|
366
|
+
还书已逾期.readModel(借出读模型)
|
|
367
|
+
还书已逾期
|
|
368
|
+
.policy(增加账户逾期次数规则)
|
|
369
|
+
.command(增加逾期次数)
|
|
370
|
+
.agg(用户聚合)
|
|
371
|
+
.event(用户还书已逾期)
|
|
372
|
+
.readModel(会员账号读模型)
|
|
373
|
+
|
|
374
|
+
const 自动处理预定超时流程 = d.startWorkflow('自动处理预定超时流程')
|
|
375
|
+
定时器.command(超时预定).agg(预定聚合).event(预定已超时)
|
|
376
|
+
预定已超时
|
|
377
|
+
.policy(用户占用书规则)
|
|
378
|
+
.command(调整用户占书量)
|
|
379
|
+
.agg(用户占用书聚合)
|
|
380
|
+
.event(用户占用书变化了)
|
|
381
|
+
预定已超时.policy(添加可预订策略).command(添加可预订书).agg(可预订书聚合).event(书已可预订)
|
|
382
|
+
|
|
383
|
+
d.defineUserStory('定时任务', [自动处理预定超时流程, 自动处理逾期流程])
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { i, d } from './common'
|
|
2
|
+
|
|
3
|
+
export const userValues = {
|
|
4
|
+
用户id: i.id('userId'),
|
|
5
|
+
逾期次数: i.valueObj('overdueTimes', '正整数,每当用户有逾期行为,自增1'),
|
|
6
|
+
是否暂停: i.valueObj('isSuspended'),
|
|
7
|
+
} as const
|
|
8
|
+
|
|
9
|
+
export const 管理员 = d.actor('管理员')
|
|
10
|
+
export const 会员 = d.actor('会员')
|
|
11
|
+
export const 定时器 = d.actor('定时器')
|
|
12
|
+
|
|
13
|
+
const 会员账户已暂停 = d.event('UserAccountSuspended', ['userId'], '会员账户已暂停')
|
|
14
|
+
|
|
15
|
+
const 会员账户已启用 = d.event('UserAccountResumed', ['userId'], '会员账户已启用')
|
|
16
|
+
|
|
17
|
+
const 启用会员账户 = d.command(
|
|
18
|
+
'ResumeAccount',
|
|
19
|
+
['userId'],
|
|
20
|
+
d.note`启用会员账户
|
|
21
|
+
1.会员账户当前被暂停才能启用`,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
export const 用户聚合 = d.agg('userAgg', [
|
|
25
|
+
userValues.用户id,
|
|
26
|
+
userValues.是否暂停,
|
|
27
|
+
userValues.逾期次数,
|
|
28
|
+
])
|
|
29
|
+
|
|
30
|
+
const 会员外部系统 = d.system('UserSystem', '会员外部系统')
|
|
31
|
+
|
|
32
|
+
const 会员账号已创建 = d.event(
|
|
33
|
+
'UserAccountCreatedEvt',
|
|
34
|
+
['会员id : userId', '会员名'],
|
|
35
|
+
'会员账号已创建',
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
export const 会员账号读模型 = d.readModel(
|
|
39
|
+
'UserAccountStatsRM',
|
|
40
|
+
['会员id : userId', '会员名', '是否暂停', '累计逾期次数'],
|
|
41
|
+
'会员账号读模型',
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
const 增加逾期次数 = d.command(
|
|
45
|
+
'IncreaseAccountTimeOutCount',
|
|
46
|
+
[userValues.用户id],
|
|
47
|
+
d.note`增加逾期次数
|
|
48
|
+
1.会员累计逾期达到3次暂停账户
|
|
49
|
+
2.会员账户当前是启用才能被暂停`,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
// ============================= 流程定义 =============================
|
|
53
|
+
|
|
54
|
+
const 创建会员流程 = d.startWorkflow('创建会员流程')
|
|
55
|
+
会员外部系统.event(会员账号已创建).readModel(会员账号读模型)
|
|
56
|
+
|
|
57
|
+
const 暂停会员流程 = d.startWorkflow('暂停会员流程')
|
|
58
|
+
用户聚合.event(会员账户已暂停).readModel(会员账号读模型)
|
|
59
|
+
|
|
60
|
+
const 启动会员流程 = d.startWorkflow('启动会员流程')
|
|
61
|
+
管理员.command(启用会员账户).agg(用户聚合).event(会员账户已启用).readModel(会员账号读模型)
|
|
62
|
+
|
|
63
|
+
const 增加逾期次数流程 = d.startWorkflow('增加逾期次数流程')
|
|
64
|
+
管理员.command(增加逾期次数).agg(用户聚合)
|
|
65
|
+
|
|
66
|
+
d.defineUserStory('会员管理', [创建会员流程, 暂停会员流程, 启动会员流程, 增加逾期次数流程])
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignActorProvider } from './
|
|
1
|
+
import { DomainDesignActorProvider } from './types';
|
|
2
2
|
export declare function createActorProvider(designId: string): DomainDesignActorProvider;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignAggProvider } from './
|
|
1
|
+
import { DomainDesignAggProvider } from './types';
|
|
2
2
|
export declare function createAggProvider(designId: string): DomainDesignAggProvider;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { DomainDesignCommandProvider, DomainDesignFacadeCommandProvider } from './
|
|
1
|
+
import { DomainDesignCommandProvider, DomainDesignFacadeCommandProvider } from './types';
|
|
2
2
|
export declare function createCommandProvider(designId: string): DomainDesignCommandProvider;
|
|
3
3
|
export declare function createFacadeCmdProvider(designId: string): DomainDesignFacadeCommandProvider;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NonEmptyArray, DomainDesignAgg, DomainDesignAggProvider, DomainDesignCommand, DomainDesignCommandProvider, DomainDesignNoteProvider, DomainDesignEvent, DomainDesignEventProvider, DomainDesignFacadeCommand, DomainDesignFacadeCommandProvider, DomainDesignInfoProvider, DomainDesignActor, DomainDesignActorProvider, DomainDesignPolicy, DomainDesignPolicyProvider, DomainDesignService, DomainDesignServiceProvider, DomainDesignSystem, DomainDesignSystemProvider, DomainDesignReadModel, DomainDesignReadModelProvider, CustomInfoArrayToInfoObject, DomainDesignInfo, DomainDesignInfoType, CustomInfo, DomainDesignOptions, DomainObjectSet, DomainDesignObject } from './
|
|
1
|
+
import { NonEmptyArray, DomainDesignAgg, DomainDesignAggProvider, DomainDesignCommand, DomainDesignCommandProvider, DomainDesignNoteProvider, DomainDesignEvent, DomainDesignEventProvider, DomainDesignFacadeCommand, DomainDesignFacadeCommandProvider, DomainDesignInfoProvider, DomainDesignActor, DomainDesignActorProvider, DomainDesignPolicy, DomainDesignPolicyProvider, DomainDesignService, DomainDesignServiceProvider, DomainDesignSystem, DomainDesignSystemProvider, DomainDesignReadModel, DomainDesignReadModelProvider, CustomInfoArrayToInfoObject, DomainDesignInfo, DomainDesignInfoType, CustomInfo, DomainDesignOptions, DomainObjectSet, DomainDesignObject } from './types';
|
|
2
2
|
export type LinkType = 'Association' | 'Dependency' | 'Aggregation' | 'Composition';
|
|
3
3
|
type Rule = 'Info' | 'Actor' | 'Command' | 'FacadeCommand' | 'Agg' | 'Event' | 'Policy' | 'Service' | 'System' | 'ReadModel';
|
|
4
4
|
export declare function genId(): string;
|
|
@@ -17,7 +17,6 @@ type ContextInitializer = () => {
|
|
|
17
17
|
createSystem: DomainDesignSystemProvider;
|
|
18
18
|
createReadModel: DomainDesignReadModelProvider;
|
|
19
19
|
};
|
|
20
|
-
export declare function defaultOptions(): Required<DomainDesignOptions>;
|
|
21
20
|
export type DomainDesignInternalContext = ReturnType<typeof createInternalContext>;
|
|
22
21
|
declare function createInternalContext(initFn: ContextInitializer): {
|
|
23
22
|
startWorkflow(name: string): string;
|
|
@@ -59,12 +58,12 @@ declare function createInternalContext(initFn: ContextInitializer): {
|
|
|
59
58
|
}>(obj: OBJ): string;
|
|
60
59
|
createNote: DomainDesignNoteProvider;
|
|
61
60
|
info: {
|
|
62
|
-
document<NAME extends string>(name: NAME, note?: string | import("./
|
|
63
|
-
func<NAME extends string>(name: NAME, note?: string | import("./
|
|
64
|
-
func<NAME extends string>(name: NAME, dependsOn: NonEmptyArray<import("./
|
|
65
|
-
id<NAME extends string>(name: NAME, note?: string | import("./
|
|
66
|
-
valueObj<NAME extends string>(name: NAME, note?: string | import("./
|
|
67
|
-
version<NAME extends string>(name: NAME, note?: string | import("./
|
|
61
|
+
document<NAME extends string>(name: NAME, note?: string | import("./types").DomainDesignNote): DomainDesignInfo<"Document", NAME>;
|
|
62
|
+
func<NAME extends string>(name: NAME, note?: string | import("./types").DomainDesignNote): DomainDesignInfo<"Function", NAME>;
|
|
63
|
+
func<NAME extends string>(name: NAME, dependsOn: NonEmptyArray<import("./types").DomainDesignInfoFuncDependsOn | string | [string, string | import("./types").DomainDesignNote]>, note?: string | import("./types").DomainDesignNote): DomainDesignInfo<"Function", NAME>;
|
|
64
|
+
id<NAME extends string>(name: NAME, note?: string | import("./types").DomainDesignNote): DomainDesignInfo<"Id", NAME>;
|
|
65
|
+
valueObj<NAME extends string>(name: NAME, note?: string | import("./types").DomainDesignNote): DomainDesignInfo<"ValueObject", NAME>;
|
|
66
|
+
version<NAME extends string>(name: NAME, note?: string | import("./types").DomainDesignNote): DomainDesignInfo<"Version", NAME>;
|
|
68
67
|
};
|
|
69
68
|
createPersion: DomainDesignActorProvider;
|
|
70
69
|
createCommand: DomainDesignCommandProvider;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignEventProvider } from './
|
|
1
|
+
import { DomainDesignEventProvider } from './types';
|
|
2
2
|
export declare function eventProvider(designId: string): DomainDesignEventProvider;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DomainDesigner, DomainDesignOptions } from './
|
|
1
|
+
import { DomainDesigner, DomainDesignOptions } from './types';
|
|
2
|
+
export declare function defaultOptions(): Required<DomainDesignOptions>;
|
|
2
3
|
export declare function createDomainDesigner(opts?: DomainDesignOptions): DomainDesigner;
|
|
3
|
-
export { type DomainDesigner, type DomainDesignAgg, type DomainDesignCommand, type DomainDesignFacadeCommand, type DomainDesignNote, type DomainDesignEvent, type DomainDesignInfo, type DomainDesignInfoType, type DomainDesignActor, type DomainDesignSystem, type DomainDesignService, type DomainDesignPolicy, type DomainDesignInfoRecord, type DomainDesignReadModel, type DomainDesignObject, isDomainDesignInfo, isDomainDesignInfoFunc, isDomainDesignActor, isDomainDesignAgg, isDomainDesignCommand, isDomainDesignFacadeCommand, isDomainDesignEvent, isDomainDesignPolicy, isDomainDesignReadModel, isDomainDesignService, isDomainDesignSystem, isDomainDesigner, } from './
|
|
4
|
-
export { defaultOptions } from './common';
|
|
4
|
+
export { type DomainDesigner, type DomainDesignAgg, type DomainDesignCommand, type DomainDesignFacadeCommand, type DomainDesignNote, type DomainDesignEvent, type DomainDesignInfo, type DomainDesignInfoType, type DomainDesignActor, type DomainDesignSystem, type DomainDesignService, type DomainDesignPolicy, type DomainDesignInfoRecord, type DomainDesignReadModel, type DomainDesignObject, DomainDesignRule, isDomainDesignInfo, isDomainDesignInfoFunc, isDomainDesignActor, isDomainDesignAgg, isDomainDesignCommand, isDomainDesignFacadeCommand, isDomainDesignEvent, isDomainDesignPolicy, isDomainDesignReadModel, isDomainDesignService, isDomainDesignSystem, isDomainDesigner, } from './types';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { DomainDesignInfoProvider } from './
|
|
1
|
+
import type { DomainDesignInfoProvider } from './types';
|
|
2
2
|
export declare function createInfoProvider(designId: string): DomainDesignInfoProvider;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignNoteProvider } from './
|
|
1
|
+
import { DomainDesignNoteProvider } from './types';
|
|
2
2
|
export declare function createNoteProvider(_designCode: string): DomainDesignNoteProvider;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignPolicyProvider } from './
|
|
1
|
+
import { DomainDesignPolicyProvider } from './types';
|
|
2
2
|
export declare function createPolicyProvider(designId: string): DomainDesignPolicyProvider;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignReadModelProvider } from './
|
|
1
|
+
import { DomainDesignReadModelProvider } from './types';
|
|
2
2
|
export declare function createReadModelProvider(designId: string): DomainDesignReadModelProvider;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignServiceProvider } from './
|
|
1
|
+
import { DomainDesignServiceProvider } from './types';
|
|
2
2
|
export declare function createServiceProvider(designId: string): DomainDesignServiceProvider;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DomainDesignSystemProvider } from './
|
|
1
|
+
import { DomainDesignSystemProvider } from './types';
|
|
2
2
|
export declare function createSystemProvider(designId: string): DomainDesignSystemProvider;
|
|
@@ -6,7 +6,20 @@ export declare class DomainObjectSet<T extends DomainDesignObject> implements It
|
|
|
6
6
|
delete(item: T): boolean;
|
|
7
7
|
[Symbol.iterator](): Iterator<T>;
|
|
8
8
|
}
|
|
9
|
-
export
|
|
9
|
+
export declare const DomainDesignRule: Readonly<{
|
|
10
|
+
Note: "Note";
|
|
11
|
+
Info: "Info";
|
|
12
|
+
Actor: "Actor";
|
|
13
|
+
Command: "Command";
|
|
14
|
+
FacadeCommand: "FacadeCommand";
|
|
15
|
+
Event: "Event";
|
|
16
|
+
Agg: "Agg";
|
|
17
|
+
System: "System";
|
|
18
|
+
Policy: "Policy";
|
|
19
|
+
Service: "Service";
|
|
20
|
+
ReadModel: "ReadModel";
|
|
21
|
+
}>;
|
|
22
|
+
export type DomainDesignRule = Enum<typeof DomainDesignRule>;
|
|
10
23
|
export interface DomainDesignObject {
|
|
11
24
|
readonly _attributes: {
|
|
12
25
|
readonly rule: DomainDesignRule;
|
|
@@ -68,11 +81,11 @@ export interface DomainDesignActor extends DomainDesignObject {
|
|
|
68
81
|
readonly note?: DomainDesignNote;
|
|
69
82
|
};
|
|
70
83
|
command<COMMAND extends DomainDesignCommand<any>>(command: COMMAND): COMMAND;
|
|
71
|
-
command<G_NAME extends string, ARR extends NonEmptyArray<
|
|
84
|
+
command<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR, note?: string | DomainDesignNote): DomainDesignCommand<CustomInfoArrayToInfoObject<ARR>>;
|
|
72
85
|
facadeCmd<FACADECMD extends DomainDesignFacadeCommand<any>>(command: FACADECMD): FACADECMD;
|
|
73
|
-
facadeCmd<G_NAME extends string, ARR extends NonEmptyArray<
|
|
86
|
+
facadeCmd<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR, note?: string | DomainDesignNote): DomainDesignFacadeCommand<CustomInfoArrayToInfoObject<ARR>>;
|
|
74
87
|
readModel<READ_MODEL extends DomainDesignReadModel<any>>(readModel: READ_MODEL): READ_MODEL;
|
|
75
|
-
readModel<G_NAME extends string, ARR extends NonEmptyArray<
|
|
88
|
+
readModel<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR | NonEmptyInitFunc<() => ARR>): DomainDesignReadModel<CustomInfoArrayToInfoObject<ARR>>;
|
|
76
89
|
toFormat(): string;
|
|
77
90
|
}
|
|
78
91
|
export type DomainDesignCommandProvider = {
|
|
@@ -155,6 +168,10 @@ export interface DomainDesignPolicy extends DomainDesignObject {
|
|
|
155
168
|
readonly name: string;
|
|
156
169
|
readonly note?: DomainDesignNote;
|
|
157
170
|
};
|
|
171
|
+
command<COMMAND extends DomainDesignCommand<any>>(command: COMMAND): COMMAND;
|
|
172
|
+
command<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR, note?: string | DomainDesignNote): DomainDesignCommand<CustomInfoArrayToInfoObject<ARR>>;
|
|
173
|
+
facadeCmd<FACADECMD extends DomainDesignFacadeCommand<any>>(command: FACADECMD): FACADECMD;
|
|
174
|
+
facadeCmd<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR, note?: string | DomainDesignNote): DomainDesignFacadeCommand<CustomInfoArrayToInfoObject<ARR>>;
|
|
158
175
|
service(service: DomainDesignService): DomainDesignService;
|
|
159
176
|
service(name: string, note?: string | DomainDesignNote): DomainDesignService;
|
|
160
177
|
toFormat(): string;
|
|
@@ -173,6 +190,8 @@ export interface DomainDesignSystem extends DomainDesignObject {
|
|
|
173
190
|
command<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR, note?: string | DomainDesignNote): DomainDesignCommand<CustomInfoArrayToInfoObject<ARR>>;
|
|
174
191
|
facadeCmd<FACADECMD extends DomainDesignFacadeCommand<any>>(facadeCmd: FACADECMD): FACADECMD;
|
|
175
192
|
facadeCmd<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR, note?: string | DomainDesignNote): DomainDesignFacadeCommand<CustomInfoArrayToInfoObject<ARR>>;
|
|
193
|
+
event<EVENT extends DomainDesignEvent<any>>(event: EVENT): EVENT;
|
|
194
|
+
event<G_NAME extends string, ARR extends NonEmptyArray<CustomInfo<G_NAME>>>(name: string, infos: ARR, note?: string | DomainDesignNote): DomainDesignEvent<CustomInfoArrayToInfoObject<ARR>>;
|
|
176
195
|
toFormat(): string;
|
|
177
196
|
}
|
|
178
197
|
export type DomainDesignServiceProvider = (name: string, note?: string | DomainDesignNote) => DomainDesignService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1
|
|
1
|
+
0.3.1
|