@dssp/project 1.0.0-alpha.9 → 1.0.0-alpha.92

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 (159) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -1
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/pages/lib/chatbot-widget.d.ts +53 -0
  5. package/dist-client/pages/lib/chatbot-widget.js +631 -0
  6. package/dist-client/pages/lib/chatbot-widget.js.map +1 -0
  7. package/dist-client/pages/lib/select2-component.d.ts +1 -1
  8. package/dist-client/pages/lib/select2-component.js +35 -35
  9. package/dist-client/pages/lib/select2-component.js.map +1 -1
  10. package/dist-client/pages/project/component/pagenation.d.ts +18 -0
  11. package/dist-client/pages/project/component/pagenation.js +142 -0
  12. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  13. package/dist-client/pages/project/component/project-update-header.js +26 -3
  14. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  15. package/dist-client/pages/project/popup/checklist/{attachment-list-popup.js → task-checklist-attachment-list-popup.js} +16 -17
  16. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  17. package/dist-client/pages/project/popup/checklist/{comment-list-popup.js → task-checklist-comment-list-popup.js} +19 -20
  18. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  19. package/dist-client/pages/project/popup/checklist/{schedule-checklist-create-popup.d.ts → task-checklist-create-popup.d.ts} +0 -1
  20. package/dist-client/pages/project/popup/checklist/{schedule-checklist-create-popup.js → task-checklist-create-popup.js} +40 -42
  21. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  22. package/dist-client/pages/project/popup/checklist/{schedule-checklist-view.d.ts → task-checklist-view.d.ts} +2 -7
  23. package/dist-client/pages/project/popup/checklist/{schedule-checklist-view.js → task-checklist-view.js} +137 -32
  24. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  25. package/dist-client/pages/project/popup/popup-plan-export.js +8 -2
  26. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -1
  27. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  28. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  29. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  30. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  31. package/dist-client/pages/project/project-completed-list.js +32 -3
  32. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  33. package/dist-client/pages/project/project-detail.d.ts +6 -0
  34. package/dist-client/pages/project/project-detail.js +225 -89
  35. package/dist-client/pages/project/project-detail.js.map +1 -1
  36. package/dist-client/pages/project/project-list.d.ts +57 -0
  37. package/dist-client/pages/project/project-list.js +80 -9
  38. package/dist-client/pages/project/project-list.js.map +1 -1
  39. package/dist-client/pages/project/project-plan-management.js +6 -1
  40. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  41. package/dist-client/pages/project/project-setting-list.d.ts +7 -0
  42. package/dist-client/pages/project/project-setting-list.js +61 -7
  43. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  44. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  45. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  46. package/dist-client/pages/project/project-task-list.js.map +1 -0
  47. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -6
  48. package/dist-client/pages/project/project-task.js +692 -0
  49. package/dist-client/pages/project/project-task.js.map +1 -0
  50. package/dist-client/pages/project/project-update.d.ts +34 -0
  51. package/dist-client/pages/project/project-update.js +508 -35
  52. package/dist-client/pages/project/project-update.js.map +1 -1
  53. package/dist-client/pages/resource/construction-type-management.js +14 -0
  54. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  55. package/dist-client/pages/resource/resource-list-page.d.ts +1 -2
  56. package/dist-client/pages/resource/resource-list-page.js +1 -2
  57. package/dist-client/pages/resource/resource-list-page.js.map +1 -1
  58. package/dist-client/pages/task/task-list-page.d.ts +1 -2
  59. package/dist-client/pages/task/task-list-page.js +1 -2
  60. package/dist-client/pages/task/task-list-page.js.map +1 -1
  61. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +1 -2
  62. package/dist-client/pages/task-resource/task-resource-list-page.js +1 -2
  63. package/dist-client/pages/task-resource/task-resource-list-page.js.map +1 -1
  64. package/dist-client/route.d.ts +1 -1
  65. package/dist-client/route.js +4 -4
  66. package/dist-client/route.js.map +1 -1
  67. package/dist-client/shared/domain-context.d.ts +18 -0
  68. package/dist-client/shared/domain-context.js +28 -0
  69. package/dist-client/shared/domain-context.js.map +1 -0
  70. package/dist-client/tsconfig.tsbuildinfo +1 -1
  71. package/dist-client/viewparts/domain-switch.d.ts +19 -0
  72. package/dist-client/viewparts/domain-switch.js +270 -0
  73. package/dist-client/viewparts/domain-switch.js.map +1 -0
  74. package/dist-server/controllers/parse-excel.js.map +1 -1
  75. package/dist-server/migrations/1723861466414-seed-codes.js +1 -1
  76. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -1
  77. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -2
  78. package/dist-server/service/construction-type/construction-type-query.js +5 -10
  79. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  80. package/dist-server/service/construction-type/construction-type-type.d.ts +1 -0
  81. package/dist-server/service/construction-type/construction-type-type.js +4 -0
  82. package/dist-server/service/construction-type/construction-type-type.js.map +1 -1
  83. package/dist-server/service/construction-type/construction-type.d.ts +1 -0
  84. package/dist-server/service/construction-type/construction-type.js +5 -0
  85. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  86. package/dist-server/service/index.d.ts +2 -2
  87. package/dist-server/service/index.js +5 -2
  88. package/dist-server/service/index.js.map +1 -1
  89. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +2 -2
  90. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +5 -10
  91. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -1
  92. package/dist-server/service/manager/manager-query.d.ts +1 -1
  93. package/dist-server/service/manager/manager-query.js +2 -6
  94. package/dist-server/service/manager/manager-query.js.map +1 -1
  95. package/dist-server/service/project/issue-project-code.d.ts +7 -0
  96. package/dist-server/service/project/issue-project-code.js +27 -0
  97. package/dist-server/service/project/issue-project-code.js.map +1 -0
  98. package/dist-server/service/project/project-mutation.d.ts +2 -0
  99. package/dist-server/service/project/project-mutation.js +124 -11
  100. package/dist-server/service/project/project-mutation.js.map +1 -1
  101. package/dist-server/service/project/project-query.d.ts +13 -2
  102. package/dist-server/service/project/project-query.js +153 -13
  103. package/dist-server/service/project/project-query.js.map +1 -1
  104. package/dist-server/service/project/project-type.d.ts +13 -2
  105. package/dist-server/service/project/project-type.js +44 -2
  106. package/dist-server/service/project/project-type.js.map +1 -1
  107. package/dist-server/service/project/project.d.ts +23 -0
  108. package/dist-server/service/project/project.js +89 -2
  109. package/dist-server/service/project/project.js.map +1 -1
  110. package/dist-server/service/resource/resource-mutation.js +5 -6
  111. package/dist-server/service/resource/resource-mutation.js.map +1 -1
  112. package/dist-server/service/resource/resource-query.d.ts +2 -2
  113. package/dist-server/service/resource/resource-query.js +5 -10
  114. package/dist-server/service/resource/resource-query.js.map +1 -1
  115. package/dist-server/service/task/task-query.d.ts +2 -0
  116. package/dist-server/service/task/task-query.js +11 -0
  117. package/dist-server/service/task/task-query.js.map +1 -1
  118. package/dist-server/service/task/task.d.ts +2 -0
  119. package/dist-server/service/task/task.js +6 -0
  120. package/dist-server/service/task/task.js.map +1 -1
  121. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  122. package/dist-server/service/task-checklist-binding/index.js +9 -0
  123. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  124. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  125. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +188 -0
  126. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  127. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  128. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  129. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  130. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  131. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  132. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  133. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  134. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  135. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  136. package/dist-server/service/task-resource/task-resource-query.d.ts +2 -2
  137. package/dist-server/service/task-resource/task-resource-query.js +4 -9
  138. package/dist-server/service/task-resource/task-resource-query.js.map +1 -1
  139. package/dist-server/service/worker-type/worker-type-query.d.ts +2 -2
  140. package/dist-server/service/worker-type/worker-type-query.js +5 -10
  141. package/dist-server/service/worker-type/worker-type-query.js.map +1 -1
  142. package/dist-server/tsconfig.tsbuildinfo +1 -1
  143. package/package.json +15 -13
  144. package/things-factory.config.js +3 -3
  145. package/translations/en.json +10 -9
  146. package/translations/ja.json +15 -1
  147. package/translations/ko.json +3 -0
  148. package/translations/ms.json +15 -1
  149. package/translations/zh.json +15 -1
  150. package/dist-client/pages/project/popup/checklist/attachment-list-popup.js.map +0 -1
  151. package/dist-client/pages/project/popup/checklist/comment-list-popup.js.map +0 -1
  152. package/dist-client/pages/project/popup/checklist/schedule-checklist-create-popup.js.map +0 -1
  153. package/dist-client/pages/project/popup/checklist/schedule-checklist-view.js.map +0 -1
  154. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  155. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  156. package/dist-client/pages/project/project-schedule.js +0 -422
  157. package/dist-client/pages/project/project-schedule.js.map +0 -1
  158. /package/dist-client/pages/project/popup/checklist/{attachment-list-popup.d.ts → task-checklist-attachment-list-popup.d.ts} +0 -0
  159. /package/dist-client/pages/project/popup/checklist/{comment-list-popup.d.ts → task-checklist-comment-list-popup.d.ts} +0 -0
