@things-factory/meta-ui 8.0.6 → 9.0.0-beta.12
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/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/utils/service-util.d.ts +2 -2
- package/dist-client/utils/service-util.js +4 -4
- package/dist-client/utils/service-util.js.map +1 -1
- package/dist-server/service/index.d.ts +2 -2
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +24 -24
- package/client/bootstrap.ts +0 -170
- package/client/component/filter/filter-form-meta-code-select.ts +0 -102
- package/client/component/filter/filter-form-meta-object-select.ts +0 -107
- package/client/component/filter/filter-grist-meta-code-select.ts +0 -97
- package/client/component/filter/filter-grist-meta-object-select.ts +0 -102
- package/client/component/grist/editor/grist-editor-code-input.js +0 -96
- package/client/component/grist/editor/grist-editor-meta-code-selector.js +0 -157
- package/client/component/grist/editor/grist-editor-meta-object-selector.js +0 -122
- package/client/component/grist/renderer/grist-renderer-code-input.js +0 -20
- package/client/component/grist/renderer/grist-renderer-meta-code-selector.js +0 -28
- package/client/component/grist/renderer/grist-renderer-meta-object-selector.js +0 -25
- package/client/component/popup/code-input-editor-popup.js +0 -111
- package/client/component/popup/file-upload-popup.js +0 -129
- package/client/component/popup/meta-object-selector-popup.ts +0 -356
- package/client/component/popup/record-based-code-editor-popup.ts +0 -141
- package/client/dynamic-menus.ts +0 -38
- package/client/index.ts +0 -18
- package/client/load-components.ts +0 -17
- package/client/mixin/meta-base-mixin.js +0 -323
- package/client/mixin/meta-basic-grist-mixin.js +0 -283
- package/client/mixin/meta-button-mixin.js +0 -116
- package/client/mixin/meta-form-mixin.js +0 -435
- package/client/mixin/meta-grist-tab-mixin.js +0 -335
- package/client/mixin/meta-main-tab-mixin.js +0 -267
- package/client/mixin/meta-master-detail-mixin.js +0 -395
- package/client/mixin/meta-service-mixin.js +0 -306
- package/client/mixin/meta-tab-detail-mixin.js +0 -283
- package/client/mixin/meta-tab-mixin.js +0 -190
- package/client/pages/activity/meta-activity-define-page.js +0 -422
- package/client/pages/activity/meta-activity-list-page.js +0 -262
- package/client/pages/activity/meta-activity-viewer-element.js +0 -35
- package/client/pages/activity/meta-activity-writer-element.js +0 -48
- package/client/pages/activity/meta-activiy-mixin.js +0 -79
- package/client/pages/button-role/button-role-detail.js +0 -50
- package/client/pages/button-role/button-role-page.js +0 -25
- package/client/pages/doc-number/doc-number-page.js +0 -24
- package/client/pages/doc-number/next-doc-number-popup.js +0 -25
- package/client/pages/entity/config-entity.js +0 -955
- package/client/pages/entity/main-menu-selector.js +0 -245
- package/client/pages/history/history-copy-list-popup.js +0 -145
- package/client/pages/history/history-json-list-popup.js +0 -159
- package/client/pages/menu/dynamic-menu-template.js +0 -92
- package/client/pages/menu/dynamic-menu.ts +0 -744
- package/client/pages/menu/export-menu-popup.js +0 -468
- package/client/pages/meta-form-element.js +0 -9
- package/client/pages/meta-grist-element.js +0 -12
- package/client/pages/meta-grist-page.js +0 -16
- package/client/pages/meta-grist-tab-element.js +0 -16
- package/client/pages/meta-grist-tab-page.js +0 -16
- package/client/pages/meta-main-tab-element.js +0 -12
- package/client/pages/meta-main-tab-page.js +0 -16
- package/client/pages/meta-master-detail-element.js +0 -12
- package/client/pages/meta-master-detail-page.js +0 -16
- package/client/pages/meta-tab-detail-element.js +0 -12
- package/client/pages/meta-tab-detail-page.js +0 -16
- package/client/pages/meta-tab-element.js +0 -15
- package/client/pages/printer-device/printer-device-page.js +0 -24
- package/client/pages/template/doc-template-page.js +0 -24
- package/client/pages/template/template-file-page.js +0 -24
- package/client/pages/terms/config-terminology.js +0 -214
- package/client/pages/work-code/work-code-detail-popup.js +0 -16
- package/client/pages/work-code/work-code-page.js +0 -23
- package/client/route.ts +0 -36
- package/client/tsconfig.json +0 -13
- package/client/utils/grist-default-value.js +0 -36
- package/client/utils/meta-api.js +0 -811
- package/client/utils/meta-crypto.js +0 -52
- package/client/utils/meta-ui-util.js +0 -3304
- package/client/utils/rest-service-util.js +0 -328
- package/client/utils/service-util.js +0 -1327
- package/client/utils/terms-util.ts +0 -119
- package/client/utils/ui-util.js +0 -338
- package/client/utils/value-util.js +0 -234
- package/server/activity/CommonActivity.ts +0 -68
- package/server/index.ts +0 -3
- package/server/routes.ts +0 -61
- package/server/service/button-role/button-role-mutation.ts +0 -105
- package/server/service/button-role/button-role-query.ts +0 -53
- package/server/service/button-role/button-role-type.ts +0 -39
- package/server/service/button-role/button-role.ts +0 -61
- package/server/service/button-role/index.ts +0 -7
- package/server/service/dynamic-menu/dynamic-menu-query.ts +0 -270
- package/server/service/dynamic-menu/dynamic-menu-type.ts +0 -74
- package/server/service/dynamic-menu/index.ts +0 -3
- package/server/service/entity-event-subscriber/entity-event-subscriber.ts +0 -80
- package/server/service/entity-event-subscriber/index.ts +0 -3
- package/server/service/index.ts +0 -41
- package/server/service/menu-button-auth/index.ts +0 -7
- package/server/service/menu-button-auth/menu-button-auth-mutation.ts +0 -133
- package/server/service/menu-button-auth/menu-button-auth-query.ts +0 -138
- package/server/service/menu-button-auth/menu-button-auth-type.ts +0 -63
- package/server/service/menu-button-auth/menu-button-auth.ts +0 -92
- package/server/service/meta-activity/index.ts +0 -5
- package/server/service/meta-activity/meta-activity-mutation.ts +0 -191
- package/server/service/meta-activity/meta-activity-query.ts +0 -43
- package/server/service/meta-activity/meta-activity-type.ts +0 -56
- package/server/service/set-translations/index.ts +0 -3
- package/server/service/set-translations/set-translation-resolver.ts +0 -63
- package/server/service/work-code/index.ts +0 -6
- package/server/service/work-code/work-code-mutation.ts +0 -147
- package/server/service/work-code/work-code-query.ts +0 -67
- package/server/service/work-code/work-code-type.ts +0 -60
- package/server/service/work-code/work-code.ts +0 -83
- package/server/service/work-code-detail/index.ts +0 -6
- package/server/service/work-code-detail/work-code-detail-mutation.ts +0 -149
- package/server/service/work-code-detail/work-code-detail-query.ts +0 -59
- package/server/service/work-code-detail/work-code-detail-type.ts +0 -50
- package/server/service/work-code-detail/work-code-detail.ts +0 -82
- package/server/tsconfig.json +0 -9
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
|
|
2
|
-
import { In } from 'typeorm'
|
|
3
|
-
import { ActivityInstallations, Activity, ActivityStatus, ActivityTemplate } from '@things-factory/worklist'
|
|
4
|
-
import { MetaActivityPatch } from './meta-activity-type'
|
|
5
|
-
import { Menu } from '@things-factory/menu-base'
|
|
6
|
-
import { callback } from './../../activity/CommonActivity'
|
|
7
|
-
const path = require('path')
|
|
8
|
-
const { appRootPath } = require('@things-factory/env')
|
|
9
|
-
const AppPackage = require(path.resolve(appRootPath, 'package.json'))
|
|
10
|
-
|
|
11
|
-
@Resolver(Activity)
|
|
12
|
-
export class MetaActivityMutation {
|
|
13
|
-
async findMenuModel(tx: any, menuObj: any) {
|
|
14
|
-
if (!menuObj) return []
|
|
15
|
-
|
|
16
|
-
let menu = await tx.getRepository(Menu).findOne({ where: { id: menuObj.id } })
|
|
17
|
-
if (!menu) return []
|
|
18
|
-
|
|
19
|
-
return [
|
|
20
|
-
{
|
|
21
|
-
name: 'relation-menu',
|
|
22
|
-
description: JSON.stringify({
|
|
23
|
-
id: menu.id,
|
|
24
|
-
name: menu.name,
|
|
25
|
-
routing: menu.routing
|
|
26
|
-
})
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
name: 'customData',
|
|
30
|
-
inout: 'inout'
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async removeActivityTemplate(activity: Activity) {
|
|
36
|
-
if (activity) {
|
|
37
|
-
if (ActivityInstallations.get(activity.name)) {
|
|
38
|
-
delete ActivityInstallations.templates[activity.name]
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async addActivityTemplate(activity: Activity) {
|
|
44
|
-
if (activity.state == ActivityStatus.Released) {
|
|
45
|
-
ActivityInstallations.installActivityTemplate({
|
|
46
|
-
name: `${activity.name}`,
|
|
47
|
-
release: AppPackage.version,
|
|
48
|
-
description: activity.description,
|
|
49
|
-
provider: AppPackage.provider,
|
|
50
|
-
// category: activity.category,
|
|
51
|
-
activityType: activity.activityType,
|
|
52
|
-
priority: activity.priority,
|
|
53
|
-
// searchKeys: [],
|
|
54
|
-
// startable: true,
|
|
55
|
-
startingType: activity.startingType,
|
|
56
|
-
model: activity.model,
|
|
57
|
-
uiType: activity.uiType,
|
|
58
|
-
uiSource: activity.uiSource,
|
|
59
|
-
viewType: activity.viewType,
|
|
60
|
-
viewSource: activity.viewSource,
|
|
61
|
-
activity: activity,
|
|
62
|
-
callback
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
@Directive('@transaction')
|
|
68
|
-
@Directive('@privilege(category: "activity", privilege: "mutation", domainOwnerGranted: true)')
|
|
69
|
-
@Mutation(returns => [Activity], { description: "To modify multiple MetaActivities' information" })
|
|
70
|
-
async updateMultipleMetaActivity(
|
|
71
|
-
@Arg('patches', type => [MetaActivityPatch]) patches: MetaActivityPatch[],
|
|
72
|
-
@Ctx() context: ResolverContext
|
|
73
|
-
): Promise<Activity[]> {
|
|
74
|
-
const { domain, user, tx } = context.state
|
|
75
|
-
|
|
76
|
-
let results = []
|
|
77
|
-
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
78
|
-
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
79
|
-
const activityRepo = tx.getRepository(Activity)
|
|
80
|
-
|
|
81
|
-
if (_createRecords.length > 0) {
|
|
82
|
-
for (let i = 0; i < _createRecords.length; i++) {
|
|
83
|
-
const newRecord = _createRecords[i]
|
|
84
|
-
let model = await this.findMenuModel(tx, newRecord.menu)
|
|
85
|
-
const trxRecord = {
|
|
86
|
-
...newRecord,
|
|
87
|
-
model,
|
|
88
|
-
domain,
|
|
89
|
-
creator: user,
|
|
90
|
-
updater: user
|
|
91
|
-
}
|
|
92
|
-
const result = await activityRepo.save(trxRecord as any)
|
|
93
|
-
results.push({ ...result, cuFlag: '+' })
|
|
94
|
-
this.addActivityTemplate(trxRecord as any)
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (_updateRecords.length > 0) {
|
|
99
|
-
for (let i = 0; i < _updateRecords.length; i++) {
|
|
100
|
-
const updateRecord = _updateRecords[i]
|
|
101
|
-
let model = await this.findMenuModel(tx, updateRecord.menu)
|
|
102
|
-
const activity = await activityRepo.findOne({
|
|
103
|
-
where: { id: updateRecord.id },
|
|
104
|
-
/* history에 항상 반영될 수 있도록 relations가 있어야 함. */
|
|
105
|
-
relations: ['domain', 'creator', 'updater']
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
const trxRecord = {
|
|
109
|
-
...activity,
|
|
110
|
-
...updateRecord,
|
|
111
|
-
model,
|
|
112
|
-
updater: user
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const result = await activityRepo.save(trxRecord as any)
|
|
116
|
-
results.push({ ...result, cuFlag: 'M' })
|
|
117
|
-
this.addActivityTemplate(trxRecord as any)
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return results
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@Directive('@transaction')
|
|
125
|
-
@Mutation(returns => Boolean, { description: 'To delete multiple MetaActivities' })
|
|
126
|
-
async deleteMetaActivities(
|
|
127
|
-
@Arg('ids', type => [String]) ids: string[],
|
|
128
|
-
@Ctx() context: ResolverContext
|
|
129
|
-
): Promise<boolean> {
|
|
130
|
-
const { domain, tx } = context.state
|
|
131
|
-
|
|
132
|
-
let activityRepo = tx.getRepository(Activity)
|
|
133
|
-
let deleteActivities: Activity[] = []
|
|
134
|
-
for (let i = 0; i < ids.length; i++) {
|
|
135
|
-
deleteActivities.push(
|
|
136
|
-
await activityRepo.findOne({
|
|
137
|
-
where: { id: ids[i] }
|
|
138
|
-
})
|
|
139
|
-
)
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
await tx.getRepository(Activity).delete({
|
|
143
|
-
domain: { id: domain.id },
|
|
144
|
-
id: In(ids)
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
for (let i = 0; i < deleteActivities.length; i++) {
|
|
148
|
-
await this.removeActivityTemplate(deleteActivities[i])
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return true
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
@Directive('@transaction')
|
|
155
|
-
@Mutation(returns => Boolean, { description: 'To install Activity Templates' })
|
|
156
|
-
async installActivityTemplate(@Ctx() context: ResolverContext): Promise<Boolean> {
|
|
157
|
-
const { domain, tx } = context.state
|
|
158
|
-
const releaseActivityTemplates: Activity[] = await tx.getRepository(Activity).find({
|
|
159
|
-
where: {
|
|
160
|
-
domain: { id: domain.id },
|
|
161
|
-
state: ActivityStatus.Released
|
|
162
|
-
}
|
|
163
|
-
})
|
|
164
|
-
|
|
165
|
-
;(releaseActivityTemplates || []).forEach(activity => {
|
|
166
|
-
if (activity.model && activity.model.some(x => x.name == 'relation-menu')) {
|
|
167
|
-
ActivityInstallations.installActivityTemplate({
|
|
168
|
-
name: `${activity.name}`,
|
|
169
|
-
release: AppPackage.version,
|
|
170
|
-
description: activity.description,
|
|
171
|
-
provider: AppPackage.provider,
|
|
172
|
-
// category: activity.category,
|
|
173
|
-
activityType: activity.activityType,
|
|
174
|
-
priority: activity.priority,
|
|
175
|
-
// searchKeys: [],
|
|
176
|
-
// startable: true,
|
|
177
|
-
startingType: activity.startingType,
|
|
178
|
-
model: activity.model,
|
|
179
|
-
uiType: activity.uiType,
|
|
180
|
-
uiSource: activity.uiSource,
|
|
181
|
-
viewType: activity.viewType,
|
|
182
|
-
viewSource: activity.viewSource,
|
|
183
|
-
activity: activity,
|
|
184
|
-
callback
|
|
185
|
-
})
|
|
186
|
-
}
|
|
187
|
-
})
|
|
188
|
-
|
|
189
|
-
return true
|
|
190
|
-
}
|
|
191
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
-
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
|
4
|
-
import { Activity } from '@things-factory/worklist'
|
|
5
|
-
import { MetaActivityList } from './meta-activity-type'
|
|
6
|
-
|
|
7
|
-
@Resolver(Activity)
|
|
8
|
-
export class MetaActivityQuery {
|
|
9
|
-
@Query(returns => MetaActivityList, { description: 'To fetch multiple Activities' })
|
|
10
|
-
async metaActivities(
|
|
11
|
-
@Args(type => ListParam) params: ListParam,
|
|
12
|
-
@Ctx() context: ResolverContext
|
|
13
|
-
): Promise<MetaActivityList> {
|
|
14
|
-
const { domain } = context.state
|
|
15
|
-
|
|
16
|
-
const queryBuilder = getQueryBuilderFromListParams({
|
|
17
|
-
domain,
|
|
18
|
-
params,
|
|
19
|
-
repository: getRepository(Activity),
|
|
20
|
-
alias: 'activity',
|
|
21
|
-
searchables: ['name', 'description', 'model']
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
const [items, total] = await queryBuilder.getManyAndCount()
|
|
25
|
-
|
|
26
|
-
return { items, total }
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@FieldResolver(type => Domain)
|
|
30
|
-
async domain(@Root() activity: Activity): Promise<Domain> {
|
|
31
|
-
return await getRepository(Domain).findOneBy({ id: activity.domainId })
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
@FieldResolver(type => User)
|
|
35
|
-
async updater(@Root() activity: Activity): Promise<User> {
|
|
36
|
-
return await getRepository(User).findOneBy({ id: activity.updaterId })
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@FieldResolver(type => User)
|
|
40
|
-
async creator(@Root() activity: Activity): Promise<User> {
|
|
41
|
-
return await getRepository(User).findOneBy({ id: activity.creatorId })
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { ObjectType, Field, InputType, Int, ID, Float, registerEnumType } from 'type-graphql'
|
|
3
|
-
import { ObjectRef } from '@things-factory/shell'
|
|
4
|
-
import { Activity } from '@things-factory/worklist'
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@InputType()
|
|
8
|
-
export class MetaActivityPatch {
|
|
9
|
-
@Field(type => ID, { nullable: true })
|
|
10
|
-
id?: string
|
|
11
|
-
|
|
12
|
-
@Field({ nullable: true })
|
|
13
|
-
name?: string
|
|
14
|
-
|
|
15
|
-
@Field({ nullable: true })
|
|
16
|
-
description?: string
|
|
17
|
-
|
|
18
|
-
@Field({ nullable: true })
|
|
19
|
-
state?: string
|
|
20
|
-
|
|
21
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
22
|
-
menu?: ObjectRef
|
|
23
|
-
|
|
24
|
-
@Field({ nullable: true })
|
|
25
|
-
activityType?: string
|
|
26
|
-
|
|
27
|
-
@Field({ nullable: true })
|
|
28
|
-
startingType?: string
|
|
29
|
-
|
|
30
|
-
@Field({ nullable: true })
|
|
31
|
-
multiple?: string
|
|
32
|
-
|
|
33
|
-
@Field({ nullable: true })
|
|
34
|
-
uiType?: string
|
|
35
|
-
|
|
36
|
-
@Field({ nullable: true })
|
|
37
|
-
uiSource?: string
|
|
38
|
-
|
|
39
|
-
@Field({ nullable: true })
|
|
40
|
-
viewType?: string
|
|
41
|
-
|
|
42
|
-
@Field({ nullable: true })
|
|
43
|
-
viewSource?: string
|
|
44
|
-
|
|
45
|
-
@Field()
|
|
46
|
-
cuFlag: string
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
@ObjectType()
|
|
50
|
-
export class MetaActivityList {
|
|
51
|
-
@Field(type => [Activity])
|
|
52
|
-
items: Activity[]
|
|
53
|
-
|
|
54
|
-
@Field(type => Int)
|
|
55
|
-
total: number
|
|
56
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import { resolve, join } from 'path'
|
|
3
|
-
|
|
4
|
-
import { Arg, Query, Resolver } from 'type-graphql'
|
|
5
|
-
|
|
6
|
-
@Resolver()
|
|
7
|
-
export class SetTranslationResolver {
|
|
8
|
-
@Query(returns => Boolean, { description: 'To save terms for entity columns in JSON files' })
|
|
9
|
-
async setTranslations(
|
|
10
|
-
@Arg('bundle') bundle: string,
|
|
11
|
-
@Arg('terms', type => [String]) terms: string[]
|
|
12
|
-
): Promise<Boolean> {
|
|
13
|
-
return await syncTranslationFiles(bundle, terms)
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function syncTranslationFiles(bundle, terms) {
|
|
18
|
-
const PACKAGES_PATH = getPackageRootPath();
|
|
19
|
-
const TRANSLATIONS_DIR_NAME = 'translations'
|
|
20
|
-
const JSON_EXT = 'json'
|
|
21
|
-
|
|
22
|
-
const TRANSLATIONS_PATH = join(PACKAGES_PATH, bundle, TRANSLATIONS_DIR_NAME)
|
|
23
|
-
|
|
24
|
-
const fileList = fs.readdirSync(TRANSLATIONS_PATH)
|
|
25
|
-
fileList.forEach(file => {
|
|
26
|
-
const ext = file.split('.').pop().toLowerCase()
|
|
27
|
-
if (ext === JSON_EXT) {
|
|
28
|
-
const translationFile = fs.readFileSync(join(TRANSLATIONS_PATH, file))
|
|
29
|
-
const translations = JSON.parse(translationFile.toString())
|
|
30
|
-
|
|
31
|
-
terms.forEach(term => {
|
|
32
|
-
if (!(term in translations)) {
|
|
33
|
-
const text = term.split('.').pop()
|
|
34
|
-
translations[term] = text.replaceAll('_', ' ')
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
const updatedTranslations = JSON.stringify(translations, null, '\t')
|
|
39
|
-
fs.writeFileSync(join(TRANSLATIONS_PATH, file), updatedTranslations)
|
|
40
|
-
} else return
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
return true
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* 프로젝트 Package Path 구하기
|
|
48
|
-
* @returns String
|
|
49
|
-
*/
|
|
50
|
-
function getPackageRootPath() {
|
|
51
|
-
let appPath: string = process.env.PWD;
|
|
52
|
-
let splitPath: string[] = appPath.split('/');
|
|
53
|
-
let pathArr: string[] = [];
|
|
54
|
-
for (let i = 0; i < splitPath.length; i++) {
|
|
55
|
-
pathArr.push(splitPath[i]);
|
|
56
|
-
|
|
57
|
-
if (splitPath[i] == 'packages') {
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return pathArr.join('/');
|
|
63
|
-
}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
|
2
|
-
import { In } from 'typeorm'
|
|
3
|
-
|
|
4
|
-
import { getRepository } from '@things-factory/shell'
|
|
5
|
-
|
|
6
|
-
import { WorkCodeDetail } from '../work-code-detail/work-code-detail'
|
|
7
|
-
import { WorkCode } from './work-code'
|
|
8
|
-
import { WorkCodePatch, NewWorkCode } from './work-code-type'
|
|
9
|
-
|
|
10
|
-
@Resolver(WorkCode)
|
|
11
|
-
export class WorkCodeMutation {
|
|
12
|
-
@Directive('@transaction')
|
|
13
|
-
@Mutation(returns => WorkCode, { description: 'To create new WorkCode' })
|
|
14
|
-
async createWorkCode(
|
|
15
|
-
@Arg('workCode') workCode: NewWorkCode,
|
|
16
|
-
@Ctx() context: ResolverContext
|
|
17
|
-
): Promise<WorkCode> {
|
|
18
|
-
const { domain, user, tx } = context.state
|
|
19
|
-
|
|
20
|
-
const details = await getRepository(WorkCodeDetail).findByIds(workCode.details || [])
|
|
21
|
-
|
|
22
|
-
return await tx.getRepository(WorkCode).save({
|
|
23
|
-
...workCode,
|
|
24
|
-
details,
|
|
25
|
-
domain,
|
|
26
|
-
creator: user,
|
|
27
|
-
updater: user
|
|
28
|
-
})
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@Directive('@transaction')
|
|
32
|
-
@Mutation(returns => WorkCode, { description: 'To modify WorkCode information' })
|
|
33
|
-
async updateWorkCode(
|
|
34
|
-
@Arg('patch') patch: WorkCodePatch,
|
|
35
|
-
@Ctx() context: ResolverContext
|
|
36
|
-
): Promise<WorkCode> {
|
|
37
|
-
const { domain, user, tx } = context.state
|
|
38
|
-
|
|
39
|
-
const repository = tx.getRepository(WorkCode)
|
|
40
|
-
const workCode = await repository.findOne({
|
|
41
|
-
where: { id:patch.id },
|
|
42
|
-
relations: ['details']
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
const detailIds = workCode.details.map(detail => detail.id)
|
|
46
|
-
if (patch.details && patch.details.length) {
|
|
47
|
-
patch.details.forEach((detailId: string) => {
|
|
48
|
-
if (!detailIds.includes(detailId)) {
|
|
49
|
-
detailIds.push(detailId)
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return await repository.save({
|
|
55
|
-
...workCode,
|
|
56
|
-
...patch,
|
|
57
|
-
details: await getRepository(WorkCodeDetail).findByIds(detailIds),
|
|
58
|
-
updater: user
|
|
59
|
-
})
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@Directive('@transaction')
|
|
63
|
-
@Mutation(returns => [WorkCode], { description: "To modify multiple WorkCodes' information" })
|
|
64
|
-
async updateMultipleWorkCode(
|
|
65
|
-
@Arg('patches', type => [WorkCodePatch]) patches: WorkCodePatch[],
|
|
66
|
-
@Ctx() context: ResolverContext
|
|
67
|
-
): Promise<WorkCode[]> {
|
|
68
|
-
const { domain, user, tx } = context.state
|
|
69
|
-
|
|
70
|
-
let results = []
|
|
71
|
-
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
72
|
-
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
73
|
-
const commonCodeRepo = tx.getRepository(WorkCode)
|
|
74
|
-
|
|
75
|
-
if (_createRecords.length > 0) {
|
|
76
|
-
for (let i = 0; i < _createRecords.length; i++) {
|
|
77
|
-
const newRecord = _createRecords[i]
|
|
78
|
-
|
|
79
|
-
const result = await commonCodeRepo.save({
|
|
80
|
-
...(newRecord as any),
|
|
81
|
-
domain,
|
|
82
|
-
creator: user,
|
|
83
|
-
updater: user
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
results.push({ ...result, cuFlag: '+' })
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (_updateRecords.length > 0) {
|
|
91
|
-
for (let i = 0; i < _updateRecords.length; i++) {
|
|
92
|
-
const newRecord = _updateRecords[i]
|
|
93
|
-
const commonCode = await commonCodeRepo.findOneBy({ id: newRecord.id })
|
|
94
|
-
|
|
95
|
-
const result = await commonCodeRepo.save({
|
|
96
|
-
...commonCode,
|
|
97
|
-
...(newRecord as any),
|
|
98
|
-
updater: user
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
results.push({ ...result, cuFlag: 'M' })
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return results
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@Directive('@transaction')
|
|
109
|
-
@Mutation(returns => Boolean, { description: 'To delete WorkCode' })
|
|
110
|
-
async deleteWorkCode(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
|
111
|
-
const { domain, tx } = context.state
|
|
112
|
-
|
|
113
|
-
await tx.getRepository(WorkCode).delete({ id })
|
|
114
|
-
return true
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
@Directive('@transaction')
|
|
118
|
-
@Mutation(returns => Boolean, { description: 'To delete multiple WorkCodes' })
|
|
119
|
-
async deleteWorkCodes(
|
|
120
|
-
@Arg('ids', type => [String]) ids: string[],
|
|
121
|
-
@Ctx() context: ResolverContext
|
|
122
|
-
): Promise<boolean> {
|
|
123
|
-
const { domain, tx } = context.state
|
|
124
|
-
|
|
125
|
-
await tx.getRepository(WorkCode).delete({id: In(ids)})
|
|
126
|
-
return true
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
@Directive('@transaction')
|
|
130
|
-
@Mutation(returns => Boolean, { description: 'To import multiple WorkCodes' })
|
|
131
|
-
async importWorkCodes(
|
|
132
|
-
@Arg('workCodes', type => [WorkCodePatch]) commonCodes: WorkCodePatch[],
|
|
133
|
-
@Ctx() context: ResolverContext
|
|
134
|
-
): Promise<boolean> {
|
|
135
|
-
const { domain, tx } = context.state
|
|
136
|
-
|
|
137
|
-
await Promise.all(
|
|
138
|
-
commonCodes.map(async (workCode: WorkCodePatch) => {
|
|
139
|
-
const createdWorkCode: WorkCode = await tx
|
|
140
|
-
.getRepository(WorkCode)
|
|
141
|
-
.save({ domain, ...(workCode as any) })
|
|
142
|
-
})
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
return true
|
|
146
|
-
}
|
|
147
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
-
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
|
5
|
-
|
|
6
|
-
import { WorkCodeDetail } from '../work-code-detail/work-code-detail'
|
|
7
|
-
import { WorkCode } from './work-code'
|
|
8
|
-
import { WorkCodeList } from './work-code-type'
|
|
9
|
-
|
|
10
|
-
@Resolver(WorkCode)
|
|
11
|
-
export class WorkCodeQuery {
|
|
12
|
-
@Query(returns => WorkCode!, { nullable: true, description: 'To fetch a WorkCode' })
|
|
13
|
-
async workCode(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<WorkCode> {
|
|
14
|
-
const { domain } = context.state
|
|
15
|
-
|
|
16
|
-
return await getRepository(WorkCode).findOne({
|
|
17
|
-
where: { id }
|
|
18
|
-
})
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@Query(returns => WorkCode!, { nullable: true, description: 'To fetch a WorkCode' })
|
|
22
|
-
async workCodeByName(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<WorkCode> {
|
|
23
|
-
const { domain } = context.state
|
|
24
|
-
|
|
25
|
-
return await getRepository(WorkCode).findOne({
|
|
26
|
-
where: { domain: { id: domain.id }, name }
|
|
27
|
-
})
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
@Query(returns => WorkCodeList, { description: 'To fetch multiple WorkCodes' })
|
|
31
|
-
async workCodes(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<WorkCodeList> {
|
|
32
|
-
const { domain } = context.state
|
|
33
|
-
|
|
34
|
-
const queryBuilder = getQueryBuilderFromListParams({
|
|
35
|
-
domain,
|
|
36
|
-
params,
|
|
37
|
-
repository: await getRepository(WorkCode),
|
|
38
|
-
searchables: ['name', 'description']
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
const [items, total] = await queryBuilder.getManyAndCount()
|
|
42
|
-
|
|
43
|
-
return { items, total }
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
@FieldResolver(type => [WorkCodeDetail])
|
|
47
|
-
async details(@Root() workCode: WorkCode): Promise<WorkCodeDetail[]> {
|
|
48
|
-
return await getRepository(WorkCodeDetail).findBy({
|
|
49
|
-
workCode: { id: workCode.id }
|
|
50
|
-
})
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@FieldResolver(type => Domain)
|
|
54
|
-
async domain(@Root() workCode: WorkCode): Promise<Domain> {
|
|
55
|
-
return await getRepository(Domain).findOneBy({ id: workCode.domainId })
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
@FieldResolver(type => User)
|
|
59
|
-
async updater(@Root() workCode: WorkCode): Promise<User> {
|
|
60
|
-
return await getRepository(User).findOneBy({ id: workCode.updaterId })
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
@FieldResolver(type => User)
|
|
64
|
-
async creator(@Root() workCode: WorkCode): Promise<User> {
|
|
65
|
-
return await getRepository(User).findOneBy({ id: workCode.creatorId })
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
|
2
|
-
|
|
3
|
-
import { WorkCode } from './work-code'
|
|
4
|
-
|
|
5
|
-
@InputType()
|
|
6
|
-
export class NewWorkCode {
|
|
7
|
-
@Field()
|
|
8
|
-
name: string
|
|
9
|
-
|
|
10
|
-
@Field({ nullable: true })
|
|
11
|
-
description?: string
|
|
12
|
-
|
|
13
|
-
@Field({ nullable: true })
|
|
14
|
-
category1?: string
|
|
15
|
-
|
|
16
|
-
@Field({ nullable: true })
|
|
17
|
-
category2?: string
|
|
18
|
-
|
|
19
|
-
@Field({ nullable: true })
|
|
20
|
-
category3?: string
|
|
21
|
-
|
|
22
|
-
@Field(type => [String], { nullable: true })
|
|
23
|
-
details?: string[]
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
@InputType()
|
|
27
|
-
export class WorkCodePatch {
|
|
28
|
-
@Field(type => ID, { nullable: true })
|
|
29
|
-
id?: string
|
|
30
|
-
|
|
31
|
-
@Field({ nullable: true })
|
|
32
|
-
name?: string
|
|
33
|
-
|
|
34
|
-
@Field({ nullable: true })
|
|
35
|
-
description?: string
|
|
36
|
-
|
|
37
|
-
@Field({ nullable: true })
|
|
38
|
-
category1?: string
|
|
39
|
-
|
|
40
|
-
@Field({ nullable: true })
|
|
41
|
-
category2?: string
|
|
42
|
-
|
|
43
|
-
@Field({ nullable: true })
|
|
44
|
-
category3?: string
|
|
45
|
-
|
|
46
|
-
@Field(type => [String], { nullable: true })
|
|
47
|
-
details?: string[]
|
|
48
|
-
|
|
49
|
-
@Field({ nullable: true })
|
|
50
|
-
cuFlag?: string
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@ObjectType()
|
|
54
|
-
export class WorkCodeList {
|
|
55
|
-
@Field(type => [WorkCode])
|
|
56
|
-
items: WorkCode[]
|
|
57
|
-
|
|
58
|
-
@Field(type => Int)
|
|
59
|
-
total: number
|
|
60
|
-
}
|