@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.
Files changed (107) hide show
  1. package/README.md +12 -20
  2. package/bin/domain-designer-cli.cjs +19148 -18666
  3. package/package.json +42 -23
  4. package/packages/core/dist/README.md +43 -0
  5. package/packages/core/dist/actor.d.ts +2 -0
  6. package/packages/core/dist/agg.d.ts +2 -0
  7. package/packages/core/dist/command.d.ts +3 -0
  8. package/packages/core/dist/common.d.ts +158 -0
  9. package/packages/core/dist/event.d.ts +2 -0
  10. package/packages/core/dist/index.d.ts +33 -0
  11. package/packages/core/dist/index.js +1980 -0
  12. package/packages/core/dist/info.d.ts +2 -0
  13. package/packages/core/dist/note.d.ts +2 -0
  14. package/packages/core/dist/package.json +21 -0
  15. package/packages/core/dist/policy.d.ts +2 -0
  16. package/packages/core/dist/read-model.d.ts +2 -0
  17. package/packages/core/dist/service.d.ts +2 -0
  18. package/packages/core/dist/system.d.ts +2 -0
  19. package/packages/core/dist/types.d.ts +558 -0
  20. package/packages/playground/.env +1 -0
  21. package/packages/playground/node_modules/.vite/deps/_metadata.json +34 -0
  22. package/packages/playground/node_modules/.vite/deps/chunk-F4TQRHS6.js +2147 -0
  23. package/packages/playground/node_modules/.vite/deps/chunk-F4TQRHS6.js.map +7 -0
  24. package/packages/playground/node_modules/.vite/deps/chunk-MFAKUPMY.js +12787 -0
  25. package/packages/playground/node_modules/.vite/deps/chunk-MFAKUPMY.js.map +7 -0
  26. package/packages/playground/node_modules/.vite/deps/package.json +3 -0
  27. package/packages/playground/node_modules/.vite/deps/primevue_button.js +1215 -0
  28. package/packages/playground/node_modules/.vite/deps/primevue_button.js.map +7 -0
  29. package/packages/playground/node_modules/.vite/deps/primevue_dock.js +1236 -0
  30. package/packages/playground/node_modules/.vite/deps/primevue_dock.js.map +7 -0
  31. package/packages/playground/node_modules/.vite/deps/vue.js +346 -0
  32. package/packages/playground/node_modules/.vite/deps/vue.js.map +7 -0
  33. package/packages/playground/node_modules/.vue-global-types/vue_3.5_0.d.ts +136 -0
  34. package/packages/playground/package.json +19 -0
  35. package/{src → packages/playground/src}/App.vue +12 -12
  36. package/{src → packages/playground/src}/main.ts +27 -27
  37. package/{src → packages/playground/src}/views/Index.vue +16 -16
  38. package/packages/playground/src/views/complex-example-detail/book.ts +383 -0
  39. package/packages/playground/src/views/complex-example-detail/common.ts +4 -0
  40. package/packages/playground/src/views/complex-example-detail/user.ts +66 -0
  41. package/packages/playground/src/views/complex-example.ts +4 -0
  42. package/{src → packages/playground/src}/views/design-en.ts +110 -99
  43. package/{src → packages/playground/src}/views/design-zh.ts +97 -91
  44. package/packages/playground/src/views/index.ts +19 -0
  45. package/packages/playground/src/views/simple-example.ts +103 -0
  46. package/packages/playground/tsconfig.json +32 -0
  47. package/packages/playground/vite-env.d.ts +12 -0
  48. package/packages/playground/vite.config.ts +22 -0
  49. package/packages/ui-component/dist/LICENSE +201 -0
  50. package/packages/ui-component/dist/README.md +5 -0
  51. package/packages/ui-component/dist/UI.vue.d.ts +29 -0
  52. package/packages/ui-component/dist/common.d.ts +9 -0
  53. package/packages/ui-component/dist/components/drag-zoom/Index.vue.d.ts +37 -0
  54. package/packages/ui-component/dist/components/node-info/Index.vue.d.ts +29 -0
  55. package/packages/ui-component/dist/components/nomnoml/Index.vue.d.ts +24 -0
  56. package/packages/ui-component/dist/components/nomnoml/base-style.d.ts +2 -0
  57. package/packages/ui-component/dist/components/nomnoml/preprocess.d.ts +5 -0
  58. package/packages/ui-component/dist/components/story-bar/Index.vue.d.ts +28 -0
  59. package/packages/ui-component/dist/components/tool-bar/Index.vue.d.ts +29 -0
  60. package/packages/ui-component/dist/domain/common.d.ts +27 -0
  61. package/packages/ui-component/dist/domain/diagram-agg/gen-code.d.ts +64 -0
  62. package/packages/ui-component/dist/domain/diagram-agg/index.d.ts +8554 -0
  63. package/packages/ui-component/dist/domain/diagram-agg/plugins.d.ts +80 -0
  64. package/packages/ui-component/dist/domain/diagram-agg/types.d.ts +20 -0
  65. package/packages/ui-component/dist/domain/i18n-agg/index.d.ts +25 -0
  66. package/packages/ui-component/dist/domain/i18n-agg/locale/en-US.d.ts +3 -0
  67. package/packages/ui-component/dist/domain/i18n-agg/locale/zh-CN.d.ts +3 -0
  68. package/packages/ui-component/dist/domain/i18n-agg/message.d.ts +42 -0
  69. package/packages/ui-component/dist/domain/mount-plugin.d.ts +1 -0
  70. package/packages/ui-component/dist/favicon.ico +0 -0
  71. package/packages/ui-component/dist/index.css +144 -0
  72. package/packages/ui-component/dist/index.d.ts +6 -0
  73. package/packages/ui-component/dist/index.js +19776 -0
  74. package/packages/ui-component/dist/package.json +28 -0
  75. package/packages/ui-component/dist/ui.d.ts +8 -0
  76. package/scripts/ai-assist-worker.cjs +7123 -0
  77. package/scripts/sync-version.mjs +22 -0
  78. package/templates/CLAUDE.md +276 -0
  79. package/templates/README.md +97 -0
  80. package/templates/complex-example-detail/book.ts +383 -0
  81. package/templates/complex-example-detail/common.ts +4 -0
  82. package/templates/complex-example-detail/user.ts +66 -0
  83. package/templates/complex-example.ts +4 -0
  84. package/templates/node_modules/@ddd-tool/domain-designer-core/actor.d.ts +1 -1
  85. package/templates/node_modules/@ddd-tool/domain-designer-core/agg.d.ts +1 -1
  86. package/templates/node_modules/@ddd-tool/domain-designer-core/command.d.ts +1 -1
  87. package/templates/node_modules/@ddd-tool/domain-designer-core/common.d.ts +7 -8
  88. package/templates/node_modules/@ddd-tool/domain-designer-core/event.d.ts +1 -1
  89. package/templates/node_modules/@ddd-tool/domain-designer-core/index.d.ts +3 -3
  90. package/templates/node_modules/@ddd-tool/domain-designer-core/info.d.ts +1 -1
  91. package/templates/node_modules/@ddd-tool/domain-designer-core/note.d.ts +1 -1
  92. package/templates/node_modules/@ddd-tool/domain-designer-core/policy.d.ts +1 -1
  93. package/templates/node_modules/@ddd-tool/domain-designer-core/read-model.d.ts +1 -1
  94. package/templates/node_modules/@ddd-tool/domain-designer-core/service.d.ts +1 -1
  95. package/templates/node_modules/@ddd-tool/domain-designer-core/system.d.ts +1 -1
  96. package/templates/node_modules/@ddd-tool/domain-designer-core/{define.d.ts → types.d.ts} +23 -4
  97. package/templates/node_modules/version.txt +1 -1
  98. package/templates/simple-example.ts +103 -0
  99. package/tsconfig.json +19 -6
  100. package/scripts/sync-ver.mjs +0 -0
  101. package/src/views/index.ts +0 -15
  102. package/templates/example-agg.ts +0 -31
  103. package/templates/example.ts +0 -91
  104. package/vite.config.ts +0 -16
  105. /package/{index.html → packages/playground/index.html} +0 -0
  106. /package/{src → packages/playground/src}/assets/logo.svg +0 -0
  107. /package/{src → packages/playground/src}/assets/main.css +0 -0