@@ -0,0 +1,19 @@
1
+ import '@material/web/icon/icon.js';
2
+ import { LitElement } from 'lit';
3
+ declare const DsspDomainSwitch_base: (new (...args: any[]) => LitElement) & typeof LitElement;
4
+ export declare class DsspDomainSwitch extends DsspDomainSwitch_base {
5
+ static styles: import("lit").CSSResult[];
6
+ private _appCtrl;
7
+ attrname: string;
8
+ icon: string;
9
+ private _open;
10
+ private _outsideClickHandler;
11
+ private _escHandler;
12
+ connectedCallback(): void;
13
+ disconnectedCallback(): void;
14
+ render(): import("lit-html").TemplateResult<1>;
15
+ private _renderCategory;
16
+ private _select;
17
+ private _groupAndOrder;
18
+ }
19
+ export {};
@@ -0,0 +1,270 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import { css, html, LitElement, nothing } from 'lit';
4
+ import { customElement, property, state } from 'lit/decorators.js';
5
+ import { AppController } from '@operato/shell';
6
+ import { ScrollbarStyles } from '@operato/styles';
7
+ import { i18next, localize } from '@operato/i18n';
8
+ const CATEGORY_ICON = {
9
+ domain: 'business',
10
+ project: 'assignment',
11
+ company: 'corporate_fare',
12
+ equipment: 'precision_manufacturing'
13
+ };
14
+ const CATEGORY_FALLBACK_ICON = 'folder';
15
+ const CATEGORY_ORDER = ['project', 'domain', 'company', 'equipment'];
16
+ let DsspDomainSwitch = class DsspDomainSwitch extends localize(i18next)(LitElement) {
17
+ constructor() {
18
+ super(...arguments);
19
+ this._appCtrl = new AppController(this);
20
+ this.attrname = 'name';
21
+ this.icon = 'domain';
22
+ this._open = false;
23
+ this._outsideClickHandler = (e) => {
24
+ if (!this._open)
25
+ return;
26
+ const path = e.composedPath();
27
+ if (!path.includes(this)) {
28
+ this._open = false;
29
+ }
30
+ };
31
+ this._escHandler = (e) => {
32
+ if (e.key === 'Escape')
33
+ this._open = false;
34
+ };
35
+ }
36
+ connectedCallback() {
37
+ super.connectedCallback();
38
+ document.addEventListener('click', this._outsideClickHandler, true);
39
+ document.addEventListener('keydown', this._escHandler);
40
+ }
41
+ disconnectedCallback() {
42
+ document.removeEventListener('click', this._outsideClickHandler, true);
43
+ document.removeEventListener('keydown', this._escHandler);
44
+ super.disconnectedCallback();
45
+ }
46
+ render() {
47
+ var _a;
48
+ const domains = this._appCtrl.domains || [];
49
+ const current = this._appCtrl.domain || {};
50
+ const attrname = this.attrname || 'name';
51
+ const currentLabel = current[attrname] || current.name || '';
52
+ if (domains.length <= 1) {
53
+ return html `
54
+ <button class="trigger" disabled>
55
+ ${this.icon ? html `<md-icon class="lead">${this.icon}</md-icon>` : nothing}
56
+ <span class="current-label">${((_a = domains[0]) === null || _a === void 0 ? void 0 : _a[attrname]) || currentLabel}</span>
57
+ </button>
58
+ `;
59
+ }
60
+ const ordered = this._groupAndOrder(domains);
61
+ return html `
62
+ <button
63
+ class="trigger"
64
+ @click=${(e) => {
65
+ e.stopPropagation();
66
+ this._open = !this._open;
67
+ }}
68
+ aria-haspopup="listbox"
69
+ aria-expanded=${this._open ? 'true' : 'false'}
70
+ >
71
+ ${this.icon ? html `<md-icon class="lead">${this.icon}</md-icon>` : nothing}
72
+ <span class="current-label">${currentLabel}</span>
73
+ <md-icon>${this._open ? 'expand_less' : 'expand_more'}</md-icon>
74
+ </button>
75
+ ${this._open
76
+ ? html `
77
+ <div class="panel" role="listbox">
78
+ ${ordered.map(([category, items]) => this._renderCategory(category, items, current, attrname))}
79
+ </div>
80
+ `
81
+ : nothing}
82
+ `;
83
+ }
84
+ _renderCategory(category, items, current, attrname) {
85
+ return html `
86
+ <section>
87
+ <header class="category-header">
88
+ <md-icon>${CATEGORY_ICON[category] || CATEGORY_FALLBACK_ICON}</md-icon>
89
+ <span>${i18next.t(`label.domain_type.${category}`, { defaultValue: category })}</span>
90
+ <span class="count">${items.length}</span>
91
+ </header>
92
+ <ul class="domains">
93
+ ${items.map(d => html `
94
+ <li
95
+ ?selected=${d.subdomain === current.subdomain}
96
+ role="option"
97
+ aria-selected=${d.subdomain === current.subdomain ? 'true' : 'false'}
98
+ title=${d.description ? `${d.name}\n${d.description}` : d.name || ''}
99
+ @click=${() => this._select(d)}
100
+ >
101
+ <strong>${d[attrname] || d.name}</strong>
102
+ ${attrname !== 'subdomain' && d.subdomain
103
+ ? html `<span class="sub">${d.subdomain}</span>`
104
+ : nothing}
105
+ </li>
106
+ `)}
107
+ </ul>
108
+ </section>
109
+ `;
110
+ }
111
+ _select(d) {
112
+ if (!(d === null || d === void 0 ? void 0 : d.subdomain))
113
+ return;
114
+ window.location.pathname = `/auth/checkin/${d.subdomain}`;
115
+ }
116
+ _groupAndOrder(domains) {
117
+ var _a;
118
+ const groups = {};
119
+ for (const d of domains) {
120
+ const cat = d.extType || 'domain';
121
+ (groups[cat] || (groups[cat] = [])).push(d);
122
+ }
123
+ // 카테고리 안 등록번호 (subdomain) 역순.
124
+ for (const items of Object.values(groups)) {
125
+ items.sort((a, b) => (b.subdomain || '').localeCompare(a.subdomain || ''));
126
+ }
127
+ const ordered = [];
128
+ const seen = new Set();
129
+ for (const cat of CATEGORY_ORDER) {
130
+ if ((_a = groups[cat]) === null || _a === void 0 ? void 0 : _a.length) {
131
+ ordered.push([cat, groups[cat]]);
132
+ seen.add(cat);
133
+ }
134
+ }
135
+ for (const [cat, items] of Object.entries(groups)) {
136
+ if (!seen.has(cat))
137
+ ordered.push([cat, items]);
138
+ }
139
+ return ordered;
140
+ }
141
+ };
142
+ DsspDomainSwitch.styles = [
143
+ ScrollbarStyles,
144
+ css `
145
+ :host {
146
+ display: flex;
147
+ position: relative;
148
+ max-width: 100%;
149
+ background-color: var(--md-sys-color-primary-container, rgb(215 231 241));
150
+ border-bottom: var(--border-dim-color);
151
+ }
152
+
153
+ :host * {
154
+ vertical-align: middle;
155
+ }
156
+
157
+ button.trigger {
158
+ flex: 1;
159
+ display: flex;
160
+ align-items: center;
161
+ gap: var(--spacing-small);
162
+ padding: var(--spacing-small);
163
+ background: transparent;
164
+ border: 0;
165
+ cursor: pointer;
166
+ color: var(--md-sys-color-on-primary-container, rgb(50 66 82));
167
+ font: bold 14px/20px var(--theme-font);
168
+ text-align: left;
169
+ }
170
+
171
+ button.trigger > md-icon.lead {
172
+ background-color: var(--md-sys-color-primary, rgb(46 121 190));
173
+ padding: 2px;
174
+ border-radius: 50%;
175
+ font-size: var(--fontsize-large);
176
+ color: var(--md-sys-color-on-primary, rgba(255, 255, 255, 0.9));
177
+ }
178
+
179
+ .current-label {
180
+ flex: 1;
181
+ overflow: hidden;
182
+ text-overflow: ellipsis;
183
+ white-space: nowrap;
184
+ }
185
+
186
+ .panel {
187
+ position: absolute;
188
+ top: 100%;
189
+ right: 0;
190
+ left: 0;
191
+ min-width: 280px;
192
+ max-height: 60vh;
193
+ overflow-y: auto;
194
+ background: var(--md-sys-color-surface, #fff);
195
+ border: var(--border-dim-color);
196
+ border-radius: 0 0 var(--border-radius-default, 4px) var(--border-radius-default, 4px);
197
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
198
+ z-index: 10;
199
+ padding: var(--spacing-small) 0;
200
+ }
201
+
202
+ .category-header {
203
+ display: flex;
204
+ align-items: center;
205
+ gap: var(--spacing-small);
206
+ padding: var(--spacing-small) var(--spacing-medium);
207
+ background: var(--md-sys-color-surface-variant, #f3f4f6);
208
+ font: bold 12px/16px var(--theme-font);
209
+ color: var(--md-sys-color-on-surface-variant, #555);
210
+ text-transform: uppercase;
211
+ letter-spacing: 0.04em;
212
+ }
213
+
214
+ .category-header md-icon {
215
+ font-size: 16px;
216
+ color: var(--md-sys-color-primary, #2e79be);
217
+ }
218
+
219
+ .category-header .count {
220
+ margin-left: auto;
221
+ font-weight: normal;
222
+ color: var(--md-sys-color-on-surface-variant, #777);
223
+ }
224
+
225
+ ul.domains {
226
+ list-style: none;
227
+ margin: 0;
228
+ padding: 0;
229
+ }
230
+
231
+ ul.domains li {
232
+ padding: var(--spacing-small) var(--spacing-medium);
233
+ cursor: pointer;
234
+ color: var(--md-sys-color-on-surface, #222);
235
+ font: normal 13px/18px var(--theme-font);
236
+ }
237
+
238
+ ul.domains li[selected] {
239
+ background: var(--md-sys-color-primary-container, #d7e7f1);
240
+ font-weight: bold;
241
+ }
242
+
243
+ ul.domains li:hover {
244
+ background: var(--md-sys-color-secondary-container, #eef3fa);
245
+ }
246
+
247
+ ul.domains li .sub {
248
+ display: block;
249
+ font-size: 11px;
250
+ color: var(--md-sys-color-on-surface-variant, #888);
251
+ }
252
+ `
253
+ ];
254
+ __decorate([
255
+ property({ type: String, attribute: true }),
256
+ __metadata("design:type", String)
257
+ ], DsspDomainSwitch.prototype, "attrname", void 0);
258
+ __decorate([
259
+ property({ type: String, attribute: true }),
260
+ __metadata("design:type", String)
261
+ ], DsspDomainSwitch.prototype, "icon", void 0);
262
+ __decorate([
263
+ state(),
264
+ __metadata("design:type", Object)
265
+ ], DsspDomainSwitch.prototype, "_open", void 0);
266
+ DsspDomainSwitch = __decorate([
267
+ customElement('dssp-domain-switch')
268
+ ], DsspDomainSwitch);
269
+ export { DsspDomainSwitch };
270
+ //# sourceMappingURL=domain-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-switch.js","sourceRoot":"","sources":["../../client/viewparts/domain-switch.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { AppController } from '@operato/shell'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { i18next, localize } from '@operato/i18n'\n\nconst CATEGORY_ICON: Record<string, string> = {\n domain: 'business',\n project: 'assignment',\n company: 'corporate_fare',\n equipment: 'precision_manufacturing'\n}\n\nconst CATEGORY_FALLBACK_ICON = 'folder'\n\nconst CATEGORY_ORDER = ['project', 'domain', 'company', 'equipment']\n\n@customElement('dssp-domain-switch')\nexport class DsspDomainSwitch extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n position: relative;\n max-width: 100%;\n background-color: var(--md-sys-color-primary-container, rgb(215 231 241));\n border-bottom: var(--border-dim-color);\n }\n\n :host * {\n vertical-align: middle;\n }\n\n button.trigger {\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--spacing-small);\n padding: var(--spacing-small);\n background: transparent;\n border: 0;\n cursor: pointer;\n color: var(--md-sys-color-on-primary-container, rgb(50 66 82));\n font: bold 14px/20px var(--theme-font);\n text-align: left;\n }\n\n button.trigger > md-icon.lead {\n background-color: var(--md-sys-color-primary, rgb(46 121 190));\n padding: 2px;\n border-radius: 50%;\n font-size: var(--fontsize-large);\n color: var(--md-sys-color-on-primary, rgba(255, 255, 255, 0.9));\n }\n\n .current-label {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .panel {\n position: absolute;\n top: 100%;\n right: 0;\n left: 0;\n min-width: 280px;\n max-height: 60vh;\n overflow-y: auto;\n background: var(--md-sys-color-surface, #fff);\n border: var(--border-dim-color);\n border-radius: 0 0 var(--border-radius-default, 4px) var(--border-radius-default, 4px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: 10;\n padding: var(--spacing-small) 0;\n }\n\n .category-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-small);\n padding: var(--spacing-small) var(--spacing-medium);\n background: var(--md-sys-color-surface-variant, #f3f4f6);\n font: bold 12px/16px var(--theme-font);\n color: var(--md-sys-color-on-surface-variant, #555);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .category-header md-icon {\n font-size: 16px;\n color: var(--md-sys-color-primary, #2e79be);\n }\n\n .category-header .count {\n margin-left: auto;\n font-weight: normal;\n color: var(--md-sys-color-on-surface-variant, #777);\n }\n\n ul.domains {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n ul.domains li {\n padding: var(--spacing-small) var(--spacing-medium);\n cursor: pointer;\n color: var(--md-sys-color-on-surface, #222);\n font: normal 13px/18px var(--theme-font);\n }\n\n ul.domains li[selected] {\n background: var(--md-sys-color-primary-container, #d7e7f1);\n font-weight: bold;\n }\n\n ul.domains li:hover {\n background: var(--md-sys-color-secondary-container, #eef3fa);\n }\n\n ul.domains li .sub {\n display: block;\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant, #888);\n }\n `\n ]\n\n private _appCtrl = new AppController(this)\n\n @property({ type: String, attribute: true }) attrname: string = 'name'\n @property({ type: String, attribute: true }) icon: string = 'domain'\n\n @state() private _open = false\n\n private _outsideClickHandler = (e: MouseEvent) => {\n if (!this._open) return\n const path = e.composedPath()\n if (!path.includes(this)) {\n this._open = false\n }\n }\n\n private _escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') this._open = false\n }\n\n connectedCallback() {\n super.connectedCallback()\n document.addEventListener('click', this._outsideClickHandler, true)\n document.addEventListener('keydown', this._escHandler)\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._outsideClickHandler, true)\n document.removeEventListener('keydown', this._escHandler)\n super.disconnectedCallback()\n }\n\n render() {\n const domains: any[] = (this._appCtrl.domains as any[]) || []\n const current: any = (this._appCtrl.domain as any) || {}\n const attrname = this.attrname || 'name'\n const currentLabel = current[attrname] || current.name || ''\n\n if (domains.length <= 1) {\n return html`\n <button class=\"trigger\" disabled>\n ${this.icon ? html`<md-icon class=\"lead\">${this.icon}</md-icon>` : nothing}\n <span class=\"current-label\">${(domains[0] as any)?.[attrname] || currentLabel}</span>\n </button>\n `\n }\n\n const ordered = this._groupAndOrder(domains)\n\n return html`\n <button\n class=\"trigger\"\n @click=${(e: Event) => {\n e.stopPropagation()\n this._open = !this._open\n }}\n aria-haspopup=\"listbox\"\n aria-expanded=${this._open ? 'true' : 'false'}\n >\n ${this.icon ? html`<md-icon class=\"lead\">${this.icon}</md-icon>` : nothing}\n <span class=\"current-label\">${currentLabel}</span>\n <md-icon>${this._open ? 'expand_less' : 'expand_more'}</md-icon>\n </button>\n ${this._open\n ? html`\n <div class=\"panel\" role=\"listbox\">\n ${ordered.map(([category, items]) => this._renderCategory(category, items, current, attrname))}\n </div>\n `\n : nothing}\n `\n }\n\n private _renderCategory(category: string, items: any[], current: any, attrname: string) {\n return html`\n <section>\n <header class=\"category-header\">\n <md-icon>${CATEGORY_ICON[category] || CATEGORY_FALLBACK_ICON}</md-icon>\n <span>${i18next.t(`label.domain_type.${category}`, { defaultValue: category })}</span>\n <span class=\"count\">${items.length}</span>\n </header>\n <ul class=\"domains\">\n ${items.map(\n d => html`\n <li\n ?selected=${d.subdomain === current.subdomain}\n role=\"option\"\n aria-selected=${d.subdomain === current.subdomain ? 'true' : 'false'}\n title=${d.description ? `${d.name}\\n${d.description}` : d.name || ''}\n @click=${() => this._select(d)}\n >\n <strong>${d[attrname] || d.name}</strong>\n ${attrname !== 'subdomain' && d.subdomain\n ? html`<span class=\"sub\">${d.subdomain}</span>`\n : nothing}\n </li>\n `\n )}\n </ul>\n </section>\n `\n }\n\n private _select(d: any) {\n if (!d?.subdomain) return\n window.location.pathname = `/auth/checkin/${d.subdomain}`\n }\n\n private _groupAndOrder(domains: any[]): [string, any[]][] {\n const groups: Record<string, any[]> = {}\n for (const d of domains) {\n const cat = d.extType || 'domain'\n ;(groups[cat] ||= []).push(d)\n }\n\n // 카테고리 안 등록번호 (subdomain) 역순.\n for (const items of Object.values(groups)) {\n items.sort((a, b) => (b.subdomain || '').localeCompare(a.subdomain || ''))\n }\n\n const ordered: [string, any[]][] = []\n const seen = new Set<string>()\n for (const cat of CATEGORY_ORDER) {\n if (groups[cat]?.length) {\n ordered.push([cat, groups[cat]])\n seen.add(cat)\n }\n }\n for (const [cat, items] of Object.entries(groups)) {\n if (!seen.has(cat)) ordered.push([cat, items])\n }\n return ordered\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-excel.js","sourceRoot":"","sources":["../../server/controllers/parse-excel.ts"],"names":[],"mappings":"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","sourcesContent":["import ExcelJS from 'exceljs'\nimport { RawTask } from './types'\nimport { Project } from '../service/project/project'\nimport { importTasks } from './import-task'\n\nexport async function parseExcelAndImportTasks(buffer: Buffer, project: Project, context: ResolverContext) {\n // 1. 엑셀 파일을 읽어들입니다.\n const workbook = new ExcelJS.Workbook()\n await workbook.xlsx.load(buffer)\n\n // 2. 첫 번째 워크시트를 가져옵니다.\n const worksheet = workbook.getWorksheet(1) // Index or sheet name can be used\n\n // 3. 첫 번째 row를 header로 사용합니다.\n const headers: string[] = []\n let taskCodeColumnIndex = -1\n\n const headerRow = worksheet.getRow(1)\n headerRow.eachCell((cell, colNumber) => {\n const headerText = cell.text.toString()\n headers[colNumber - 1] = headerText // Store headers in an array\n\n if (headerText === '작업코드') {\n taskCodeColumnIndex = colNumber // Store the column index for \"작업코드\"\n }\n })\n\n if (taskCodeColumnIndex === -1) {\n throw new Error('작업코드 column not found')\n }\n\n // 4. 엑셀 데이터를 RawTask 형식으로 변환합니다.\n const tasks: RawTask[] = []\n\n // Start processing from the second row onward to skip the header\n for (let rowIndex = 2; rowIndex <= worksheet.rowCount; rowIndex++) {\n const row = worksheet.getRow(rowIndex)\n const taskData: any = {}\n\n row.eachCell((cell, colNumber) => {\n const header = headers[colNumber - 1]\n\n // Check if the cell has a formula(or sharedFormula) and use the formula result\n let cellValue: any = cell.value\n if (cellValue && typeof cellValue === 'object' && ('formula' in cellValue || 'sharedFormula' in cellValue)) {\n // Cell contains a formula, use the calculated result if available\n cellValue = cellValue.result ?? cellValue.value // Use the result, or fallback to value if result is not calculated\n }\n\n taskData[header] = cellValue\n })\n\n const taskCodeCell = row.getCell(taskCodeColumnIndex)\n let bgColor = '#FFFFFF'\n const fill = taskCodeCell.style.fill\n\n if (fill && fill.type === 'pattern' && fill.pattern === 'solid') {\n const fgColor = fill.fgColor\n if (fgColor && fgColor.argb) {\n // ARGB is a color in the format AARRGGBB, remove the alpha channel (first two characters)\n bgColor = `#${fgColor.argb.slice(2)}`\n }\n }\n\n const task: RawTask = {\n code: taskData['작업코드'],\n title: taskData['작업명'],\n type: taskData['세부공종'],\n duration: taskData['기간'],\n startDate: taskData['시작일'],\n dependsOn: taskData['선행작업코드'],\n progress: taskData['진척율'],\n tags: taskData['Tags'] ? taskData['Tags'].split(',') : [],\n resources: taskData['Resources'] ? JSON.parse(taskData['Resources']) : [],\n style: bgColor,\n children: []\n }\n\n if (task.code && task.type) {\n tasks.push(task)\n }\n }\n\n // 5. 변환된 데이터를 importTasks 함수로 전달합니다.\n await importTasks(project, tasks, context)\n}\n"]}
1
+ {"version":3,"file":"parse-excel.js","sourceRoot":"","sources":["../../server/controllers/parse-excel.ts"],"names":[],"mappings":"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","sourcesContent":["import ExcelJS from 'exceljs'\nimport { RawTask } from './types'\nimport { Project } from '../service/project/project'\nimport { importTasks } from './import-task'\n\nexport async function parseExcelAndImportTasks(buffer: Buffer, project: Project, context: ResolverContext) {\n // 1. 엑셀 파일을 읽어들입니다.\n const workbook = new ExcelJS.Workbook()\n await workbook.xlsx.load(buffer as any)\n\n // 2. 첫 번째 워크시트를 가져옵니다.\n const worksheet = workbook.getWorksheet(1) // Index or sheet name can be used\n\n // 3. 첫 번째 row를 header로 사용합니다.\n const headers: string[] = []\n let taskCodeColumnIndex = -1\n\n const headerRow = worksheet.getRow(1)\n headerRow.eachCell((cell, colNumber) => {\n const headerText = cell.text.toString()\n headers[colNumber - 1] = headerText // Store headers in an array\n\n if (headerText === '작업코드') {\n taskCodeColumnIndex = colNumber // Store the column index for \"작업코드\"\n }\n })\n\n if (taskCodeColumnIndex === -1) {\n throw new Error('작업코드 column not found')\n }\n\n // 4. 엑셀 데이터를 RawTask 형식으로 변환합니다.\n const tasks: RawTask[] = []\n\n // Start processing from the second row onward to skip the header\n for (let rowIndex = 2; rowIndex <= worksheet.rowCount; rowIndex++) {\n const row = worksheet.getRow(rowIndex)\n const taskData: any = {}\n\n row.eachCell((cell, colNumber) => {\n const header = headers[colNumber - 1]\n\n // Check if the cell has a formula(or sharedFormula) and use the formula result\n let cellValue: any = cell.value\n if (cellValue && typeof cellValue === 'object' && ('formula' in cellValue || 'sharedFormula' in cellValue)) {\n // Cell contains a formula, use the calculated result if available\n cellValue = cellValue.result ?? cellValue.value // Use the result, or fallback to value if result is not calculated\n }\n\n taskData[header] = cellValue\n })\n\n const taskCodeCell = row.getCell(taskCodeColumnIndex)\n let bgColor = '#FFFFFF'\n const fill = taskCodeCell.style.fill\n\n if (fill && fill.type === 'pattern' && fill.pattern === 'solid') {\n const fgColor = fill.fgColor\n if (fgColor && fgColor.argb) {\n // ARGB is a color in the format AARRGGBB, remove the alpha channel (first two characters)\n bgColor = `#${fgColor.argb.slice(2)}`\n }\n }\n\n const task: RawTask = {\n code: taskData['작업코드'],\n title: taskData['작업명'],\n type: taskData['세부공종'],\n duration: taskData['기간'],\n startDate: taskData['시작일'],\n dependsOn: taskData['선행작업코드'],\n progress: taskData['진척율'],\n tags: taskData['Tags'] ? taskData['Tags'].split(',') : [],\n resources: taskData['Resources'] ? JSON.parse(taskData['Resources']) : [],\n style: bgColor,\n children: []\n }\n\n if (task.code && task.type) {\n tasks.push(task)\n }\n }\n\n // 5. 변환된 데이터를 importTasks 함수로 전달합니다.\n await importTasks(project, tasks, context)\n}\n"]}
@@ -83,7 +83,7 @@ const SEED_COMMON_CODES = [
83
83
  rank: 5
84
84
  },
