retold-harness 1.1.6 → 1.1.8
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/docs/_cover.md +1 -1
- package/docs/_version.json +7 -0
- package/docs/css/docuserve.css +277 -23
- package/docs/entities.md +28 -28
- package/docs/index.html +2 -2
- package/docs/retold-catalog.json +1 -18
- package/docs/retold-keyword-index.json +1 -1
- package/package.json +7 -6
- package/source/schemas/bookstore/BookStore.ddl +77 -0
- package/source/schemas/bookstore/MeadowModel-Extended.json +2984 -242
- package/source/schemas/bookstore/MeadowModel-PICT.json +1 -1
- package/source/schemas/bookstore/MeadowModel.json +165 -257
- package/source/schemas/bookstore/Schema.json +2643 -3769
- package/source/web/harness_app.js +24 -7
package/docs/_cover.md
CHANGED
package/docs/css/docuserve.css
CHANGED
|
@@ -1,73 +1,327 @@
|
|
|
1
1
|
/* ============================================================================
|
|
2
|
-
Pict Docuserve - Base Styles
|
|
2
|
+
Pict Docuserve - Base Styles & Theme Variables
|
|
3
3
|
============================================================================ */
|
|
4
4
|
|
|
5
|
-
/*
|
|
6
|
-
|
|
5
|
+
/* ----------------------------------------------------------------------------
|
|
6
|
+
Theme variables — light defaults on :root.
|
|
7
|
+
Dark mode applies when either:
|
|
8
|
+
(a) the user explicitly selected dark via <html data-theme="dark">
|
|
9
|
+
(b) the user hasn't chosen anything AND the system prefers dark
|
|
10
|
+
An explicit <html data-theme="light"> pins the light palette regardless.
|
|
11
|
+
---------------------------------------------------------------------------- */
|
|
12
|
+
|
|
13
|
+
:root
|
|
14
|
+
{
|
|
15
|
+
/* Surfaces */
|
|
16
|
+
--docuserve-bg: #FDFBF7;
|
|
17
|
+
--docuserve-bg-elevated: #FFFFFF;
|
|
18
|
+
--docuserve-border: #DDD6CA;
|
|
19
|
+
--docuserve-border-soft: #EAE3D8;
|
|
20
|
+
|
|
21
|
+
/* Text */
|
|
22
|
+
--docuserve-text: #2A241E;
|
|
23
|
+
--docuserve-text-strong: #3D3229;
|
|
24
|
+
--docuserve-text-muted: #5E5549;
|
|
25
|
+
--docuserve-text-dim: #8A7F72;
|
|
26
|
+
|
|
27
|
+
/* Accent / links */
|
|
28
|
+
--docuserve-accent: #2E7D74;
|
|
29
|
+
--docuserve-accent-hover: #236660;
|
|
30
|
+
|
|
31
|
+
/* Top bar */
|
|
32
|
+
--docuserve-topbar-bg: #3D3229;
|
|
33
|
+
--docuserve-topbar-text: #E8E0D4;
|
|
34
|
+
--docuserve-topbar-text-muted: #B5AA9A;
|
|
35
|
+
--docuserve-topbar-text-dim: #8A7F72;
|
|
36
|
+
--docuserve-topbar-hover-bg: #524438;
|
|
37
|
+
--docuserve-topbar-version-bg: rgba(255, 255, 255, 0.06);
|
|
38
|
+
--docuserve-topbar-version-border: rgba(255, 255, 255, 0.08);
|
|
39
|
+
--docuserve-topbar-version-text: #B5AA9A;
|
|
40
|
+
|
|
41
|
+
/* Sidebar */
|
|
42
|
+
--docuserve-sidebar-bg: #FAF7F1;
|
|
43
|
+
--docuserve-sidebar-border: #DDD6CA;
|
|
44
|
+
--docuserve-sidebar-border-soft: #E5DED1;
|
|
45
|
+
--docuserve-sidebar-text: #423D37;
|
|
46
|
+
--docuserve-sidebar-group-title: #3D3229;
|
|
47
|
+
--docuserve-sidebar-module-text: #5E5549;
|
|
48
|
+
--docuserve-sidebar-hover-bg: #EAE3D8;
|
|
49
|
+
--docuserve-sidebar-hover-text: #2E7D74;
|
|
50
|
+
--docuserve-sidebar-active-bg: #E5DED1;
|
|
51
|
+
--docuserve-sidebar-active-text: #2E7D74;
|
|
52
|
+
--docuserve-sidebar-search-bg: #FFFFFF;
|
|
53
|
+
--docuserve-sidebar-search-border: #DDD6CA;
|
|
54
|
+
|
|
55
|
+
/* Inline code */
|
|
56
|
+
--docuserve-inline-code-bg: #F0ECE4;
|
|
57
|
+
--docuserve-inline-code-text: #9E3A50;
|
|
58
|
+
|
|
59
|
+
/* Code block panel */
|
|
60
|
+
--docuserve-code-bg: #F6F3EE;
|
|
61
|
+
--docuserve-code-border: #E5DED1;
|
|
62
|
+
--docuserve-code-gutter-bg: #EFEAE0;
|
|
63
|
+
--docuserve-code-gutter-border: #DDD6CA;
|
|
64
|
+
--docuserve-code-gutter-text: #A59986;
|
|
65
|
+
--docuserve-code-text: #2A241E;
|
|
66
|
+
|
|
67
|
+
/* Syntax tokens — low-chroma dark-on-light palette */
|
|
68
|
+
--docuserve-tok-keyword: #A03472;
|
|
69
|
+
--docuserve-tok-string: #1A6640;
|
|
70
|
+
--docuserve-tok-number: #B25A00;
|
|
71
|
+
--docuserve-tok-comment: #8A7F72;
|
|
72
|
+
--docuserve-tok-operator: #2E7D74;
|
|
73
|
+
--docuserve-tok-punctuation: #2A241E;
|
|
74
|
+
--docuserve-tok-function: #2A5DB0;
|
|
75
|
+
--docuserve-tok-property: #9E3A50;
|
|
76
|
+
--docuserve-tok-tag: #9E3A50;
|
|
77
|
+
--docuserve-tok-attr-name: #B25A00;
|
|
78
|
+
--docuserve-tok-attr-value: #1A6640;
|
|
79
|
+
|
|
80
|
+
/* Tables, blockquotes, mermaid */
|
|
81
|
+
--docuserve-table-header-bg: #F5F0E8;
|
|
82
|
+
--docuserve-table-row-alt-bg: #F9F6F0;
|
|
83
|
+
--docuserve-blockquote-bg: #F7F5F0;
|
|
84
|
+
--docuserve-blockquote-border: #2E7D74;
|
|
85
|
+
--docuserve-blockquote-text: #5E5549;
|
|
86
|
+
--docuserve-mermaid-bg: #FFFFFF;
|
|
87
|
+
|
|
88
|
+
/* Scrollbars */
|
|
89
|
+
--docuserve-scrollbar-track: #F5F0E8;
|
|
90
|
+
--docuserve-scrollbar-thumb: #D4CCBE;
|
|
91
|
+
--docuserve-scrollbar-thumb-hover: #B5AA9A;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@media (prefers-color-scheme: dark)
|
|
95
|
+
{
|
|
96
|
+
:root:not([data-theme="light"])
|
|
97
|
+
{
|
|
98
|
+
--docuserve-bg: #15120F;
|
|
99
|
+
--docuserve-bg-elevated: #1B1814;
|
|
100
|
+
--docuserve-border: #2F2823;
|
|
101
|
+
--docuserve-border-soft: #26211C;
|
|
102
|
+
|
|
103
|
+
--docuserve-text: #E8E0D4;
|
|
104
|
+
--docuserve-text-strong: #F2ECE0;
|
|
105
|
+
--docuserve-text-muted: #B5AA9A;
|
|
106
|
+
--docuserve-text-dim: #7A6F62;
|
|
107
|
+
|
|
108
|
+
--docuserve-accent: #5DB8A8;
|
|
109
|
+
--docuserve-accent-hover: #7FCCB8;
|
|
110
|
+
|
|
111
|
+
--docuserve-topbar-bg: #1A1612;
|
|
112
|
+
--docuserve-topbar-text: #E8E0D4;
|
|
113
|
+
--docuserve-topbar-text-muted: #B5AA9A;
|
|
114
|
+
--docuserve-topbar-text-dim: #7A6F62;
|
|
115
|
+
--docuserve-topbar-hover-bg: #2A241E;
|
|
116
|
+
--docuserve-topbar-version-bg: rgba(255, 255, 255, 0.05);
|
|
117
|
+
--docuserve-topbar-version-border: rgba(255, 255, 255, 0.09);
|
|
118
|
+
--docuserve-topbar-version-text: #B5AA9A;
|
|
119
|
+
|
|
120
|
+
--docuserve-sidebar-bg: #1B1814;
|
|
121
|
+
--docuserve-sidebar-border: #2F2823;
|
|
122
|
+
--docuserve-sidebar-border-soft: #26211C;
|
|
123
|
+
--docuserve-sidebar-text: #C9C0B3;
|
|
124
|
+
--docuserve-sidebar-group-title: #F2ECE0;
|
|
125
|
+
--docuserve-sidebar-module-text: #B5AA9A;
|
|
126
|
+
--docuserve-sidebar-hover-bg: #2A241E;
|
|
127
|
+
--docuserve-sidebar-hover-text: #7FCCB8;
|
|
128
|
+
--docuserve-sidebar-active-bg: #2F2823;
|
|
129
|
+
--docuserve-sidebar-active-text: #7FCCB8;
|
|
130
|
+
--docuserve-sidebar-search-bg: #26211C;
|
|
131
|
+
--docuserve-sidebar-search-border: #2F2823;
|
|
132
|
+
|
|
133
|
+
--docuserve-inline-code-bg: #2A241E;
|
|
134
|
+
--docuserve-inline-code-text: #E8B07A;
|
|
135
|
+
|
|
136
|
+
--docuserve-code-bg: #1E1A17;
|
|
137
|
+
--docuserve-code-border: #2F2823;
|
|
138
|
+
--docuserve-code-gutter-bg: #17130F;
|
|
139
|
+
--docuserve-code-gutter-border: #2F2823;
|
|
140
|
+
--docuserve-code-gutter-text: #6A6052;
|
|
141
|
+
--docuserve-code-text: #E8E0D4;
|
|
142
|
+
|
|
143
|
+
--docuserve-tok-keyword: #C678DD;
|
|
144
|
+
--docuserve-tok-string: #98C379;
|
|
145
|
+
--docuserve-tok-number: #D19A66;
|
|
146
|
+
--docuserve-tok-comment: #7F848E;
|
|
147
|
+
--docuserve-tok-operator: #56B6C2;
|
|
148
|
+
--docuserve-tok-punctuation: #E8E0D4;
|
|
149
|
+
--docuserve-tok-function: #61AFEF;
|
|
150
|
+
--docuserve-tok-property: #E06C75;
|
|
151
|
+
--docuserve-tok-tag: #E06C75;
|
|
152
|
+
--docuserve-tok-attr-name: #D19A66;
|
|
153
|
+
--docuserve-tok-attr-value: #98C379;
|
|
154
|
+
|
|
155
|
+
--docuserve-table-header-bg: #26211C;
|
|
156
|
+
--docuserve-table-row-alt-bg: #1F1B17;
|
|
157
|
+
--docuserve-blockquote-bg: #1F1B17;
|
|
158
|
+
--docuserve-blockquote-border: #5DB8A8;
|
|
159
|
+
--docuserve-blockquote-text: #C9C0B3;
|
|
160
|
+
--docuserve-mermaid-bg: #E8E0D4;
|
|
161
|
+
|
|
162
|
+
--docuserve-scrollbar-track: #1B1814;
|
|
163
|
+
--docuserve-scrollbar-thumb: #3A322B;
|
|
164
|
+
--docuserve-scrollbar-thumb-hover: #524438;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
:root[data-theme="dark"]
|
|
169
|
+
{
|
|
170
|
+
--docuserve-bg: #15120F;
|
|
171
|
+
--docuserve-bg-elevated: #1B1814;
|
|
172
|
+
--docuserve-border: #2F2823;
|
|
173
|
+
--docuserve-border-soft: #26211C;
|
|
174
|
+
|
|
175
|
+
--docuserve-text: #E8E0D4;
|
|
176
|
+
--docuserve-text-strong: #F2ECE0;
|
|
177
|
+
--docuserve-text-muted: #B5AA9A;
|
|
178
|
+
--docuserve-text-dim: #7A6F62;
|
|
179
|
+
|
|
180
|
+
--docuserve-accent: #5DB8A8;
|
|
181
|
+
--docuserve-accent-hover: #7FCCB8;
|
|
182
|
+
|
|
183
|
+
--docuserve-topbar-bg: #1A1612;
|
|
184
|
+
--docuserve-topbar-text: #E8E0D4;
|
|
185
|
+
--docuserve-topbar-text-muted: #B5AA9A;
|
|
186
|
+
--docuserve-topbar-text-dim: #7A6F62;
|
|
187
|
+
--docuserve-topbar-hover-bg: #2A241E;
|
|
188
|
+
--docuserve-topbar-version-bg: rgba(255, 255, 255, 0.05);
|
|
189
|
+
--docuserve-topbar-version-border: rgba(255, 255, 255, 0.09);
|
|
190
|
+
--docuserve-topbar-version-text: #B5AA9A;
|
|
191
|
+
|
|
192
|
+
--docuserve-sidebar-bg: #1B1814;
|
|
193
|
+
--docuserve-sidebar-border: #2F2823;
|
|
194
|
+
--docuserve-sidebar-border-soft: #26211C;
|
|
195
|
+
--docuserve-sidebar-text: #C9C0B3;
|
|
196
|
+
--docuserve-sidebar-group-title: #F2ECE0;
|
|
197
|
+
--docuserve-sidebar-module-text: #B5AA9A;
|
|
198
|
+
--docuserve-sidebar-hover-bg: #2A241E;
|
|
199
|
+
--docuserve-sidebar-hover-text: #7FCCB8;
|
|
200
|
+
--docuserve-sidebar-active-bg: #2F2823;
|
|
201
|
+
--docuserve-sidebar-active-text: #7FCCB8;
|
|
202
|
+
--docuserve-sidebar-search-bg: #26211C;
|
|
203
|
+
--docuserve-sidebar-search-border: #2F2823;
|
|
204
|
+
|
|
205
|
+
--docuserve-inline-code-bg: #2A241E;
|
|
206
|
+
--docuserve-inline-code-text: #E8B07A;
|
|
207
|
+
|
|
208
|
+
--docuserve-code-bg: #1E1A17;
|
|
209
|
+
--docuserve-code-border: #2F2823;
|
|
210
|
+
--docuserve-code-gutter-bg: #17130F;
|
|
211
|
+
--docuserve-code-gutter-border: #2F2823;
|
|
212
|
+
--docuserve-code-gutter-text: #6A6052;
|
|
213
|
+
--docuserve-code-text: #E8E0D4;
|
|
214
|
+
|
|
215
|
+
--docuserve-tok-keyword: #C678DD;
|
|
216
|
+
--docuserve-tok-string: #98C379;
|
|
217
|
+
--docuserve-tok-number: #D19A66;
|
|
218
|
+
--docuserve-tok-comment: #7F848E;
|
|
219
|
+
--docuserve-tok-operator: #56B6C2;
|
|
220
|
+
--docuserve-tok-punctuation: #E8E0D4;
|
|
221
|
+
--docuserve-tok-function: #61AFEF;
|
|
222
|
+
--docuserve-tok-property: #E06C75;
|
|
223
|
+
--docuserve-tok-tag: #E06C75;
|
|
224
|
+
--docuserve-tok-attr-name: #D19A66;
|
|
225
|
+
--docuserve-tok-attr-value: #98C379;
|
|
226
|
+
|
|
227
|
+
--docuserve-table-header-bg: #26211C;
|
|
228
|
+
--docuserve-table-row-alt-bg: #1F1B17;
|
|
229
|
+
--docuserve-blockquote-bg: #1F1B17;
|
|
230
|
+
--docuserve-blockquote-border: #5DB8A8;
|
|
231
|
+
--docuserve-blockquote-text: #C9C0B3;
|
|
232
|
+
--docuserve-mermaid-bg: #E8E0D4;
|
|
233
|
+
|
|
234
|
+
--docuserve-scrollbar-track: #1B1814;
|
|
235
|
+
--docuserve-scrollbar-thumb: #3A322B;
|
|
236
|
+
--docuserve-scrollbar-thumb-hover: #524438;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/* ----------------------------------------------------------------------------
|
|
240
|
+
Reset and base
|
|
241
|
+
---------------------------------------------------------------------------- */
|
|
242
|
+
|
|
243
|
+
*, *::before, *::after
|
|
244
|
+
{
|
|
7
245
|
box-sizing: border-box;
|
|
8
246
|
}
|
|
9
247
|
|
|
10
|
-
html, body
|
|
248
|
+
html, body
|
|
249
|
+
{
|
|
11
250
|
margin: 0;
|
|
12
251
|
padding: 0;
|
|
13
252
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
14
253
|
font-size: 16px;
|
|
15
254
|
line-height: 1.5;
|
|
16
|
-
color:
|
|
17
|
-
background-color:
|
|
255
|
+
color: var(--docuserve-text);
|
|
256
|
+
background-color: var(--docuserve-bg);
|
|
18
257
|
-webkit-font-smoothing: antialiased;
|
|
19
258
|
-moz-osx-font-smoothing: grayscale;
|
|
259
|
+
transition: background-color 0.15s ease, color 0.15s ease;
|
|
20
260
|
}
|
|
21
261
|
|
|
22
262
|
/* Typography */
|
|
23
|
-
h1, h2, h3, h4, h5, h6
|
|
263
|
+
h1, h2, h3, h4, h5, h6
|
|
264
|
+
{
|
|
24
265
|
margin-top: 0;
|
|
25
266
|
line-height: 1.3;
|
|
267
|
+
color: var(--docuserve-text-strong);
|
|
26
268
|
}
|
|
27
269
|
|
|
28
|
-
a
|
|
29
|
-
|
|
270
|
+
a
|
|
271
|
+
{
|
|
272
|
+
color: var(--docuserve-accent);
|
|
30
273
|
text-decoration: none;
|
|
31
274
|
}
|
|
32
275
|
|
|
33
|
-
a:hover
|
|
34
|
-
|
|
276
|
+
a:hover
|
|
277
|
+
{
|
|
278
|
+
color: var(--docuserve-accent-hover);
|
|
35
279
|
}
|
|
36
280
|
|
|
37
281
|
/* Application container */
|
|
38
|
-
#Docuserve-Application-Container
|
|
282
|
+
#Docuserve-Application-Container
|
|
283
|
+
{
|
|
39
284
|
min-height: 100vh;
|
|
40
285
|
}
|
|
41
286
|
|
|
42
287
|
/* Utility: scrollbar styling */
|
|
43
|
-
::-webkit-scrollbar
|
|
288
|
+
::-webkit-scrollbar
|
|
289
|
+
{
|
|
44
290
|
width: 8px;
|
|
291
|
+
height: 8px;
|
|
45
292
|
}
|
|
46
293
|
|
|
47
|
-
::-webkit-scrollbar-track
|
|
48
|
-
|
|
294
|
+
::-webkit-scrollbar-track
|
|
295
|
+
{
|
|
296
|
+
background: var(--docuserve-scrollbar-track);
|
|
49
297
|
}
|
|
50
298
|
|
|
51
|
-
::-webkit-scrollbar-thumb
|
|
52
|
-
|
|
299
|
+
::-webkit-scrollbar-thumb
|
|
300
|
+
{
|
|
301
|
+
background: var(--docuserve-scrollbar-thumb);
|
|
53
302
|
border-radius: 4px;
|
|
54
303
|
}
|
|
55
304
|
|
|
56
|
-
::-webkit-scrollbar-thumb:hover
|
|
57
|
-
|
|
305
|
+
::-webkit-scrollbar-thumb:hover
|
|
306
|
+
{
|
|
307
|
+
background: var(--docuserve-scrollbar-thumb-hover);
|
|
58
308
|
}
|
|
59
309
|
|
|
60
310
|
/* Responsive adjustments */
|
|
61
|
-
@media (max-width: 768px)
|
|
62
|
-
|
|
311
|
+
@media (max-width: 768px)
|
|
312
|
+
{
|
|
313
|
+
html
|
|
314
|
+
{
|
|
63
315
|
font-size: 14px;
|
|
64
316
|
}
|
|
65
317
|
|
|
66
|
-
#Docuserve-Sidebar-Container
|
|
318
|
+
#Docuserve-Sidebar-Container
|
|
319
|
+
{
|
|
67
320
|
display: none;
|
|
68
321
|
}
|
|
69
322
|
|
|
70
|
-
.docuserve-body
|
|
323
|
+
.docuserve-body
|
|
324
|
+
{
|
|
71
325
|
flex-direction: column;
|
|
72
326
|
}
|
|
73
327
|
}
|
package/docs/entities.md
CHANGED
|
@@ -8,8 +8,8 @@ Basic user accounts for the system.
|
|
|
8
8
|
|
|
9
9
|
| Column | Type | Size | Notes |
|
|
10
10
|
|--------|------|------|-------|
|
|
11
|
-
| `IDUser` | AutoIdentity |
|
|
12
|
-
| `GUIDUser` | Integer |
|
|
11
|
+
| `IDUser` | AutoIdentity | -- | Primary key |
|
|
12
|
+
| `GUIDUser` | Integer | -- | Numeric GUID |
|
|
13
13
|
| `LoginID` | String | 128 | Login username |
|
|
14
14
|
| `Password` | String | 255 | Password hash |
|
|
15
15
|
| `NameFirst` | String | 128 | First name |
|
|
@@ -25,7 +25,7 @@ The primary entity representing books in the store.
|
|
|
25
25
|
|
|
26
26
|
| Column | Type | Size | Notes |
|
|
27
27
|
|--------|------|------|-------|
|
|
28
|
-
| `IDBook` | AutoIdentity |
|
|
28
|
+
| `IDBook` | AutoIdentity | -- | Primary key |
|
|
29
29
|
| `GUIDBook` | AutoGUID | 128 | Unique identifier |
|
|
30
30
|
| `Title` | String | 200 | Book title |
|
|
31
31
|
| `Type` | String | 32 | Book type (e.g. Fiction) |
|
|
@@ -33,7 +33,7 @@ The primary entity representing books in the store.
|
|
|
33
33
|
| `ISBN` | String | 64 | ISBN number |
|
|
34
34
|
| `Language` | String | 12 | Language code |
|
|
35
35
|
| `ImageURL` | String | 254 | Cover image URL |
|
|
36
|
-
| `PublicationYear` | Integer |
|
|
36
|
+
| `PublicationYear` | Integer | -- | Year published |
|
|
37
37
|
| + change tracking | | | Create, Update, Delete |
|
|
38
38
|
|
|
39
39
|
## Author
|
|
@@ -42,10 +42,10 @@ Authors who write books.
|
|
|
42
42
|
|
|
43
43
|
| Column | Type | Size | Notes |
|
|
44
44
|
|--------|------|------|-------|
|
|
45
|
-
| `IDAuthor` | AutoIdentity |
|
|
45
|
+
| `IDAuthor` | AutoIdentity | -- | Primary key |
|
|
46
46
|
| `GUIDAuthor` | AutoGUID | 128 | Unique identifier |
|
|
47
47
|
| `Name` | String | 200 | Author name |
|
|
48
|
-
| `IDUser` | Integer |
|
|
48
|
+
| `IDUser` | Integer | -- | FK to User (optional) |
|
|
49
49
|
| + change tracking | | | Create, Update, Delete |
|
|
50
50
|
|
|
51
51
|
## BookAuthorJoin
|
|
@@ -54,10 +54,10 @@ Many-to-many join table connecting Books to Authors.
|
|
|
54
54
|
|
|
55
55
|
| Column | Type | Size | Notes |
|
|
56
56
|
|--------|------|------|-------|
|
|
57
|
-
| `IDBookAuthorJoin` | AutoIdentity |
|
|
57
|
+
| `IDBookAuthorJoin` | AutoIdentity | -- | Primary key |
|
|
58
58
|
| `GUIDBookAuthorJoin` | AutoGUID | 255 | Unique identifier |
|
|
59
|
-
| `IDBook` | Integer |
|
|
60
|
-
| `IDAuthor` | Integer |
|
|
59
|
+
| `IDBook` | Integer | -- | FK to Book |
|
|
60
|
+
| `IDAuthor` | Integer | -- | FK to Author |
|
|
61
61
|
|
|
62
62
|
> **Note:** No change tracking columns. A book can have multiple authors, and an author can write multiple books.
|
|
63
63
|
|
|
@@ -67,14 +67,14 @@ Pricing information for books, supporting multiple price periods.
|
|
|
67
67
|
|
|
68
68
|
| Column | Type | Size | Notes |
|
|
69
69
|
|--------|------|------|-------|
|
|
70
|
-
| `IDBookPrice` | AutoIdentity |
|
|
70
|
+
| `IDBookPrice` | AutoIdentity | -- | Primary key |
|
|
71
71
|
| `GUIDBookPrice` | AutoGUID | 36 | Unique identifier |
|
|
72
72
|
| `Price` | Decimal | 8,2 | Price value |
|
|
73
|
-
| `StartDate` | DateTime |
|
|
74
|
-
| `EndDate` | DateTime |
|
|
75
|
-
| `Discountable` | Boolean |
|
|
73
|
+
| `StartDate` | DateTime | -- | Price effective start |
|
|
74
|
+
| `EndDate` | DateTime | -- | Price effective end |
|
|
75
|
+
| `Discountable` | Boolean | -- | Can be discounted |
|
|
76
76
|
| `CouponCode` | String | 16 | Associated coupon |
|
|
77
|
-
| `IDBook` | Integer |
|
|
77
|
+
| `IDBook` | Integer | -- | FK to Book |
|
|
78
78
|
| + change tracking | | | Create, Update, Delete |
|
|
79
79
|
|
|
80
80
|
## BookStore
|
|
@@ -83,7 +83,7 @@ Physical bookstore locations.
|
|
|
83
83
|
|
|
84
84
|
| Column | Type | Size | Notes |
|
|
85
85
|
|--------|------|------|-------|
|
|
86
|
-
| `IDBookStore` | AutoIdentity |
|
|
86
|
+
| `IDBookStore` | AutoIdentity | -- | Primary key |
|
|
87
87
|
| `GUIDBookStore` | AutoGUID | 36 | Unique identifier |
|
|
88
88
|
| `Name` | String | 200 | Store name |
|
|
89
89
|
| `Address` | String | 64 | Street address |
|
|
@@ -99,15 +99,15 @@ Tracks book inventory levels at each store.
|
|
|
99
99
|
|
|
100
100
|
| Column | Type | Size | Notes |
|
|
101
101
|
|--------|------|------|-------|
|
|
102
|
-
| `IDBookStoreInventory` | AutoIdentity |
|
|
102
|
+
| `IDBookStoreInventory` | AutoIdentity | -- | Primary key |
|
|
103
103
|
| `GUIDBookStoreInventory` | AutoGUID | 36 | Unique identifier |
|
|
104
|
-
| `StockDate` | DateTime |
|
|
105
|
-
| `BookCount` | Integer |
|
|
106
|
-
| `AggregateBookCount` | Integer |
|
|
107
|
-
| `IDBook` | Integer |
|
|
108
|
-
| `IDBookStore` | Integer |
|
|
109
|
-
| `IDBookPrice` | Integer |
|
|
110
|
-
| `StockingAssociate` | Integer |
|
|
104
|
+
| `StockDate` | DateTime | -- | When stock was recorded |
|
|
105
|
+
| `BookCount` | Integer | -- | Current count |
|
|
106
|
+
| `AggregateBookCount` | Integer | -- | Running total |
|
|
107
|
+
| `IDBook` | Integer | -- | FK to Book |
|
|
108
|
+
| `IDBookStore` | Integer | -- | FK to BookStore |
|
|
109
|
+
| `IDBookPrice` | Integer | -- | FK to BookPrice |
|
|
110
|
+
| `StockingAssociate` | Integer | -- | FK to User |
|
|
111
111
|
| + change tracking | | | Create, Update, Delete |
|
|
112
112
|
|
|
113
113
|
## Review
|
|
@@ -116,10 +116,10 @@ User reviews for books.
|
|
|
116
116
|
|
|
117
117
|
| Column | Type | Size | Notes |
|
|
118
118
|
|--------|------|------|-------|
|
|
119
|
-
| `IDReview` | AutoIdentity |
|
|
119
|
+
| `IDReview` | AutoIdentity | -- | Primary key |
|
|
120
120
|
| `GUIDReview` | AutoGUID | 36 | Unique identifier |
|
|
121
|
-
| `Text` | Text |
|
|
122
|
-
| `Rating` | Integer |
|
|
123
|
-
| `IDBook` | Integer |
|
|
124
|
-
| `IDUser` | Integer |
|
|
121
|
+
| `Text` | Text | -- | Review content |
|
|
122
|
+
| `Rating` | Integer | -- | Numeric rating |
|
|
123
|
+
| `IDBook` | Integer | -- | FK to Book |
|
|
124
|
+
| `IDUser` | Integer | -- | FK to User (reviewer) |
|
|
125
125
|
| + change tracking | | | Create, Update, Delete |
|
package/docs/index.html
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
7
|
-
<meta name="description" content="Documentation
|
|
7
|
+
<meta name="description" content="Retold Harness v1.1.7 Documentation — Restful API harness. Serves on 8086.">
|
|
8
8
|
|
|
9
|
-
<title>Documentation</title>
|
|
9
|
+
<title>Retold Harness v1.1.7 Documentation</title>
|
|
10
10
|
|
|
11
11
|
<!-- Application Stylesheet -->
|
|
12
12
|
<link href="css/docuserve.css" rel="stylesheet">
|
package/docs/retold-catalog.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"Generated": "2026-
|
|
2
|
+
"Generated": "2026-04-10T17:22:29.657Z",
|
|
3
3
|
"GitHubOrg": "stevenvelozo",
|
|
4
4
|
"DefaultBranch": "master",
|
|
5
5
|
"Groups": [
|
|
@@ -40,23 +40,6 @@
|
|
|
40
40
|
}
|
|
41
41
|
]
|
|
42
42
|
},
|
|
43
|
-
{
|
|
44
|
-
"Name": "Data",
|
|
45
|
-
"Key": "data",
|
|
46
|
-
"Description": "",
|
|
47
|
-
"Modules": [
|
|
48
|
-
{
|
|
49
|
-
"Name": "entertainment",
|
|
50
|
-
"Repo": "entertainment",
|
|
51
|
-
"Group": "data",
|
|
52
|
-
"Branch": "master",
|
|
53
|
-
"HasDocs": false,
|
|
54
|
-
"HasCover": false,
|
|
55
|
-
"Sidebar": [],
|
|
56
|
-
"DocFiles": []
|
|
57
|
-
}
|
|
58
|
-
]
|
|
59
|
-
},
|
|
60
43
|
{
|
|
61
44
|
"Name": "Dist",
|
|
62
45
|
"Key": "dist",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "retold-harness",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.8",
|
|
4
4
|
"description": "Restful API harness. Serves on 8086.",
|
|
5
5
|
"main": "source/Retold-Harness.js",
|
|
6
6
|
"bin": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"tests": "npx quack test -g",
|
|
15
15
|
"coverage": "npx quack coverage",
|
|
16
16
|
"build-model": "npm run build-schema-bookstore",
|
|
17
|
-
"build-schema-bookstore": "cd source/schemas/bookstore && npx stricture
|
|
17
|
+
"build-schema-bookstore": "cd source/schemas/bookstore && npx stricture compile BookStore.ddl -o ./ -p MeadowModel && cp MeadowModel-Extended.json Schema.json",
|
|
18
18
|
"build-schema-us-federal-data": "cd source/schemas/us-federal-data && npx stricture compile USFederalData.ddl -o ./ -p MeadowModel && npx stricture meadow MeadowModel-Extended.json -o ./meadow -p MeadowSchema && cp MeadowModel-Extended.json Schema.json",
|
|
19
19
|
"ingest-federal-data": "node source/schemas/us-federal-data/ingestion/ingest-federal-data.js",
|
|
20
20
|
"build-schema-entertainment": "cd source/schemas/entertainment && npx stricture compile Entertainment.ddl -o ./ -p MeadowModel && npx stricture meadow MeadowModel-Extended.json -o ./meadow -p MeadowSchema && cp MeadowModel-Extended.json Schema.json",
|
|
@@ -38,21 +38,22 @@
|
|
|
38
38
|
"blessed": "^0.1.81",
|
|
39
39
|
"meadow-connection-dgraph": "^1.0.2",
|
|
40
40
|
"meadow-connection-mongodb": "^1.0.2",
|
|
41
|
-
"meadow-connection-mssql": "^1.0.
|
|
41
|
+
"meadow-connection-mssql": "^1.0.20",
|
|
42
42
|
"meadow-connection-mysql": "^1.0.14",
|
|
43
43
|
"meadow-connection-postgresql": "^1.0.2",
|
|
44
44
|
"meadow-connection-solr": "^1.0.2",
|
|
45
45
|
"meadow-connection-sqlite": "^1.0.18",
|
|
46
|
-
"meadow-integration": "^1.0.
|
|
46
|
+
"meadow-integration": "^1.0.34",
|
|
47
47
|
"orator-authentication": "^1.0.0",
|
|
48
48
|
"pict": "^1.0.357",
|
|
49
49
|
"pict-application": "^1.0.33",
|
|
50
50
|
"pict-terminalui": "^0.0.3",
|
|
51
51
|
"pict-view": "^1.0.67",
|
|
52
|
-
"retold-data-service": "^2.0.
|
|
52
|
+
"retold-data-service": "^2.0.42"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"
|
|
55
|
+
"pict-docuserve": "^0.1.5",
|
|
56
|
+
"quackage": "^1.1.0",
|
|
56
57
|
"stricture": "^4.0.2",
|
|
57
58
|
"supertest": "^7.2.2"
|
|
58
59
|
},
|
|
@@ -31,6 +31,7 @@ $ImageURL 254
|
|
|
31
31
|
%GUIDBookAuthorJoin 255
|
|
32
32
|
#IDBook -> IDBook
|
|
33
33
|
#IDAuthor -> IDAuthor
|
|
34
|
+
#IDCustomer -> IDCustomer
|
|
34
35
|
|
|
35
36
|
!Author
|
|
36
37
|
@IDAuthor
|
|
@@ -111,3 +112,79 @@ $Country 64
|
|
|
111
112
|
#Rating
|
|
112
113
|
#IDBook -> IDBook
|
|
113
114
|
#IDUser -> IDUser
|
|
115
|
+
|
|
116
|
+
!Customer
|
|
117
|
+
@IDCustomer
|
|
118
|
+
%GUIDCustomer
|
|
119
|
+
&CreateDate
|
|
120
|
+
#CreatingIDUser
|
|
121
|
+
&UpdateDate
|
|
122
|
+
#UpdatingIDUser
|
|
123
|
+
^Deleted
|
|
124
|
+
&DeleteDate
|
|
125
|
+
#DeletingIDUser
|
|
126
|
+
$Name 200
|
|
127
|
+
$Description 1024
|
|
128
|
+
$ContactName 200
|
|
129
|
+
$ContactEmail 200
|
|
130
|
+
$ContactPhone 32
|
|
131
|
+
$Address
|
|
132
|
+
$City 64
|
|
133
|
+
$State 24
|
|
134
|
+
$Postal 16
|
|
135
|
+
$Country 64
|
|
136
|
+
^Active
|
|
137
|
+
|
|
138
|
+
!BookStoreEmployee
|
|
139
|
+
@IDBookStoreEmployee
|
|
140
|
+
%GUIDBookStoreEmployee
|
|
141
|
+
&CreateDate
|
|
142
|
+
#CreatingIDUser
|
|
143
|
+
&UpdateDate
|
|
144
|
+
#UpdatingIDUser
|
|
145
|
+
^Deleted
|
|
146
|
+
&DeleteDate
|
|
147
|
+
#DeletingIDUser
|
|
148
|
+
$Title 64
|
|
149
|
+
&HireDate
|
|
150
|
+
&TerminationDate
|
|
151
|
+
^IsActive
|
|
152
|
+
#IDUser -> IDUser
|
|
153
|
+
#IDBookStore -> IDBookStore
|
|
154
|
+
#IDCustomer -> IDCustomer
|
|
155
|
+
|
|
156
|
+
!BookStoreSale
|
|
157
|
+
@IDBookStoreSale
|
|
158
|
+
%GUIDBookStoreSale
|
|
159
|
+
&CreateDate
|
|
160
|
+
#CreatingIDUser
|
|
161
|
+
&UpdateDate
|
|
162
|
+
#UpdatingIDUser
|
|
163
|
+
^Deleted
|
|
164
|
+
&DeleteDate
|
|
165
|
+
#DeletingIDUser
|
|
166
|
+
&SaleDate
|
|
167
|
+
.TotalAmount 10,2
|
|
168
|
+
$PaymentMethod 32
|
|
169
|
+
$TransactionID 64
|
|
170
|
+
#IDBookStore -> IDBookStore
|
|
171
|
+
#IDUser -> IDUser
|
|
172
|
+
#IDCustomer -> IDCustomer
|
|
173
|
+
|
|
174
|
+
!BookStoreSaleItem
|
|
175
|
+
@IDBookStoreSaleItem
|
|
176
|
+
%GUIDBookStoreSaleItem
|
|
177
|
+
&CreateDate
|
|
178
|
+
#CreatingIDUser
|
|
179
|
+
&UpdateDate
|
|
180
|
+
#UpdatingIDUser
|
|
181
|
+
^Deleted
|
|
182
|
+
&DeleteDate
|
|
183
|
+
#DeletingIDUser
|
|
184
|
+
#Quantity
|
|
185
|
+
.UnitPrice 8,2
|
|
186
|
+
.LineTotal 10,2
|
|
187
|
+
#IDBookStoreSale -> IDBookStoreSale
|
|
188
|
+
#IDBook -> IDBook
|
|
189
|
+
#IDBookPrice -> IDBookPrice
|
|
190
|
+
#IDCustomer -> IDCustomer
|