@@ -0,0 +1,136 @@
1
+ // @ts-nocheck
2
+ export {};
3
+
4
+ ; declare global {
5
+ const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any };
6
+ const __VLS_unref: typeof import('vue').unref;
7
+ const __VLS_placeholder: any;
8
+ const __VLS_intrinsics: import('vue/jsx-runtime').JSX.IntrinsicElements;
9
+
10
+ type __VLS_Elements = __VLS_SpreadMerge<SVGElementTagNameMap, HTMLElementTagNameMap>;
11
+ type __VLS_GlobalComponents = import('vue').GlobalComponents;
12
+ type __VLS_GlobalDirectives = import('vue').GlobalDirectives;
13
+ type __VLS_IsAny<T> = 0 extends 1 & T ? true : false;
14
+ type __VLS_PickNotAny<A, B> = __VLS_IsAny<A> extends true ? B : A;
15
+ type __VLS_SpreadMerge<A, B> = Omit<A, keyof B> & B;
16
+ type __VLS_WithComponent<N0 extends string, LocalComponents, Self, N1 extends string, N2 extends string, N3 extends string> =
17
+ N1 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N1] } :
18
+ N2 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N2] } :
19
+ N3 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N3] } :
20
+ Self extends object ? { [K in N0]: Self } :
21
+ N1 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N1] } :
22
+ N2 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N2] } :
23
+ N3 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N3] } :
24
+ {};
25
+ type __VLS_FunctionalComponentCtx<T, K> = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny<K, {}>
26
+ ? K extends { __ctx?: infer Ctx } ? NonNullable<Ctx> : never : any
27
+ , T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
28
+ >;
29
+ type __VLS_FunctionalComponentProps<T, K> = '__ctx' extends keyof __VLS_PickNotAny<K, {}>
30
+ ? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
31
+ : T extends (props: infer P, ...args: any) => any ? P
32
+ : {};
33
+ type __VLS_FunctionalComponent<T> = (props: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>, ctx?: any) => import('vue/jsx-runtime').JSX.Element & {
34
+ __ctx?: {
35
+ attrs?: any;
36
+ slots?: T extends { $slots: infer Slots } ? Slots : Record<string, any>;
37
+ emit?: T extends { $emit: infer Emit } ? Emit : {};
38
+ props?: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>;
39
+ expose?: (exposed: T) => void;
40
+ };
41
+ };
42
+ type __VLS_IsFunction<T, K> = K extends keyof T
43
+ ? __VLS_IsAny<T[K]> extends false
44
+ ? unknown extends T[K]
45
+ ? false
46
+ : true
47
+ : false
48
+ : false;
49
+ type __VLS_NormalizeComponentEvent<
50
+ Props,
51
+ Emits,
52
+ onEvent extends keyof Props,
53
+ Event extends keyof Emits,
54
+ CamelizedEvent extends keyof Emits,
55
+ > = __VLS_IsFunction<Props, onEvent> extends true
56
+ ? Props
57
+ : __VLS_IsFunction<Emits, Event> extends true
58
+ ? { [K in onEvent]?: Emits[Event] }
59
+ : __VLS_IsFunction<Emits, CamelizedEvent> extends true
60
+ ? { [K in onEvent]?: Emits[CamelizedEvent] }
61
+ : Props;
62
+ // fix https://github.com/vuejs/language-tools/issues/926
63
+ type __VLS_UnionToIntersection<U> = (U extends unknown ? (arg: U) => unknown : never) extends ((arg: infer P) => unknown) ? P : never;
64
+ type __VLS_OverloadUnionInner<T, U = unknown> = U & T extends (...args: infer A) => infer R
65
+ ? U extends T
66
+ ? never
67
+ : __VLS_OverloadUnionInner<T, Pick<T, keyof T> & U & ((...args: A) => R)> | ((...args: A) => R)
68
+ : never;
69
+ type __VLS_OverloadUnion<T> = Exclude<
70
+ __VLS_OverloadUnionInner<(() => never) & T>,
71
+ T extends () => never ? never : () => never
72
+ >;
73
+ type __VLS_ConstructorOverloads<T> = __VLS_OverloadUnion<T> extends infer F
74
+ ? F extends (event: infer E, ...args: infer A) => any
75
+ ? { [K in E & string]: (...args: A) => void; }
76
+ : never
77
+ : never;
78
+ type __VLS_NormalizeEmits<T> = __VLS_PrettifyGlobal<
79
+ __VLS_UnionToIntersection<
80
+ __VLS_ConstructorOverloads<T> & {
81
+ [K in keyof T]: T[K] extends any[] ? { (...args: T[K]): void } : never
82
+ }
83
+ >
84
+ >;
85
+ type __VLS_EmitsToProps<T> = __VLS_PrettifyGlobal<{
86
+ [K in string & keyof T as `on${Capitalize<K>}`]?:
87
+ (...args: T[K] extends (...args: infer P) => any ? P : T[K] extends null ? any[] : never) => any;
88
+ }>;
89
+ type __VLS_ResolveEmits<
90
+ Comp,
91
+ Emits,
92
+ TypeEmits = {},
93
+ NormalizedEmits = __VLS_NormalizeEmits<Emits> extends infer E ? string extends keyof E ? {} : E : never,
94
+ > = __VLS_SpreadMerge<NormalizedEmits, TypeEmits>;
95
+ type __VLS_ResolveDirectives<T> = {
96
+ [K in keyof T & string as `v${Capitalize<K>}`]: T[K];
97
+ };
98
+ type __VLS_PrettifyGlobal<T> = { [K in keyof T as K]: T[K]; } & {};
99
+ type __VLS_WithDefaultsGlobal<P, D> = {
100
+ [K in keyof P as K extends keyof D ? K : never]-?: P[K];
101
+ } & {
102
+ [K in keyof P as K extends keyof D ? never : K]: P[K];
103
+ };
104
+ type __VLS_UseTemplateRef<T> = Readonly<import('vue').ShallowRef<T | null>>;
105
+ type __VLS_ProxyRefs<T> = import('vue').ShallowUnwrapRef<T>;
106
+
107
+ function __VLS_getVForSourceType<T extends number | string | any[] | Iterable<any>>(source: T): [
108
+ item: T extends number ? number
109
+ : T extends string ? string
110
+ : T extends any[] ? T[number]
111
+ : T extends Iterable<infer T1> ? T1
112
+ : any,
113
+ index: number,
114
+ ][];
115
+ function __VLS_getVForSourceType<T>(source: T): [
116
+ item: T[keyof T],
117
+ key: keyof T,
118
+ index: number,
119
+ ][];
120
+ function __VLS_getSlotParameters<S, D extends S>(slot: S, decl?: D):
121
+ D extends (...args: infer P) => any ? P : any[];
122
+ function __VLS_asFunctionalDirective<T>(dir: T): T extends import('vue').ObjectDirective
123
+ ? NonNullable<T['created' | 'beforeMount' | 'mounted' | 'beforeUpdate' | 'updated' | 'beforeUnmount' | 'unmounted']>
124
+ : T extends (...args: any) => any
125
+ ? T
126
+ : (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void;
127
+ function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
128
+ T extends new (...args: any) => any ? __VLS_FunctionalComponent<K>
129
+ : T extends () => any ? (props: {}, ctx?: any) => ReturnType<T>
130
+ : T extends (...args: any) => any ? T
131
+ : __VLS_FunctionalComponent<{}>;
132
+ function __VLS_functionalComponentArgsRest<T extends (...args: any) => any>(t: T): 2 extends Parameters<T>['length'] ? [any] : [];
133
+ function __VLS_asFunctionalElement<T>(tag: T, endTag?: T): (attrs: T & Record<string, unknown>) => void;
134
+ function __VLS_asFunctionalSlot<S>(slot: S): S extends () => infer R ? (props: {}) => R : NonNullable<S>;
135
+ function __VLS_tryAsConstant<const T>(t: T): T;
136
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "playground",
3
+ "version": "0.3.1",
4
+ "private": true,
5
+ "description": "",
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "vite",
9
+ "test": "exit 0",
10
+ "build": "exit 0",
11
+ "verify": "vue-tsc -p ./tsconfig.json"
12
+ },
13
+ "devDependencies": {
14
+ "@primeuix/themes": "^2.0.3",
15
+ "primeicons": "^7.0.0",
16
+ "primevue": "^4.5.4",
17
+ "vue": "^3.5.27"
18
+ }
19
+ }
@@ -1,12 +1,12 @@
1
- <script setup lang="ts">
2
- import Index from './views/Index.vue'
3
- </script>
4
-
5
- <template>
6
- <Suspense>
7
- <Index />
8
- <template #fallback>
9
- <h1>Loading...</h1>
10
- </template>
11
- </Suspense>
12
- </template>
1
+ <script setup lang="ts">
2
+ import Index from './views/Index.vue'
3
+ </script>
4
+
5
+ <template>
6
+ <Suspense>
7
+ <Index />
8
+ <template #fallback>
9
+ <h1>Loading...</h1>
10
+ </template>
11
+ </Suspense>
12
+ </template>
@@ -1,27 +1,27 @@
1
- import './assets/main.css'
2
- import 'primeicons/primeicons.css'
3
-
4
- import { createApp } from 'vue'
5
- import App from './App.vue'
6
- import { PrimeVue, Aura, Tooltip } from '@ddd-tool/domain-designer-ui-component'
7
-
8
- import Button from 'primevue/button'
9
- import Dock from 'primevue/dock'
10
-
11
- const app = createApp(App)
12
-
13
- app.use(PrimeVue, {
14
- theme: {
15
- preset: Aura,
16
- options: {
17
- prefix: 'p',
18
- darkModeSelector: 'light',
19
- cssLayer: true,
20
- },
21
- },
22
- })
23
- app.component('Button', Button)
24
- app.component('Dock', Dock)
25
- app.directive('tooltip', Tooltip)
26
-
27
- app.mount('#app')
1
+ import './assets/main.css'
2
+ import 'primeicons/primeicons.css'
3
+
4
+ import { createApp } from 'vue'
5
+ import App from './App.vue'
6
+ import { PrimeVue, Aura, Tooltip } from '@ddd-tool/domain-designer-ui-component'
7
+
8
+ import Button from 'primevue/button'
9
+ import Dock from 'primevue/dock'
10
+
11
+ const app = createApp(App)
12
+
13
+ app.use(PrimeVue, {
14
+ theme: {
15
+ preset: Aura,
16
+ options: {
17
+ prefix: 'p',
18
+ darkModeSelector: 'light',
19
+ cssLayer: true,
20
+ },
21
+ },
22
+ })
23
+ app.component('Button', Button)
24
+ app.component('Dock', Dock)
25
+ app.directive('tooltip', Tooltip)
26
+
27
+ app.mount('#app')
@@ -1,16 +1,16 @@
1
- <script setup lang="ts">
2
- import { Ui } from '@ddd-tool/domain-designer-ui-component'
3
- import '@ddd-tool/domain-designer-ui-component/index.css'
4
- import { ref } from 'vue'
5
- import data from './index'
6
- import type { DomainDesigner } from '@ddd-tool/domain-designer-core'
7
-
8
- const designs = ref<Record<string, DomainDesigner>>(data)
9
- // designs.value = {
10
- // user: (await import('F:/idea_projects/oneboot/.sdk/uml/demo/user')).default,
11
- // }
12
- </script>
13
-
14
- <template>
15
- <Ui :designs="designs" />
16
- </template>
1
+ <script setup lang="ts">
2
+ import { Ui } from '@ddd-tool/domain-designer-ui-component'
3
+ import '../../../ui-component/dist/index.css'
4
+ import { ref } from 'vue'
5
+ import data from './index'
6
+ import type { DomainDesigner } from '@ddd-tool/domain-designer-core'
7
+
8
+ const designs = ref<Record<string, DomainDesigner>>(data)
9
+ // designs.value = {
10
+ // user: (await import('F:/idea_projects/oneboot/.sdk/uml/demo/user')).default,
11
+ // }
12
+ </script>
13
+
14
+ <template>
15
+ <Ui :designs="designs" />
16
+ </template>
@@ -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,4 @@
1
+ import { createDomainDesigner } from '@ddd-tool/domain-designer-core'
2
+
3
+ export const d = createDomainDesigner({ moduleName: 'library' })
4
+ export const i = d.info