85
85
  {
86
- name: 'DESIGNER',
86
+ name: 'ARCHITECT',
87
87
  description: '설계사',
88
88
  labels: null,
89
89
  rank: 6
@@ -1 +1 @@
1
- {"version":3,"file":"1723861466414-seed-codes.js","sourceRoot":"","sources":["../../server/migrations/1723861466414-seed-codes.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { CommonCode, CommonCodeDetail } from '@things-factory/code-base'\n\nconst SEED_COMMON_CODES = [\n {\n name: 'EMPLOYEE_TYPE',\n description: '직원 유형',\n details: [\n {\n name: 'FULLTIME',\n description: '풀타임 정규직',\n labels: null,\n rank: 1\n },\n {\n name: 'PARTTIME',\n description: '파트타임 정규직',\n labels: null,\n rank: 2\n },\n {\n name: 'TEMPORARY',\n description: '임시직',\n labels: null,\n rank: 3\n }\n ]\n },\n {\n name: 'JOB_POSITION',\n description: '직급',\n details: [\n {\n name: '임원',\n description: '임원',\n labels: null,\n rank: 1\n },\n {\n name: '직원',\n description: '직원',\n labels: null,\n rank: 2\n }\n ]\n },\n {\n name: 'JOB_RESPONSIBILITY',\n description: '직책',\n details: [\n {\n name: 'ADMIN',\n description: '관리자',\n labels: null,\n rank: 1\n },\n {\n name: 'OVERALL_SUPERVISORY',\n description: '총괄 감리 책임자',\n labels: null,\n rank: 2\n },\n {\n name: 'TASK_SUPERVISORY',\n description: '공종별 감리 책임자',\n labels: null,\n rank: 3\n },\n {\n name: 'OVERALL_CONSTRUCTOR',\n description: '총괄 시공 책임자',\n labels: null,\n rank: 4\n },\n {\n name: 'TASK_CONSTRUCTOR',\n description: '공종별 시공 관리자',\n labels: null,\n rank: 5\n },\n {\n name: 'DESIGNER',\n description: '설계사',\n labels: null,\n rank: 6\n },\n {\n name: 'CONSTRUCTOR',\n description: '시공자',\n labels: null,\n rank: 7\n }\n ]\n }\n]\n\nexport class SeedCodes1723861466414 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const commonCodeRepository = getRepository(CommonCode)\n const commonCodeDetailRepository = getRepository(CommonCodeDetail)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n for (let i = 0; i < SEED_COMMON_CODES.length; i++) {\n const { name, description, details } = SEED_COMMON_CODES[i]\n\n const commonCode = await commonCodeRepository.save({\n domain,\n name,\n description,\n creator: user,\n updater: user\n })\n\n for (const commonCodeDetail of details) {\n const { name, description, labels, rank } = commonCodeDetail\n\n await commonCodeDetailRepository.save({\n domain,\n commonCode,\n name,\n description,\n labels,\n rank\n })\n }\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(CommonCode)\n\n SEED_COMMON_CODES.reverse().forEach(async commonCode => {\n let record = await repository.findOne({ where: { name: commonCode.name, domain: { id: domain.id } } })\n record && (await repository.remove(record))\n })\n }\n}\n"]}
1
+ {"version":3,"file":"1723861466414-seed-codes.js","sourceRoot":"","sources":["../../server/migrations/1723861466414-seed-codes.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { CommonCode, CommonCodeDetail } from '@things-factory/code-base'\n\nconst SEED_COMMON_CODES = [\n {\n name: 'EMPLOYEE_TYPE',\n description: '직원 유형',\n details: [\n {\n name: 'FULLTIME',\n description: '풀타임 정규직',\n labels: null,\n rank: 1\n },\n {\n name: 'PARTTIME',\n description: '파트타임 정규직',\n labels: null,\n rank: 2\n },\n {\n name: 'TEMPORARY',\n description: '임시직',\n labels: null,\n rank: 3\n }\n ]\n },\n {\n name: 'JOB_POSITION',\n description: '직급',\n details: [\n {\n name: '임원',\n description: '임원',\n labels: null,\n rank: 1\n },\n {\n name: '직원',\n description: '직원',\n labels: null,\n rank: 2\n }\n ]\n },\n {\n name: 'JOB_RESPONSIBILITY',\n description: '직책',\n details: [\n {\n name: 'ADMIN',\n description: '관리자',\n labels: null,\n rank: 1\n },\n {\n name: 'OVERALL_SUPERVISORY',\n description: '총괄 감리 책임자',\n labels: null,\n rank: 2\n },\n {\n name: 'TASK_SUPERVISORY',\n description: '공종별 감리 책임자',\n labels: null,\n rank: 3\n },\n {\n name: 'OVERALL_CONSTRUCTOR',\n description: '총괄 시공 책임자',\n labels: null,\n rank: 4\n },\n {\n name: 'TASK_CONSTRUCTOR',\n description: '공종별 시공 관리자',\n labels: null,\n rank: 5\n },\n {\n name: 'ARCHITECT',\n description: '설계사',\n labels: null,\n rank: 6\n },\n {\n name: 'CONSTRUCTOR',\n description: '시공자',\n labels: null,\n rank: 7\n }\n ]\n }\n]\n\nexport class SeedCodes1723861466414 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const commonCodeRepository = getRepository(CommonCode)\n const commonCodeDetailRepository = getRepository(CommonCodeDetail)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n for (let i = 0; i < SEED_COMMON_CODES.length; i++) {\n const { name, description, details } = SEED_COMMON_CODES[i]\n\n const commonCode = await commonCodeRepository.save({\n domain,\n name,\n description,\n creator: user,\n updater: user\n })\n\n for (const commonCodeDetail of details) {\n const { name, description, labels, rank } = commonCodeDetail\n\n await commonCodeDetailRepository.save({\n domain,\n commonCode,\n name,\n description,\n labels,\n rank\n })\n }\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(CommonCode)\n\n SEED_COMMON_CODES.reverse().forEach(async commonCode => {\n let record = await repository.findOne({ where: { name: commonCode.name, domain: { id: domain.id } } })\n record && (await repository.remove(record))\n })\n }\n}\n"]}
@@ -4,8 +4,8 @@ import { ConstructionType } from './construction-type';
4
4
  import { ConstructionTypeList } from './construction-type-type';
5
5
  import { ConstructionDetailType } from '../construction-detail-type/construction-detail-type';
6
6
  export declare class ConstructionTypeQuery {
7
- constructionType(id: string, context: ResolverContext): Promise<ConstructionType>;
8
- constructionTypes(params: ListParam, context: ResolverContext): Promise<ConstructionTypeList>;
7
+ constructionType(id: string): Promise<ConstructionType>;
8
+ constructionTypes(params: ListParam): Promise<ConstructionTypeList>;
9
9
  constructionDetailTypes(constructionType: ConstructionType): Promise<ConstructionDetailType[]>;
10
10
  domain(constructionType: ConstructionType): Promise<Domain>;
11
11
  updater(constructionType: ConstructionType): Promise<User>;
@@ -9,16 +9,13 @@ const construction_type_1 = require("./construction-type");
9
9
  const construction_type_type_1 = require("./construction-type-type");
10
10
  const construction_detail_type_1 = require("../construction-detail-type/construction-detail-type");
11
11
  let ConstructionTypeQuery = class ConstructionTypeQuery {
12
- async constructionType(id, context) {
13
- const { domain } = context.state;
12
+ async constructionType(id) {
14
13
  return await (0, shell_1.getRepository)(construction_type_1.ConstructionType).findOne({
15
- where: { domain: { id: domain.id }, id }
14
+ where: { id }
16
15
  });
17
16
  }
18
- async constructionTypes(params, context) {
19
- const { domain } = context.state;
17
+ async constructionTypes(params) {
20
18
  const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
21
- domain,
22
19
  params,
23
20
  repository: await (0, shell_1.getRepository)(construction_type_1.ConstructionType)
24
21
  });
@@ -45,17 +42,15 @@ exports.ConstructionTypeQuery = ConstructionTypeQuery;
45
42
  tslib_1.__decorate([
46
43
  (0, type_graphql_1.Query)(returns => construction_type_1.ConstructionType, { nullable: true, description: 'To fetch a ConstructionType' }),
47
44
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
48
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
49
45
  tslib_1.__metadata("design:type", Function),
50
- tslib_1.__metadata("design:paramtypes", [String, Object]),
46
+ tslib_1.__metadata("design:paramtypes", [String]),
51
47
  tslib_1.__metadata("design:returntype", Promise)
52
48
  ], ConstructionTypeQuery.prototype, "constructionType", null);
53
49
  tslib_1.__decorate([
54
50
  (0, type_graphql_1.Query)(returns => construction_type_type_1.ConstructionTypeList, { description: 'To fetch multiple ConstructionTypes' }),
55
51
  tslib_1.__param(0, (0, type_graphql_1.Args)()),
56
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
57
52
  tslib_1.__metadata("design:type", Function),
58
- tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
53
+ tslib_1.__metadata("design:paramtypes", [shell_1.ListParam]),
59
54
  tslib_1.__metadata("design:returntype", Promise)
60
55
  ], ConstructionTypeQuery.prototype, "constructionTypes", null);
61
56
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"construction-type-query.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AACnF,iDAAuG;AACvG,yDAAgD;AAChD,2DAAsD;AACtD,qEAA+D;AAC/D,mGAA6F;AAGtF,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAE1B,AAAN,KAAK,CAAC,gBAAgB,CAAY,EAAU,EAAS,OAAwB;QAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,OAAO,MAAM,IAAA,qBAAa,EAAC,oCAAgB,CAAC,CAAC,OAAO,CAAC;YACnD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,iBAAiB,CAAS,MAAiB,EAAS,OAAwB;QAChF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,oCAAgB,CAAC;SAClD,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAGK,AAAN,KAAK,CAAC,uBAAuB,CAAS,gBAAkC;QACtE,OAAO,MAAM,IAAA,qBAAa,EAAC,iDAAsB,CAAC,CAAC,IAAI,CAAC;YACtD,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE;YACxD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC3B,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAS,gBAAkC;QACrD,OAAO,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjF,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,gBAAkC;QACtD,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAA;IAChF,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,gBAAkC;QACtD,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAA;IAChF,CAAC;CACF,CAAA;AA/CY,sDAAqB;AAE1B;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,oCAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAC5E,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;6DAMnD;AAGK;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,6CAAoB,EAAE,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;IACtE,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;8DAYhD;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,iDAAsB,CAAC,CAAC;IACjB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAmB,oCAAgB;;oEAKvE;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAmB,oCAAgB;;mDAEtD;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAmB,oCAAgB;;oDAEvD;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAmB,oCAAgB;;oDAEvD;gCA9CU,qBAAqB;IADjC,IAAA,uBAAQ,EAAC,oCAAgB,CAAC;GACd,qBAAqB,CA+CjC","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ConstructionType } from './construction-type'\nimport { ConstructionTypeList } from './construction-type-type'\nimport { ConstructionDetailType } from '../construction-detail-type/construction-detail-type'\n\n@Resolver(ConstructionType)\nexport class ConstructionTypeQuery {\n @Query(returns => ConstructionType!, { nullable: true, description: 'To fetch a ConstructionType' })\n async constructionType(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<ConstructionType> {\n const { domain } = context.state\n\n return await getRepository(ConstructionType).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ConstructionTypeList, { description: 'To fetch multiple ConstructionTypes' })\n async constructionTypes(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ConstructionTypeList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(ConstructionType)\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [ConstructionDetailType])\n async constructionDetailTypes(@Root() constructionType: ConstructionType): Promise<ConstructionDetailType[]> {\n return await getRepository(ConstructionDetailType).find({\n where: { constructionType: { id: constructionType.id } },\n order: { sequence: 'ASC' }\n })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() constructionType: ConstructionType): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: constructionType.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() constructionType: ConstructionType): Promise<User> {\n return await getRepository(User).findOneBy({ id: constructionType.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() constructionType: ConstructionType): Promise<User> {\n return await getRepository(User).findOneBy({ id: constructionType.creatorId })\n }\n}\n"]}
1
+ {"version":3,"file":"construction-type-query.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ConstructionType } from './construction-type'\nimport { ConstructionTypeList } from './construction-type-type'\nimport { ConstructionDetailType } from '../construction-detail-type/construction-detail-type'\n\n@Resolver(ConstructionType)\nexport class ConstructionTypeQuery {\n @Query(returns => ConstructionType!, { nullable: true, description: 'To fetch a ConstructionType' })\n async constructionType(@Arg('id') id: string): Promise<ConstructionType> {\n return await getRepository(ConstructionType).findOne({\n where: { id }\n })\n }\n\n @Query(returns => ConstructionTypeList, { description: 'To fetch multiple ConstructionTypes' })\n async constructionTypes(@Args() params: ListParam): Promise<ConstructionTypeList> {\n const queryBuilder = getQueryBuilderFromListParams({\n params,\n repository: await getRepository(ConstructionType)\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [ConstructionDetailType])\n async constructionDetailTypes(@Root() constructionType: ConstructionType): Promise<ConstructionDetailType[]> {\n return await getRepository(ConstructionDetailType).find({\n where: { constructionType: { id: constructionType.id } },\n order: { sequence: 'ASC' }\n })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() constructionType: ConstructionType): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: constructionType.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() constructionType: ConstructionType): Promise<User> {\n return await getRepository(User).findOneBy({ id: constructionType.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() constructionType: ConstructionType): Promise<User> {\n return await getRepository(User).findOneBy({ id: constructionType.creatorId })\n }\n}\n"]}
@@ -3,6 +3,7 @@ export declare class ConstructionTypePatch {
3
3
  id?: string;
4
4
  name?: string;
5
5
  description?: string;
6
+ projectType?: string;
6
7
  cuFlag?: string;
7
8
  }
8
9
  export declare class ConstructionTypeList {
@@ -19,6 +19,10 @@ tslib_1.__decorate([
19
19
  (0, type_graphql_1.Field)({ nullable: true }),
20
20
  tslib_1.__metadata("design:type", String)
21
21
  ], ConstructionTypePatch.prototype, "description", void 0);
22
+ tslib_1.__decorate([
23
+ (0, type_graphql_1.Field)({ nullable: true }),
24
+ tslib_1.__metadata("design:type", String)
25
+ ], ConstructionTypePatch.prototype, "projectType", void 0);
22
26
  tslib_1.__decorate([
23
27
  (0, type_graphql_1.Field)({ nullable: true }),
24
28
  tslib_1.__metadata("design:type", String)
@@ -1 +1 @@
1
- {"version":3,"file":"construction-type-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,2DAAsD;AAG/C,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAYjC,CAAA;AAZY,sDAAqB;AAEhC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDAC3B;AAGX;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACX;gCAXJ,qBAAqB;IADjC,IAAA,wBAAS,GAAE;GACC,qBAAqB,CAYjC;AAGM,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAMhC,CAAA;AANY,oDAAoB;AAE/B;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oCAAgB,CAAC,CAAC;;mDACT;AAGzB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;mDACN;+BALF,oBAAoB;IADhC,IAAA,yBAAU,GAAE;GACA,oBAAoB,CAMhC","sourcesContent":["import { ObjectType, Field, InputType, Int, ID } from 'type-graphql'\nimport { ConstructionType } from './construction-type'\n\n@InputType()\nexport class ConstructionTypePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class ConstructionTypeList {\n @Field(type => [ConstructionType])\n items: ConstructionType[]\n\n @Field(type => Int)\n total: number\n}\n"]}
1
+ {"version":3,"file":"construction-type-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,2DAAsD;AAG/C,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAejC,CAAA;AAfY,sDAAqB;AAEhC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDAC3B;AAGX;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACX;gCAdJ,qBAAqB;IADjC,IAAA,wBAAS,GAAE;GACC,qBAAqB,CAejC;AAGM,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAMhC,CAAA;AANY,oDAAoB;AAE/B;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oCAAgB,CAAC,CAAC;;mDACT;AAGzB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;mDACN;+BALF,oBAAoB;IADhC,IAAA,yBAAU,GAAE;GACA,oBAAoB,CAMhC","sourcesContent":["import { ObjectType, Field, InputType, Int, ID } from 'type-graphql'\nimport { ConstructionType } from './construction-type'\n\n@InputType()\nexport class ConstructionTypePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n projectType?: string\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class ConstructionTypeList {\n @Field(type => [ConstructionType])\n items: ConstructionType[]\n\n @Field(type => Int)\n total: number\n}\n"]}
@@ -7,6 +7,7 @@ export declare class ConstructionType {
7
7
  domainId?: string;
8
8
  name?: string;
9
9
  description?: string;
10
+ projectType?: string;
10
11
  constructionDetailTypes?: ConstructionDetailType[];
11
12
  createdAt?: Date;
12
13
  updatedAt?: Date;
@@ -34,6 +34,11 @@ tslib_1.__decorate([
34
34
  (0, type_graphql_1.Field)({ nullable: true }),
35
35
  tslib_1.__metadata("design:type", String)
36
36
  ], ConstructionType.prototype, "description", void 0);
37
+ tslib_1.__decorate([
38
+ (0, typeorm_1.Column)({ nullable: true, default: 'DSSP' }),
39
+ (0, type_graphql_1.Field)({ nullable: true }),
40
+ tslib_1.__metadata("design:type", String)
41
+ ], ConstructionType.prototype, "projectType", void 0);
37
42
  tslib_1.__decorate([
38
43
  (0, type_graphql_1.Field)(() => [construction_detail_type_1.ConstructionDetailType], { nullable: true }),
39
44
  (0, typeorm_1.OneToMany)(() => construction_detail_type_1.ConstructionDetailType, constructionDetailType => constructionDetailType.constructionType),
@@ -1 +1 @@
1
- {"version":3,"file":"construction-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type.ts"],"names":[],"mappings":";;;;AAAA,qCAWgB;AAChB,+CAAoD;AACpD,iDAA8C;AAC9C,yDAAgD;AAChD,mGAA6F;AAQtF,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAkD5B,CAAA;AAlDY,4CAAgB;AAGlB;IAFR,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;4CACC;AAInB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjB,cAAM;gDAAA;AAGf;IADC,IAAA,oBAAU,EAAC,CAAC,gBAAkC,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;;kDAC3D;AAIjB;IAFC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACb;AAIb;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACN;AAKpB;IAFC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,CAAC,iDAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzD,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,iDAAsB,EAAE,sBAAsB,CAAC,EAAE,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;;iEACzD;AAIlD;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;mDAAA;AAIhB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;mDAAA;AAIhB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;mDAAA;AAIhB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;iDAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,gBAAkC,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;;mDAC3D;AAIlB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;iDAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,gBAAkC,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;;mDAC3D;2BAjDP,gBAAgB;IAN5B,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,wBAAwB,EAAE,CAAC,gBAAkC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE;QACzH,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,sBAAsB;KAC9B,CAAC;IACD,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;GACxB,gBAAgB,CAkD5B","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n DeleteDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n PrimaryGeneratedColumn,\n OneToMany\n} from 'typeorm'\nimport { ObjectType, Field, ID } from 'type-graphql'\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ConstructionDetailType } from '../construction-detail-type/construction-detail-type'\n\n@Entity()\n@Index('ix_construction_type_0', (constructionType: ConstructionType) => [constructionType.domain, constructionType.name], {\n unique: true,\n where: '\"deleted_at\" IS NULL'\n})\n@ObjectType({ description: '공종 타입' })\nexport class ConstructionType {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field({ nullable: true })\n domain?: Domain\n\n @RelationId((constructionType: ConstructionType) => constructionType.domain)\n domainId?: string\n\n @Column()\n @Field({ nullable: true })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n // 상세 공종 정보 (하위 테이블 참조)\n @Field(() => [ConstructionDetailType], { nullable: true })\n @OneToMany(() => ConstructionDetailType, constructionDetailType => constructionDetailType.constructionType)\n constructionDetailTypes?: ConstructionDetailType[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @DeleteDateColumn()\n @Field({ nullable: true })\n deletedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((constructionType: ConstructionType) => constructionType.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((constructionType: ConstructionType) => constructionType.updater)\n updaterId?: string\n}\n"]}
1
+ {"version":3,"file":"construction-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n DeleteDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n PrimaryGeneratedColumn,\n OneToMany\n} from 'typeorm'\nimport { ObjectType, Field, ID } from 'type-graphql'\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ConstructionDetailType } from '../construction-detail-type/construction-detail-type'\n\n@Entity()\n@Index('ix_construction_type_0', (constructionType: ConstructionType) => [constructionType.domain, constructionType.name], {\n unique: true,\n where: '\"deleted_at\" IS NULL'\n})\n@ObjectType({ description: '공종 타입' })\nexport class ConstructionType {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field({ nullable: true })\n domain?: Domain\n\n @RelationId((constructionType: ConstructionType) => constructionType.domain)\n domainId?: string\n\n @Column()\n @Field({ nullable: true })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n @Column({ nullable: true, default: 'DSSP' })\n @Field({ nullable: true })\n projectType?: string\n\n // 상세 공종 정보 (하위 테이블 참조)\n @Field(() => [ConstructionDetailType], { nullable: true })\n @OneToMany(() => ConstructionDetailType, constructionDetailType => constructionDetailType.constructionType)\n constructionDetailTypes?: ConstructionDetailType[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @DeleteDateColumn()\n @Field({ nullable: true })\n deletedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((constructionType: ConstructionType) => constructionType.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((constructionType: ConstructionType) => constructionType.updater)\n updaterId?: string\n}\n"]}
@@ -9,7 +9,7 @@ export * from './manager/manager';
9
9
  export * from './manager/manager-type';
10
10
  export * from './task/task';
11
11
  export * from './project/project';
12
- export declare const entities: (typeof import("./project/project").Project | typeof import("./task/task").Task | typeof import("./task-resource/task-resource").TaskResource | typeof import("./resource/resource").Resource | typeof import("./construction-type/construction-type").ConstructionType | typeof import("./construction-detail-type/construction-detail-type").ConstructionDetailType | typeof import("./inspection-part/inspection-part").InspectionPart | typeof import("./inspection-drawing-type/inspection-drawing-type").InspectionDrawingType | typeof import("./worker-type/worker-type").WorkerType | typeof import("./manager/manager").Manager)[];
12
+ export declare const entities: (typeof import("./project/project").Project | typeof import("./task/task").Task | typeof import("./task-checklist-binding/task-checklist-binding").TaskChecklistBinding | typeof import("./task-resource/task-resource").TaskResource | typeof import("./resource/resource").Resource | typeof import("./construction-type/construction-type").ConstructionType | typeof import("./construction-detail-type/construction-detail-type").ConstructionDetailType | typeof import("./inspection-part/inspection-part").InspectionPart | typeof import("./inspection-drawing-type/inspection-drawing-type").InspectionDrawingType | typeof import("./worker-type/worker-type").WorkerType | typeof import("./manager/manager").Manager)[];
13
13
  export declare const schema: {
14
- resolverClasses: (typeof import("./task-resource/task-resource-query").TaskResourceQuery | typeof import("./task-resource/task-resource-mutation").TaskResourceMutation | typeof import("./resource/resource-query").ResourceQuery | typeof import("./resource/resource-mutation").ResourceMutation | typeof import("./construction-detail-type/construction-detail-type-query").ConstructionDetailTypeQuery | typeof import("./construction-detail-type/construction-detail-type-mutation").ConstructionDetailTypeMutation | typeof import("./construction-type/construction-type-query").ConstructionTypeQuery | typeof import("./construction-type/construction-type-mutation").ConstructionTypeMutation | typeof import("./inspection-drawing-type/inspection-drawing-type-query").InspectionDrawingTypeQuery | typeof import("./inspection-drawing-type/inspection-drawing-type-mutation").InspectionDrawingTypeMutation | typeof import("./inspection-part/inspection-part-query").InspectionPartQuery | typeof import("./inspection-part/inspection-part-mutation").InspectionPartMutation | typeof import("./worker-type/worker-type-query").WorkerTypeQuery | typeof import("./worker-type/worker-type-mutation").WorkerTypeMutation | typeof import("./manager/manager-query").ManagerQuery | typeof import("./manager/manager-mutation").ManagerMutation | typeof import("./task/task-query").TaskQuery | typeof import("./task/task-mutation").TaskMutation | typeof import("./project/project-query").ProjectQuery | typeof import("./project/project-mutation").ProjectMutation)[];
14
+ resolverClasses: (typeof import("./task-resource/task-resource-query").TaskResourceQuery | typeof import("./task-resource/task-resource-mutation").TaskResourceMutation | typeof import("./resource/resource-query").ResourceQuery | typeof import("./resource/resource-mutation").ResourceMutation | typeof import("./construction-detail-type/construction-detail-type-query").ConstructionDetailTypeQuery | typeof import("./construction-detail-type/construction-detail-type-mutation").ConstructionDetailTypeMutation | typeof import("./construction-type/construction-type-query").ConstructionTypeQuery | typeof import("./construction-type/construction-type-mutation").ConstructionTypeMutation | typeof import("./inspection-drawing-type/inspection-drawing-type-query").InspectionDrawingTypeQuery | typeof import("./inspection-drawing-type/inspection-drawing-type-mutation").InspectionDrawingTypeMutation | typeof import("./inspection-part/inspection-part-query").InspectionPartQuery | typeof import("./inspection-part/inspection-part-mutation").InspectionPartMutation | typeof import("./worker-type/worker-type-query").WorkerTypeQuery | typeof import("./worker-type/worker-type-mutation").WorkerTypeMutation | typeof import("./manager/manager-query").ManagerQuery | typeof import("./manager/manager-mutation").ManagerMutation | typeof import("./task/task-query").TaskQuery | typeof import("./task/task-mutation").TaskMutation | typeof import("./project/project-query").ProjectQuery | typeof import("./project/project-mutation").ProjectMutation | typeof import("./task-checklist-binding/task-checklist-binding-query").TaskChecklistBindingQuery | typeof import("./task-checklist-binding/task-checklist-binding-mutation").TaskChecklistBindingMutation)[];
15
15
  };
@@ -25,6 +25,7 @@ const worker_type_1 = require("./worker-type");
25
25
  const manager_1 = require("./manager");
26
26
  const task_1 = require("./task");
27
27
  const project_1 = require("./project");
28
+ const task_checklist_binding_1 = require("./task-checklist-binding");
28
29
  exports.entities = [
29
30
  /* ENTITIES */
30
31
  ...task_resource_1.entities,
@@ -36,7 +37,8 @@ exports.entities = [
36
37
  ...worker_type_1.entities,
37
38
  ...manager_1.entities,
38
39
  ...task_1.entities,
39
- ...project_1.entities
40
+ ...project_1.entities,
41
+ ...task_checklist_binding_1.entities
40
42
  ];
41
43
  exports.schema = {
42
44
  resolverClasses: [
@@ -50,7 +52,8 @@ exports.schema = {
50
52
  ...worker_type_1.resolvers,
51
53
  ...manager_1.resolvers,
52
54
  ...task_1.resolvers,
53
- ...project_1.resolvers
55
+ ...project_1.resolvers,
56
+ ...task_checklist_binding_1.resolvers
54
57
  ]
55
58
  };
56
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;AAAA,yBAAyB;AACzB,wEAA6C;AAC7C,8DAAmC;AACnC,8FAAmE;AACnE,gFAAqD;AACrD,4FAAiE;AACjE,4EAAiD;AACjD,oEAAyC;AACzC,4DAAiC;AACjC,iEAAsC;AACtC,sDAA2B;AAC3B,4DAAiC;AAEjC,mCAAmC;AACnC,mDAAsG;AACtG,yCAAyF;AACzF,yEAGmC;AACnC,2DAAkH;AAClH,uEAAkI;AAClI,uDAA4G;AAC5G,+CAAgG;AAChG,uCAAsF;AACtF,iCAA6E;AAC7E,uCAAsF;AAEzE,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,wBAAoB;IACvB,GAAG,mBAAgB;IACnB,GAAG,mCAA8B;IACjC,GAAG,4BAAwB;IAC3B,GAAG,kCAA6B;IAChC,GAAG,0BAAsB;IACzB,GAAG,sBAAkB;IACrB,GAAG,kBAAe;IAClB,GAAG,eAAY;IACf,GAAG,kBAAe;CACnB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,yBAAqB;QACxB,GAAG,oBAAiB;QACpB,GAAG,oCAA+B;QAClC,GAAG,6BAAyB;QAC5B,GAAG,mCAA8B;QACjC,GAAG,2BAAuB;QAC1B,GAAG,uBAAmB;QACtB,GAAG,mBAAgB;QACnB,GAAG,gBAAa;QAChB,GAAG,mBAAgB;KACpB;CACF,CAAA","sourcesContent":["/* EXPORT ENTITY TYPES */\nexport * from './task-resource/task-resource'\nexport * from './resource/resource'\nexport * from './construction-detail-type/construction-detail-type'\nexport * from './construction-type/construction-type'\nexport * from './inspection-drawing-type/inspection-drawing-type'\nexport * from './inspection-part/inspection-part'\nexport * from './worker-type/worker-type'\nexport * from './manager/manager'\nexport * from './manager/manager-type'\nexport * from './task/task'\nexport * from './project/project'\n\n/* IMPORT ENTITIES AND RESOLVERS */\nimport { entities as TaskResourceEntities, resolvers as TaskResourceResolvers } from './task-resource'\nimport { entities as ResourceEntities, resolvers as ResourceResolvers } from './resource'\nimport {\n entities as ConstructionDetailTypeEntities,\n resolvers as ConstructionDetailTypeResolvers\n} from './construction-detail-type'\nimport { entities as ConstructionTypeEntities, resolvers as ConstructionTypeResolvers } from './construction-type'\nimport { entities as InspectionDrawingTypeEntities, resolvers as InspectionDrawingTypeResolvers } from './inspection-drawing-type'\nimport { entities as InspectionPartEntities, resolvers as InspectionPartResolvers } from './inspection-part'\nimport { entities as WorkerTypeEntities, resolvers as WorkerTypeResolvers } from './worker-type'\nimport { entities as ManagerEntities, resolvers as ManagerResolvers } from './manager'\nimport { entities as TaskEntities, resolvers as TaskResolvers } from './task'\nimport { entities as ProjectEntities, resolvers as ProjectResolvers } from './project'\n\nexport const entities = [\n /* ENTITIES */\n ...TaskResourceEntities,\n ...ResourceEntities,\n ...ConstructionDetailTypeEntities,\n ...ConstructionTypeEntities,\n ...InspectionDrawingTypeEntities,\n ...InspectionPartEntities,\n ...WorkerTypeEntities,\n ...ManagerEntities,\n ...TaskEntities,\n ...ProjectEntities\n]\n\nexport const schema = {\n resolverClasses: [\n /* RESOLVER CLASSES */\n ...TaskResourceResolvers,\n ...ResourceResolvers,\n ...ConstructionDetailTypeResolvers,\n ...ConstructionTypeResolvers,\n ...InspectionDrawingTypeResolvers,\n ...InspectionPartResolvers,\n ...WorkerTypeResolvers,\n ...ManagerResolvers,\n ...TaskResolvers,\n ...ProjectResolvers\n ]\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;AAAA,yBAAyB;AACzB,wEAA6C;AAC7C,8DAAmC;AACnC,8FAAmE;AACnE,gFAAqD;AACrD,4FAAiE;AACjE,4EAAiD;AACjD,oEAAyC;AACzC,4DAAiC;AACjC,iEAAsC;AACtC,sDAA2B;AAC3B,4DAAiC;AAEjC,mCAAmC;AACnC,mDAAsG;AACtG,yCAAyF;AACzF,yEAGmC;AACnC,2DAAkH;AAClH,uEAAkI;AAClI,uDAA4G;AAC5G,+CAAgG;AAChG,uCAAsF;AACtF,iCAA6E;AAC7E,uCAAsF;AACtF,qEAA+H;AAElH,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,wBAAoB;IACvB,GAAG,mBAAgB;IACnB,GAAG,mCAA8B;IACjC,GAAG,4BAAwB;IAC3B,GAAG,kCAA6B;IAChC,GAAG,0BAAsB;IACzB,GAAG,sBAAkB;IACrB,GAAG,kBAAe;IAClB,GAAG,eAAY;IACf,GAAG,kBAAe;IAClB,GAAG,iCAA4B;CAChC,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,yBAAqB;QACxB,GAAG,oBAAiB;QACpB,GAAG,oCAA+B;QAClC,GAAG,6BAAyB;QAC5B,GAAG,mCAA8B;QACjC,GAAG,2BAAuB;QAC1B,GAAG,uBAAmB;QACtB,GAAG,mBAAgB;QACnB,GAAG,gBAAa;QAChB,GAAG,mBAAgB;QACnB,GAAG,kCAA6B;KACjC;CACF,CAAA","sourcesContent":["/* EXPORT ENTITY TYPES */\nexport * from './task-resource/task-resource'\nexport * from './resource/resource'\nexport * from './construction-detail-type/construction-detail-type'\nexport * from './construction-type/construction-type'\nexport * from './inspection-drawing-type/inspection-drawing-type'\nexport * from './inspection-part/inspection-part'\nexport * from './worker-type/worker-type'\nexport * from './manager/manager'\nexport * from './manager/manager-type'\nexport * from './task/task'\nexport * from './project/project'\n\n/* IMPORT ENTITIES AND RESOLVERS */\nimport { entities as TaskResourceEntities, resolvers as TaskResourceResolvers } from './task-resource'\nimport { entities as ResourceEntities, resolvers as ResourceResolvers } from './resource'\nimport {\n entities as ConstructionDetailTypeEntities,\n resolvers as ConstructionDetailTypeResolvers\n} from './construction-detail-type'\nimport { entities as ConstructionTypeEntities, resolvers as ConstructionTypeResolvers } from './construction-type'\nimport { entities as InspectionDrawingTypeEntities, resolvers as InspectionDrawingTypeResolvers } from './inspection-drawing-type'\nimport { entities as InspectionPartEntities, resolvers as InspectionPartResolvers } from './inspection-part'\nimport { entities as WorkerTypeEntities, resolvers as WorkerTypeResolvers } from './worker-type'\nimport { entities as ManagerEntities, resolvers as ManagerResolvers } from './manager'\nimport { entities as TaskEntities, resolvers as TaskResolvers } from './task'\nimport { entities as ProjectEntities, resolvers as ProjectResolvers } from './project'\nimport { entities as TaskChecklistBindingEntities, resolvers as TaskChecklistBindingResolvers } from './task-checklist-binding'\n\nexport const entities = [\n /* ENTITIES */\n ...TaskResourceEntities,\n ...ResourceEntities,\n ...ConstructionDetailTypeEntities,\n ...ConstructionTypeEntities,\n ...InspectionDrawingTypeEntities,\n ...InspectionPartEntities,\n ...WorkerTypeEntities,\n ...ManagerEntities,\n ...TaskEntities,\n ...ProjectEntities,\n ...TaskChecklistBindingEntities\n]\n\nexport const schema = {\n resolverClasses: [\n /* RESOLVER CLASSES */\n ...TaskResourceResolvers,\n ...ResourceResolvers,\n ...ConstructionDetailTypeResolvers,\n ...ConstructionTypeResolvers,\n ...InspectionDrawingTypeResolvers,\n ...InspectionPartResolvers,\n ...WorkerTypeResolvers,\n ...ManagerResolvers,\n ...TaskResolvers,\n ...ProjectResolvers,\n ...TaskChecklistBindingResolvers\n ]\n}\n"]}