@things-factory/board-service 9.0.0-beta.7 → 9.0.0-beta.71
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-server/controllers/analyzer/analyze-integration.js +2 -2
- package/dist-server/controllers/analyzer/analyze-integration.js.map +1 -1
- package/dist-server/controllers/headless-model.d.ts +1 -1
- package/dist-server/controllers/headless-model.js +6 -6
- package/dist-server/controllers/headless-model.js.map +1 -1
- package/dist-server/controllers/headless-playlist.d.ts +1 -1
- package/dist-server/controllers/headless-playlist.js +5 -5
- package/dist-server/controllers/headless-playlist.js.map +1 -1
- package/dist-server/controllers/headless-pool-for-label.js +2 -2
- package/dist-server/controllers/headless-pool-for-label.js.map +1 -1
- package/dist-server/controllers/index.d.ts +1 -1
- package/dist-server/controllers/index.js +8 -8
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/label-command.js +5 -5
- package/dist-server/controllers/label-command.js.map +1 -1
- package/dist-server/controllers/pdf.d.ts +9 -1
- package/dist-server/controllers/pdf.js +7 -7
- package/dist-server/controllers/pdf.js.map +1 -1
- package/dist-server/controllers/screenshot.js +7 -7
- package/dist-server/controllers/screenshot.js.map +1 -1
- package/dist-server/controllers/thumbnail.js +2 -2
- package/dist-server/controllers/thumbnail.js.map +1 -1
- package/dist-server/errors/index.d.ts +1 -1
- package/dist-server/errors/index.js +1 -1
- package/dist-server/errors/index.js.map +1 -1
- package/dist-server/errors/license-error.js +1 -1
- package/dist-server/errors/license-error.js.map +1 -1
- package/dist-server/index.d.ts +4 -4
- package/dist-server/index.js +4 -4
- package/dist-server/index.js.map +1 -1
- package/dist-server/migrations/1556862253000-SeedGroup.js +3 -3
- package/dist-server/migrations/1556862253000-SeedGroup.js.map +1 -1
- package/dist-server/routers/standalone-board-service-router.js +28 -28
- package/dist-server/routers/standalone-board-service-router.js.map +1 -1
- package/dist-server/routes.js +12 -10
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/analysis/analysis-query.js +2 -2
- package/dist-server/service/analysis/analysis-query.js.map +1 -1
- package/dist-server/service/analysis/index.d.ts +1 -1
- package/dist-server/service/analysis/index.js +2 -2
- package/dist-server/service/analysis/index.js.map +1 -1
- package/dist-server/service/board/board-history.d.ts +3 -3
- package/dist-server/service/board/board-history.js +7 -7
- package/dist-server/service/board/board-history.js.map +1 -1
- package/dist-server/service/board/board-mutation.d.ts +2 -2
- package/dist-server/service/board/board-mutation.js +39 -39
- package/dist-server/service/board/board-mutation.js.map +1 -1
- package/dist-server/service/board/board-query.d.ts +5 -5
- package/dist-server/service/board/board-query.js +34 -34
- package/dist-server/service/board/board-query.js.map +1 -1
- package/dist-server/service/board/board-subscription.d.ts +1 -1
- package/dist-server/service/board/board-subscription.js +3 -3
- package/dist-server/service/board/board-subscription.js.map +1 -1
- package/dist-server/service/board/board-type.d.ts +2 -2
- package/dist-server/service/board/board-type.js +4 -4
- package/dist-server/service/board/board-type.js.map +1 -1
- package/dist-server/service/board/board.d.ts +2 -2
- package/dist-server/service/board/board.js +7 -7
- package/dist-server/service/board/board.js.map +1 -1
- package/dist-server/service/board/event-subscriber.d.ts +5 -5
- package/dist-server/service/board/event-subscriber.js +8 -8
- package/dist-server/service/board/event-subscriber.js.map +1 -1
- package/dist-server/service/board/index.d.ts +6 -6
- package/dist-server/service/board/index.js +9 -9
- package/dist-server/service/board/index.js.map +1 -1
- package/dist-server/service/board-favorite/board-favorite-query.d.ts +1 -1
- package/dist-server/service/board-favorite/board-favorite-query.js +5 -5
- package/dist-server/service/board-favorite/board-favorite-query.js.map +1 -1
- package/dist-server/service/board-favorite/board-favorite-type.d.ts +1 -1
- package/dist-server/service/board-favorite/board-favorite-type.js +2 -2
- package/dist-server/service/board-favorite/board-favorite-type.js.map +1 -1
- package/dist-server/service/board-favorite/index.d.ts +1 -1
- package/dist-server/service/board-favorite/index.js +2 -2
- package/dist-server/service/board-favorite/index.js.map +1 -1
- package/dist-server/service/board-template/board-template-mutation.d.ts +2 -2
- package/dist-server/service/board-template/board-template-mutation.js +19 -19
- package/dist-server/service/board-template/board-template-mutation.js.map +1 -1
- package/dist-server/service/board-template/board-template-query.d.ts +2 -2
- package/dist-server/service/board-template/board-template-query.js +13 -13
- package/dist-server/service/board-template/board-template-query.js.map +1 -1
- package/dist-server/service/board-template/board-template-type.d.ts +1 -1
- package/dist-server/service/board-template/board-template-type.js +2 -2
- package/dist-server/service/board-template/board-template-type.js.map +1 -1
- package/dist-server/service/board-template/index.d.ts +3 -3
- package/dist-server/service/board-template/index.js +5 -5
- package/dist-server/service/board-template/index.js.map +1 -1
- package/dist-server/service/group/group-mutation.d.ts +2 -2
- package/dist-server/service/group/group-mutation.js +14 -14
- package/dist-server/service/group/group-mutation.js.map +1 -1
- package/dist-server/service/group/group-query.d.ts +3 -3
- package/dist-server/service/group/group-query.js +14 -14
- package/dist-server/service/group/group-query.js.map +1 -1
- package/dist-server/service/group/group-type.d.ts +1 -1
- package/dist-server/service/group/group-type.js +2 -2
- package/dist-server/service/group/group-type.js.map +1 -1
- package/dist-server/service/group/group.d.ts +1 -1
- package/dist-server/service/group/group.js +3 -3
- package/dist-server/service/group/group.js.map +1 -1
- package/dist-server/service/group/index.d.ts +3 -3
- package/dist-server/service/group/index.js +5 -5
- package/dist-server/service/group/index.js.map +1 -1
- package/dist-server/service/index.d.ts +6 -6
- package/dist-server/service/index.js +31 -31
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/permission/domain-permission-subscriber.js +3 -3
- package/dist-server/service/permission/domain-permission-subscriber.js.map +1 -1
- package/dist-server/service/permission/index.d.ts +1 -1
- package/dist-server/service/permission/index.js +2 -2
- package/dist-server/service/permission/index.js.map +1 -1
- package/dist-server/service/play-group/event-subscriber.d.ts +1 -1
- package/dist-server/service/play-group/event-subscriber.js +3 -3
- package/dist-server/service/play-group/event-subscriber.js.map +1 -1
- package/dist-server/service/play-group/index.d.ts +5 -5
- package/dist-server/service/play-group/index.js +8 -8
- package/dist-server/service/play-group/index.js.map +1 -1
- package/dist-server/service/play-group/play-group-mutation.d.ts +2 -2
- package/dist-server/service/play-group/play-group-mutation.js +19 -19
- package/dist-server/service/play-group/play-group-mutation.js.map +1 -1
- package/dist-server/service/play-group/play-group-query.d.ts +3 -3
- package/dist-server/service/play-group/play-group-query.js +15 -15
- package/dist-server/service/play-group/play-group-query.js.map +1 -1
- package/dist-server/service/play-group/play-group-subscription.d.ts +1 -1
- package/dist-server/service/play-group/play-group-subscription.js +3 -3
- package/dist-server/service/play-group/play-group-subscription.js.map +1 -1
- package/dist-server/service/play-group/play-group-type.d.ts +1 -1
- package/dist-server/service/play-group/play-group-type.js +2 -2
- package/dist-server/service/play-group/play-group-type.js.map +1 -1
- package/dist-server/service/play-group/play-group.d.ts +1 -1
- package/dist-server/service/play-group/play-group.js +3 -3
- package/dist-server/service/play-group/play-group.js.map +1 -1
- package/dist-server/service/theme/index.d.ts +3 -3
- package/dist-server/service/theme/index.js +5 -5
- package/dist-server/service/theme/index.js.map +1 -1
- package/dist-server/service/theme/theme-mutation.d.ts +2 -2
- package/dist-server/service/theme/theme-mutation.js +16 -16
- package/dist-server/service/theme/theme-mutation.js.map +1 -1
- package/dist-server/service/theme/theme-query.d.ts +2 -2
- package/dist-server/service/theme/theme-query.js +10 -10
- package/dist-server/service/theme/theme-query.js.map +1 -1
- package/dist-server/service/theme/theme-type.d.ts +1 -1
- package/dist-server/service/theme/theme-type.js +2 -2
- package/dist-server/service/theme/theme-type.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -8
- package/views/internal-board-full-feature-view.html +0 -1
- package/views/internal-board-player-view.html +0 -1
- package/views/internal-board-service-view.html +0 -1
|
@@ -6,11 +6,11 @@ const type_graphql_1 = require("type-graphql");
|
|
|
6
6
|
const typeorm_1 = require("typeorm");
|
|
7
7
|
const GraphQLUpload_js_1 = tslib_1.__importDefault(require("graphql-upload/GraphQLUpload.js"));
|
|
8
8
|
const shell_1 = require("@things-factory/shell");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
9
|
+
const thumbnail_js_1 = require("../../controllers/thumbnail.js");
|
|
10
|
+
const group_js_1 = require("../group/group.js");
|
|
11
|
+
const board_js_1 = require("./board.js");
|
|
12
|
+
const board_history_js_1 = require("./board-history.js");
|
|
13
|
+
const board_type_js_1 = require("./board-type.js");
|
|
14
14
|
async function parseJSONFile(uploadedFile) {
|
|
15
15
|
var { createReadStream } = await uploadedFile;
|
|
16
16
|
return new Promise((resolve, reject) => {
|
|
@@ -37,8 +37,8 @@ async function parseJSONFile(uploadedFile) {
|
|
|
37
37
|
let BoardMutation = class BoardMutation {
|
|
38
38
|
async createBoard(board, context) {
|
|
39
39
|
const { domain, user, notify, tx } = context.state;
|
|
40
|
-
const repository =
|
|
41
|
-
const groupRepository =
|
|
40
|
+
const repository = (0, shell_1.getRepository)(board_js_1.Board, tx);
|
|
41
|
+
const groupRepository = (0, shell_1.getRepository)(group_js_1.Group, tx);
|
|
42
42
|
const oldBoard = await repository.findOneBy({
|
|
43
43
|
name: board.name,
|
|
44
44
|
domain: { id: domain.id }
|
|
@@ -59,14 +59,14 @@ let BoardMutation = class BoardMutation {
|
|
|
59
59
|
mode: 'in-app',
|
|
60
60
|
title: `Board '${created.name}' created`,
|
|
61
61
|
body: `Board '${created.name}' created by ${user.name}\n${created.description}`,
|
|
62
|
-
url: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
|
62
|
+
url: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/board-viewer/${created.id}`)
|
|
63
63
|
});
|
|
64
64
|
return created;
|
|
65
65
|
}
|
|
66
66
|
async cloneBoard(id, patch, targetSubdomain, targetGroupId, context) {
|
|
67
67
|
const { domain, user, notify, tx } = context.state;
|
|
68
68
|
const { t } = context;
|
|
69
|
-
const repository =
|
|
69
|
+
const repository = (0, shell_1.getRepository)(board_js_1.Board, tx);
|
|
70
70
|
const board = await repository.findOneBy({ domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, id });
|
|
71
71
|
if (!patch.name || (patch.name == board.name && targetSubdomain == domain.subdomain)) {
|
|
72
72
|
throw t('error.name must be unique from the original board', { name: patch.name });
|
|
@@ -78,14 +78,14 @@ let BoardMutation = class BoardMutation {
|
|
|
78
78
|
}
|
|
79
79
|
var targetDomain = domain;
|
|
80
80
|
if (targetDomain && domain.subdomain != targetSubdomain) {
|
|
81
|
-
targetDomain = await
|
|
81
|
+
targetDomain = await (0, shell_1.getRepository)(shell_1.Domain, tx).findOneBy({ subdomain: targetSubdomain });
|
|
82
82
|
if (!targetDomain) {
|
|
83
83
|
throw `given subdomain(${targetSubdomain}) not found`;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
var targetGroup = null;
|
|
87
87
|
if (targetGroupId) {
|
|
88
|
-
targetGroup = await
|
|
88
|
+
targetGroup = await (0, shell_1.getRepository)(group_js_1.Group, tx).findOneBy({ domain: { id: targetDomain.id }, id: targetGroupId });
|
|
89
89
|
if (!targetGroup) {
|
|
90
90
|
throw `given group(${targetGroupId}) in domain(${targetSubdomain}) not found`;
|
|
91
91
|
}
|
|
@@ -97,20 +97,20 @@ let BoardMutation = class BoardMutation {
|
|
|
97
97
|
mode: 'in-app',
|
|
98
98
|
title: `Board '${cloned.name}' cloned`,
|
|
99
99
|
body: `Board '${cloned.name}' cloned by ${user.name}\n${cloned.description}`,
|
|
100
|
-
image: (0, shell_1.getRedirectSubdomainPath)(context,
|
|
101
|
-
url: (0, shell_1.getRedirectSubdomainPath)(context,
|
|
100
|
+
image: (0, shell_1.getRedirectSubdomainPath)(context, targetDomain, `/thumbnail/${cloned.id}`),
|
|
101
|
+
url: (0, shell_1.getRedirectSubdomainPath)(context, targetDomain, `/board-viewer/${cloned.id}`)
|
|
102
102
|
});
|
|
103
103
|
return cloned;
|
|
104
104
|
}
|
|
105
105
|
async updateBoard(id, patch, context) {
|
|
106
106
|
const { domain, user, notify, tx } = context.state;
|
|
107
|
-
const repository =
|
|
107
|
+
const repository = (0, shell_1.getRepository)(board_js_1.Board, tx);
|
|
108
108
|
const board = await repository.findOne({
|
|
109
109
|
where: { domain: { id: domain.id }, id },
|
|
110
110
|
relations: ['creator']
|
|
111
111
|
});
|
|
112
112
|
if (patch.model) {
|
|
113
|
-
const thumbnailPromise = (0,
|
|
113
|
+
const thumbnailPromise = (0, thumbnail_js_1.thumbnail)({
|
|
114
114
|
model: patch.model,
|
|
115
115
|
context
|
|
116
116
|
});
|
|
@@ -133,7 +133,7 @@ let BoardMutation = class BoardMutation {
|
|
|
133
133
|
.then(async (thumbnailBase64) => {
|
|
134
134
|
/* use new resource manager */
|
|
135
135
|
await (0, shell_1.getDataSource)().transaction(async (tx) => {
|
|
136
|
-
await
|
|
136
|
+
await (0, shell_1.getRepository)(board_js_1.Board, tx).save({
|
|
137
137
|
id: updated.id,
|
|
138
138
|
thumbnail: 'data:image/png;base64,' + thumbnailBase64.toString('base64')
|
|
139
139
|
});
|
|
@@ -146,7 +146,7 @@ let BoardMutation = class BoardMutation {
|
|
|
146
146
|
}
|
|
147
147
|
const { groupId } = patch, patched = tslib_1.__rest(patch, ["groupId"]);
|
|
148
148
|
if (groupId !== undefined) {
|
|
149
|
-
const groupRepository =
|
|
149
|
+
const groupRepository = (0, shell_1.getRepository)(group_js_1.Group, tx);
|
|
150
150
|
board.group = groupId
|
|
151
151
|
? (await groupRepository.findOneBy({
|
|
152
152
|
domain: { id: domain.id },
|
|
@@ -160,14 +160,14 @@ let BoardMutation = class BoardMutation {
|
|
|
160
160
|
mode: 'in-app',
|
|
161
161
|
title: `Board '${updated.name}' updated`,
|
|
162
162
|
body: `Board '${updated.name}' updated by ${user.name}\n${updated.description}`,
|
|
163
|
-
image: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
|
164
|
-
url: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
|
163
|
+
image: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/thumbnail/${updated.id}`),
|
|
164
|
+
url: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/board-viewer/${updated.id}`)
|
|
165
165
|
});
|
|
166
166
|
return updated;
|
|
167
167
|
}
|
|
168
168
|
async releaseBoard(id, context) {
|
|
169
169
|
const { domain, user, notify, tx } = context.state;
|
|
170
|
-
const repository =
|
|
170
|
+
const repository = (0, shell_1.getRepository)(board_js_1.Board, tx);
|
|
171
171
|
const board = await repository.findOne({
|
|
172
172
|
where: { domain: { id: domain.id }, id },
|
|
173
173
|
relations: ['creator']
|
|
@@ -184,14 +184,14 @@ let BoardMutation = class BoardMutation {
|
|
|
184
184
|
mode: 'in-app',
|
|
185
185
|
title: `Board '${updated.name}' released`,
|
|
186
186
|
body: `Board '${updated.name}' released by ${user.name}\n${updated.description}`,
|
|
187
|
-
image: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
|
188
|
-
url: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
|
187
|
+
image: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/thumbnail/${updated.id}`),
|
|
188
|
+
url: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/board-viewer/${updated.id}`)
|
|
189
189
|
});
|
|
190
190
|
return updated;
|
|
191
191
|
}
|
|
192
192
|
async revertBoardVersion(id, version, context) {
|
|
193
193
|
const { domain, user, notify, tx } = context.state;
|
|
194
|
-
const repository =
|
|
194
|
+
const repository = (0, shell_1.getRepository)(board_js_1.Board, tx);
|
|
195
195
|
const board = await repository.findOne({
|
|
196
196
|
where: { domain: { id: domain.id }, id },
|
|
197
197
|
relations: ['creator']
|
|
@@ -199,7 +199,7 @@ let BoardMutation = class BoardMutation {
|
|
|
199
199
|
if (!board) {
|
|
200
200
|
throw `Board with id(${id}) is not found`;
|
|
201
201
|
}
|
|
202
|
-
const historyRepository =
|
|
202
|
+
const historyRepository = (0, shell_1.getRepository)(board_history_js_1.BoardHistory, tx);
|
|
203
203
|
const boardHistory = await historyRepository.findOne({
|
|
204
204
|
where: { domain: { id: domain.id }, originalId: id, version },
|
|
205
205
|
order: { version: 'DESC' }
|
|
@@ -213,14 +213,14 @@ let BoardMutation = class BoardMutation {
|
|
|
213
213
|
mode: 'in-app',
|
|
214
214
|
title: `Board '${updated.name}' updated`,
|
|
215
215
|
body: `Board '${updated.name}' updated by ${user.name}\n${updated.description}`,
|
|
216
|
-
image: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
|
217
|
-
url: (0, shell_1.getRedirectSubdomainPath)(context, domain
|
|
216
|
+
image: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/thumbnail/${updated.id}`),
|
|
217
|
+
url: (0, shell_1.getRedirectSubdomainPath)(context, domain, `/board-viewer/${updated.id}`)
|
|
218
218
|
});
|
|
219
219
|
return updated;
|
|
220
220
|
}
|
|
221
221
|
async deleteBoard(id, context) {
|
|
222
222
|
const { domain, user, notify, tx } = context.state;
|
|
223
|
-
const repository =
|
|
223
|
+
const repository = (0, shell_1.getRepository)(board_js_1.Board, tx);
|
|
224
224
|
const board = await repository.findOneBy({ domain: { id: domain.id }, id });
|
|
225
225
|
const deleted = await repository.softDelete(id);
|
|
226
226
|
notify &&
|
|
@@ -233,8 +233,8 @@ let BoardMutation = class BoardMutation {
|
|
|
233
233
|
}
|
|
234
234
|
async importBoards(groupId, files, overwrite, context) {
|
|
235
235
|
const { domain, user, notify, tx } = context.state;
|
|
236
|
-
const groupRepository =
|
|
237
|
-
const boardRepository =
|
|
236
|
+
const groupRepository = (0, shell_1.getRepository)(group_js_1.Group, tx);
|
|
237
|
+
const boardRepository = (0, shell_1.getRepository)(board_js_1.Board, tx);
|
|
238
238
|
const group = await groupRepository.findOneBy({ domain: { id: domain.id }, id: groupId });
|
|
239
239
|
if (!group) {
|
|
240
240
|
throw `Group with id(${groupId}) is not found`;
|
|
@@ -297,41 +297,41 @@ exports.BoardMutation = BoardMutation;
|
|
|
297
297
|
tslib_1.__decorate([
|
|
298
298
|
(0, type_graphql_1.Directive)('@transaction'),
|
|
299
299
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "mutation", domainOwnerGranted: true)'),
|
|
300
|
-
(0, type_graphql_1.Mutation)(returns =>
|
|
300
|
+
(0, type_graphql_1.Mutation)(returns => board_js_1.Board, { description: 'To create new Board' }),
|
|
301
301
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('board')),
|
|
302
302
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
303
303
|
tslib_1.__metadata("design:type", Function),
|
|
304
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
304
|
+
tslib_1.__metadata("design:paramtypes", [board_type_js_1.NewBoard, Object]),
|
|
305
305
|
tslib_1.__metadata("design:returntype", Promise)
|
|
306
306
|
], BoardMutation.prototype, "createBoard", null);
|
|
307
307
|
tslib_1.__decorate([
|
|
308
308
|
(0, type_graphql_1.Directive)('@transaction'),
|
|
309
309
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "mutation", domainOwnerGranted: true)'),
|
|
310
|
-
(0, type_graphql_1.Mutation)(returns =>
|
|
310
|
+
(0, type_graphql_1.Mutation)(returns => board_js_1.Board, { description: 'To clone a Board from existing Board' }),
|
|
311
311
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
312
312
|
tslib_1.__param(1, (0, type_graphql_1.Arg)('patch')),
|
|
313
313
|
tslib_1.__param(2, (0, type_graphql_1.Arg)('targetSubdomain')),
|
|
314
314
|
tslib_1.__param(3, (0, type_graphql_1.Arg)('targetGroupId', { nullable: true })),
|
|
315
315
|
tslib_1.__param(4, (0, type_graphql_1.Ctx)()),
|
|
316
316
|
tslib_1.__metadata("design:type", Function),
|
|
317
|
-
tslib_1.__metadata("design:paramtypes", [String,
|
|
317
|
+
tslib_1.__metadata("design:paramtypes", [String, board_type_js_1.BoardPatch, String, String, Object]),
|
|
318
318
|
tslib_1.__metadata("design:returntype", Promise)
|
|
319
319
|
], BoardMutation.prototype, "cloneBoard", null);
|
|
320
320
|
tslib_1.__decorate([
|
|
321
321
|
(0, type_graphql_1.Directive)('@transaction'),
|
|
322
322
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "mutation", domainOwnerGranted: true)'),
|
|
323
|
-
(0, type_graphql_1.Mutation)(returns =>
|
|
323
|
+
(0, type_graphql_1.Mutation)(returns => board_js_1.Board, { description: 'To modify Board information' }),
|
|
324
324
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
325
325
|
tslib_1.__param(1, (0, type_graphql_1.Arg)('patch')),
|
|
326
326
|
tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
|
|
327
327
|
tslib_1.__metadata("design:type", Function),
|
|
328
|
-
tslib_1.__metadata("design:paramtypes", [String,
|
|
328
|
+
tslib_1.__metadata("design:paramtypes", [String, board_type_js_1.BoardPatch, Object]),
|
|
329
329
|
tslib_1.__metadata("design:returntype", Promise)
|
|
330
330
|
], BoardMutation.prototype, "updateBoard", null);
|
|
331
331
|
tslib_1.__decorate([
|
|
332
332
|
(0, type_graphql_1.Directive)('@transaction'),
|
|
333
333
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "mutation", domainOwnerGranted: true)'),
|
|
334
|
-
(0, type_graphql_1.Mutation)(returns =>
|
|
334
|
+
(0, type_graphql_1.Mutation)(returns => board_js_1.Board, { description: 'To release a Board' }),
|
|
335
335
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
336
336
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
337
337
|
tslib_1.__metadata("design:type", Function),
|
|
@@ -341,7 +341,7 @@ tslib_1.__decorate([
|
|
|
341
341
|
tslib_1.__decorate([
|
|
342
342
|
(0, type_graphql_1.Directive)('@transaction'),
|
|
343
343
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "mutation", domainOwnerGranted: true)'),
|
|
344
|
-
(0, type_graphql_1.Mutation)(returns =>
|
|
344
|
+
(0, type_graphql_1.Mutation)(returns => board_js_1.Board, { description: 'To revert Board version' }),
|
|
345
345
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
346
346
|
tslib_1.__param(1, (0, type_graphql_1.Arg)('version')),
|
|
347
347
|
tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
|
|
@@ -362,7 +362,7 @@ tslib_1.__decorate([
|
|
|
362
362
|
tslib_1.__decorate([
|
|
363
363
|
(0, type_graphql_1.Directive)('@transaction'),
|
|
364
364
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "mutation", domainOwnerGranted: true)'),
|
|
365
|
-
(0, type_graphql_1.Mutation)(returns => [
|
|
365
|
+
(0, type_graphql_1.Mutation)(returns => [board_js_1.Board], { description: 'To import some Boards' }),
|
|
366
366
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('groupId')),
|
|
367
367
|
tslib_1.__param(1, (0, type_graphql_1.Arg)('files', () => [GraphQLUpload_js_1.default])),
|
|
368
368
|
tslib_1.__param(2, (0, type_graphql_1.Arg)('overwrite')),
|
|
@@ -372,6 +372,6 @@ tslib_1.__decorate([
|
|
|
372
372
|
tslib_1.__metadata("design:returntype", Promise)
|
|
373
373
|
], BoardMutation.prototype, "importBoards", null);
|
|
374
374
|
exports.BoardMutation = BoardMutation = tslib_1.__decorate([
|
|
375
|
-
(0, type_graphql_1.Resolver)(
|
|
375
|
+
(0, type_graphql_1.Resolver)(board_js_1.Board)
|
|
376
376
|
], BoardMutation);
|
|
377
377
|
//# sourceMappingURL=board-mutation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-mutation.js","sourceRoot":"","sources":["../../../server/service/board/board-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Resolver, Directive } from 'type-graphql'\nimport { EntityManager, In } from 'typeorm'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Domain, getDataSource, getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { thumbnail } from '../../controllers/thumbnail'\nimport { Group } from '../group/group'\nimport { Board } from './board'\nimport { BoardHistory } from './board-history'\nimport { BoardPatch, NewBoard } from './board-type'\n\nasync function parseJSONFile(uploadedFile: FileUpload): Promise<any> {\n var { createReadStream } = await uploadedFile\n\n return new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = []\n\n createReadStream()\n .on('data', (chunk: Uint8Array) => {\n chunks.push(chunk)\n })\n .on('end', () => {\n try {\n const fileContents = Buffer.concat(chunks).toString('utf-8')\n const jsonData = JSON.parse(fileContents)\n resolve(jsonData)\n } catch (error) {\n reject(error)\n }\n })\n .on('error', (error: Error) => {\n reject(error)\n })\n })\n}\n\n@Resolver(Board)\nexport class BoardMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To create new Board' })\n async createBoard(@Arg('board') board: NewBoard, @Ctx() context: ResolverContext): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = tx.getRepository(Board)\n const groupRepository = tx.getRepository(Group)\n\n const oldBoard: Board = await repository.findOneBy({\n name: board.name,\n domain: { id: domain.id }\n })\n\n if (oldBoard) {\n throw new Error(context.t('error.board name is already taken', { name: board.name }))\n }\n\n const newBoard: Board = {\n ...board\n }\n\n newBoard.thumbnail ||=\n 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' /* empty thumbnail */\n\n if (board.groupId) {\n newBoard.group = await groupRepository.findOneBy({\n id: board.groupId\n })\n }\n\n const created = await repository.save({\n domain,\n ...newBoard,\n state: 'draft',\n creator: user,\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${created.name}' created`,\n body: `Board '${created.name}' created by ${user.name}\\n${created.description}`,\n url: getRedirectSubdomainPath(context, domain.subdomain, `/board-viewer/${created.id}`)\n })\n\n return created\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To clone a Board from existing Board' })\n async cloneBoard(\n @Arg('id') id: string,\n @Arg('patch') patch: BoardPatch,\n @Arg('targetSubdomain') targetSubdomain: string,\n @Arg('targetGroupId', { nullable: true }) targetGroupId: string,\n @Ctx() context: ResolverContext\n ): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const { t } = context\n const repository = tx.getRepository(Board)\n\n const board = await repository.findOneBy({ domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id })\n\n if (!patch.name || (patch.name == board.name && targetSubdomain == domain.subdomain)) {\n throw t('error.name must be unique from the original board', { name: patch.name })\n }\n\n if (targetSubdomain != domain.subdomain) {\n if ((await repository.count({ where: { domain: { subdomain: targetSubdomain }, name: patch.name } })) > 0) {\n throw t('error.name must be unique from the original board', { name: patch.name })\n }\n }\n\n var targetDomain = domain\n if (targetDomain && domain.subdomain != targetSubdomain) {\n targetDomain = await tx.getRepository(Domain).findOneBy({ subdomain: targetSubdomain })\n if (!targetDomain) {\n throw `given subdomain(${targetSubdomain}) not found`\n }\n }\n\n var targetGroup = null\n if (targetGroupId) {\n targetGroup = await tx.getRepository(Group).findOneBy({ domain: { id: targetDomain.id }, id: targetGroupId })\n if (!targetGroup) {\n throw `given group(${targetGroupId}) in domain(${targetSubdomain}) not found`\n }\n }\n\n const { id: excluded, ...clone } = board\n\n const cloned = await repository.save({\n domain: targetDomain,\n ...clone,\n ...patch,\n group: targetGroup,\n version: 0,\n state: 'draft',\n updater: user,\n creator: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${cloned.name}' cloned`,\n body: `Board '${cloned.name}' cloned by ${user.name}\\n${cloned.description}`,\n image: getRedirectSubdomainPath(context, targetSubdomain, `/thumbnail/${cloned.id}`),\n url: getRedirectSubdomainPath(context, targetSubdomain, `/board-viewer/${cloned.id}`)\n })\n\n return cloned\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To modify Board information' })\n async updateBoard(\n @Arg('id') id: string,\n @Arg('patch') patch: BoardPatch,\n @Ctx() context: ResolverContext\n ): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = tx.getRepository(Board)\n\n const board = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['creator']\n })\n\n if (patch.model) {\n const thumbnailPromise = thumbnail({\n model: patch.model,\n context\n })\n\n try {\n const thumbnailBase64 = await Promise.race([\n thumbnailPromise,\n new Promise((_, reject) => setTimeout(() => reject(new Error('5 seconds timeout')), 5000))\n ])\n\n patch.thumbnail = 'data:image/png;base64,' + thumbnailBase64.toString('base64')\n } catch (e) {\n console.warn(`Failed to get thumbnail for '${board.name}' in first 5 seconds`)\n // 5초 안에 썸네일이 생성되지 않았으므로 모델만 저장합니다.\n patch.thumbnail =\n 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' /* empty thumbnail */\n\n Promise.race([\n thumbnailPromise,\n new Promise((_, reject) => setTimeout(() => reject(new Error('Thumbnail extended timeout')), 5000))\n ])\n .then(async thumbnailBase64 => {\n /* use new resource manager */\n await getDataSource().transaction(async (tx: EntityManager) => {\n await tx.getRepository(Board).save({\n id: updated.id,\n thumbnail: 'data:image/png;base64,' + thumbnailBase64.toString('base64')\n })\n })\n })\n .catch(error => {\n console.error(`Failed to save thumbnail for '${board.name}' even after extended time:`, error)\n })\n }\n }\n\n const { groupId, ...patched } = patch\n\n if (groupId !== undefined) {\n const groupRepository = tx.getRepository(Group)\n board.group = groupId\n ? (await groupRepository.findOneBy({\n domain: { id: domain.id },\n id: groupId\n })) || null\n : null\n }\n\n const updated = await repository.save({\n domain,\n ...board,\n ...patched,\n state: 'draft',\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${updated.name}' updated`,\n body: `Board '${updated.name}' updated by ${user.name}\\n${updated.description}`,\n image: getRedirectSubdomainPath(context, domain.subdomain, `/thumbnail/${updated.id}`),\n url: getRedirectSubdomainPath(context, domain.subdomain, `/board-viewer/${updated.id}`)\n })\n\n return updated\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To release a Board' })\n async releaseBoard(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = tx.getRepository(Board)\n\n const board = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['creator']\n })\n\n if (!board) {\n throw `Board given id(${id}) is not found`\n }\n\n if (board.state == 'released') {\n throw `Board given id(${id}) is already released`\n }\n\n const updated = await repository.save({\n domain,\n ...board,\n version: (board.version || 0) + 1,\n state: 'released',\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${updated.name}' released`,\n body: `Board '${updated.name}' released by ${user.name}\\n${updated.description}`,\n image: getRedirectSubdomainPath(context, domain.subdomain, `/thumbnail/${updated.id}`),\n url: getRedirectSubdomainPath(context, domain.subdomain, `/board-viewer/${updated.id}`)\n })\n\n return updated\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To revert Board version' })\n async revertBoardVersion(\n @Arg('id') id: string,\n @Arg('version') version: number,\n @Ctx() context: ResolverContext\n ): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = tx.getRepository(Board)\n\n const board = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['creator']\n })\n\n if (!board) {\n throw `Board with id(${id}) is not found`\n }\n\n const historyRepository = tx.getRepository(BoardHistory)\n\n const boardHistory = await historyRepository.findOne({\n where: { domain: { id: domain.id }, originalId: id, version },\n order: { version: 'DESC' }\n })\n\n if (!boardHistory) {\n throw `Board with id:version(${id}:${version}) is not found`\n }\n\n const updated = await repository.save({\n domain,\n ...board,\n model: boardHistory.model,\n thumbnail: boardHistory.thumbnail,\n state: 'draft',\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${updated.name}' updated`,\n body: `Board '${updated.name}' updated by ${user.name}\\n${updated.description}`,\n image: getRedirectSubdomainPath(context, domain.subdomain, `/thumbnail/${updated.id}`),\n url: getRedirectSubdomainPath(context, domain.subdomain, `/board-viewer/${updated.id}`)\n })\n\n return updated\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete Board' })\n async deleteBoard(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, user, notify, tx } = context.state\n const repository = tx.getRepository(Board)\n const board = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n const deleted = await repository.softDelete(id)\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${board.name}' deleted`,\n body: `Board '${board.name}' deleted by ${user.name}\\n${board.description}`\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Board], { description: 'To import some Boards' })\n async importBoards(\n @Arg('groupId') groupId: string,\n @Arg('files', () => [GraphQLUpload]) files: FileUpload[],\n @Arg('overwrite') overwrite: boolean,\n @Ctx() context: ResolverContext\n ): Promise<Board[]> {\n const { domain, user, notify, tx } = context.state\n const groupRepository = tx.getRepository(Group)\n const boardRepository = tx.getRepository(Board)\n const group = await groupRepository.findOneBy({ domain: { id: domain.id }, id: groupId })\n\n if (!group) {\n throw `Group with id(${groupId}) is not found`\n }\n\n const boards = []\n\n for (const file of files) {\n const { id, name, description, model, thumbnail } = await parseJSONFile(file)\n\n var sameNameBoard = await boardRepository.findOneBy({ domain: { id: domain.id }, name })\n var sameIdBoard = await boardRepository.findOneBy({ id })\n\n if (overwrite) {\n var board = {} as any\n\n if (sameIdBoard) {\n if (overwrite && sameIdBoard.domainId != domain.id) {\n throw `Board with id(${id}) is already taken in another domain`\n }\n\n board = {\n ...sameIdBoard,\n name\n }\n\n if (sameNameBoard && sameIdBoard.id != sameNameBoard.id) {\n /* 이름 충돌 회피 */\n board.name = `${board.name}(${Date.now()})`\n }\n } else {\n board = {\n id,\n name: sameNameBoard ? `${name}(${Date.now()})` : name,\n version: 0,\n creator: user\n }\n }\n } else {\n board = {\n name,\n version: 0,\n creator: user\n }\n\n /* ID가 없으면, 사용해도 됨 */\n if (!sameIdBoard) {\n board.id = id\n }\n\n /* 이름 충돌 회피 */\n if (sameNameBoard) {\n board.name = `${board.name}(${Date.now()})`\n }\n }\n\n boards.push(\n await boardRepository.save({\n ...board,\n domain,\n description,\n model: typeof model != 'string' ? JSON.stringify(model) : model,\n thumbnail,\n group,\n state: 'draft',\n updater: user\n })\n )\n }\n\n notify &&\n notify({\n mode: 'in-app',\n title: `${boards.length} Board(s) are imported`,\n body: `${boards.length} Board(s) are imported into group ${group.name} by ${user.name}`\n })\n\n return boards\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"board-mutation.js","sourceRoot":"","sources":["../../../server/service/board/board-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Resolver, Directive } from 'type-graphql'\nimport { EntityManager, In } from 'typeorm'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Domain, getDataSource, getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { thumbnail } from '../../controllers/thumbnail.js'\nimport { Group } from '../group/group.js'\nimport { Board } from './board.js'\nimport { BoardHistory } from './board-history.js'\nimport { BoardPatch, NewBoard } from './board-type.js'\n\nasync function parseJSONFile(uploadedFile: FileUpload): Promise<any> {\n var { createReadStream } = await uploadedFile\n\n return new Promise((resolve, reject) => {\n const chunks: Uint8Array[] = []\n\n createReadStream()\n .on('data', (chunk: Uint8Array) => {\n chunks.push(chunk)\n })\n .on('end', () => {\n try {\n const fileContents = Buffer.concat(chunks).toString('utf-8')\n const jsonData = JSON.parse(fileContents)\n resolve(jsonData)\n } catch (error) {\n reject(error)\n }\n })\n .on('error', (error: Error) => {\n reject(error)\n })\n })\n}\n\n@Resolver(Board)\nexport class BoardMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To create new Board' })\n async createBoard(@Arg('board') board: NewBoard, @Ctx() context: ResolverContext): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = getRepository(Board, tx)\n const groupRepository = getRepository(Group, tx)\n\n const oldBoard: Board = await repository.findOneBy({\n name: board.name,\n domain: { id: domain.id }\n })\n\n if (oldBoard) {\n throw new Error(context.t('error.board name is already taken', { name: board.name }))\n }\n\n const newBoard: Board = {\n ...board\n }\n\n newBoard.thumbnail ||=\n 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' /* empty thumbnail */\n\n if (board.groupId) {\n newBoard.group = await groupRepository.findOneBy({\n id: board.groupId\n })\n }\n\n const created = await repository.save({\n domain,\n ...newBoard,\n state: 'draft',\n creator: user,\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${created.name}' created`,\n body: `Board '${created.name}' created by ${user.name}\\n${created.description}`,\n url: getRedirectSubdomainPath(context, domain, `/board-viewer/${created.id}`)\n })\n\n return created\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To clone a Board from existing Board' })\n async cloneBoard(\n @Arg('id') id: string,\n @Arg('patch') patch: BoardPatch,\n @Arg('targetSubdomain') targetSubdomain: string,\n @Arg('targetGroupId', { nullable: true }) targetGroupId: string,\n @Ctx() context: ResolverContext\n ): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const { t } = context\n const repository = getRepository(Board, tx)\n\n const board = await repository.findOneBy({ domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id })\n\n if (!patch.name || (patch.name == board.name && targetSubdomain == domain.subdomain)) {\n throw t('error.name must be unique from the original board', { name: patch.name })\n }\n\n if (targetSubdomain != domain.subdomain) {\n if ((await repository.count({ where: { domain: { subdomain: targetSubdomain }, name: patch.name } })) > 0) {\n throw t('error.name must be unique from the original board', { name: patch.name })\n }\n }\n\n var targetDomain = domain\n if (targetDomain && domain.subdomain != targetSubdomain) {\n targetDomain = await getRepository(Domain, tx).findOneBy({ subdomain: targetSubdomain })\n if (!targetDomain) {\n throw `given subdomain(${targetSubdomain}) not found`\n }\n }\n\n var targetGroup = null\n if (targetGroupId) {\n targetGroup = await getRepository(Group, tx).findOneBy({ domain: { id: targetDomain.id }, id: targetGroupId })\n if (!targetGroup) {\n throw `given group(${targetGroupId}) in domain(${targetSubdomain}) not found`\n }\n }\n\n const { id: excluded, ...clone } = board\n\n const cloned = await repository.save({\n domain: targetDomain,\n ...clone,\n ...patch,\n group: targetGroup,\n version: 0,\n state: 'draft',\n updater: user,\n creator: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${cloned.name}' cloned`,\n body: `Board '${cloned.name}' cloned by ${user.name}\\n${cloned.description}`,\n image: getRedirectSubdomainPath(context, targetDomain, `/thumbnail/${cloned.id}`),\n url: getRedirectSubdomainPath(context, targetDomain, `/board-viewer/${cloned.id}`)\n })\n\n return cloned\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To modify Board information' })\n async updateBoard(\n @Arg('id') id: string,\n @Arg('patch') patch: BoardPatch,\n @Ctx() context: ResolverContext\n ): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = getRepository(Board, tx)\n\n const board = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['creator']\n })\n\n if (patch.model) {\n const thumbnailPromise = thumbnail({\n model: patch.model,\n context\n })\n\n try {\n const thumbnailBase64 = await Promise.race([\n thumbnailPromise,\n new Promise((_, reject) => setTimeout(() => reject(new Error('5 seconds timeout')), 5000))\n ])\n\n patch.thumbnail = 'data:image/png;base64,' + thumbnailBase64.toString('base64')\n } catch (e) {\n console.warn(`Failed to get thumbnail for '${board.name}' in first 5 seconds`)\n // 5초 안에 썸네일이 생성되지 않았으므로 모델만 저장합니다.\n patch.thumbnail =\n 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' /* empty thumbnail */\n\n Promise.race([\n thumbnailPromise,\n new Promise((_, reject) => setTimeout(() => reject(new Error('Thumbnail extended timeout')), 5000))\n ])\n .then(async thumbnailBase64 => {\n /* use new resource manager */\n await getDataSource().transaction(async (tx: EntityManager) => {\n await getRepository(Board, tx).save({\n id: updated.id,\n thumbnail: 'data:image/png;base64,' + thumbnailBase64.toString('base64')\n })\n })\n })\n .catch(error => {\n console.error(`Failed to save thumbnail for '${board.name}' even after extended time:`, error)\n })\n }\n }\n\n const { groupId, ...patched } = patch\n\n if (groupId !== undefined) {\n const groupRepository = getRepository(Group, tx)\n board.group = groupId\n ? (await groupRepository.findOneBy({\n domain: { id: domain.id },\n id: groupId\n })) || null\n : null\n }\n\n const updated = await repository.save({\n domain,\n ...board,\n ...patched,\n state: 'draft',\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${updated.name}' updated`,\n body: `Board '${updated.name}' updated by ${user.name}\\n${updated.description}`,\n image: getRedirectSubdomainPath(context, domain, `/thumbnail/${updated.id}`),\n url: getRedirectSubdomainPath(context, domain, `/board-viewer/${updated.id}`)\n })\n\n return updated\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To release a Board' })\n async releaseBoard(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = getRepository(Board, tx)\n\n const board = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['creator']\n })\n\n if (!board) {\n throw `Board given id(${id}) is not found`\n }\n\n if (board.state == 'released') {\n throw `Board given id(${id}) is already released`\n }\n\n const updated = await repository.save({\n domain,\n ...board,\n version: (board.version || 0) + 1,\n state: 'released',\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${updated.name}' released`,\n body: `Board '${updated.name}' released by ${user.name}\\n${updated.description}`,\n image: getRedirectSubdomainPath(context, domain, `/thumbnail/${updated.id}`),\n url: getRedirectSubdomainPath(context, domain, `/board-viewer/${updated.id}`)\n })\n\n return updated\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Board, { description: 'To revert Board version' })\n async revertBoardVersion(\n @Arg('id') id: string,\n @Arg('version') version: number,\n @Ctx() context: ResolverContext\n ): Promise<Board> {\n const { domain, user, notify, tx } = context.state\n const repository = getRepository(Board, tx)\n\n const board = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['creator']\n })\n\n if (!board) {\n throw `Board with id(${id}) is not found`\n }\n\n const historyRepository = getRepository(BoardHistory, tx)\n\n const boardHistory = await historyRepository.findOne({\n where: { domain: { id: domain.id }, originalId: id, version },\n order: { version: 'DESC' }\n })\n\n if (!boardHistory) {\n throw `Board with id:version(${id}:${version}) is not found`\n }\n\n const updated = await repository.save({\n domain,\n ...board,\n model: boardHistory.model,\n thumbnail: boardHistory.thumbnail,\n state: 'draft',\n updater: user\n })\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${updated.name}' updated`,\n body: `Board '${updated.name}' updated by ${user.name}\\n${updated.description}`,\n image: getRedirectSubdomainPath(context, domain, `/thumbnail/${updated.id}`),\n url: getRedirectSubdomainPath(context, domain, `/board-viewer/${updated.id}`)\n })\n\n return updated\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete Board' })\n async deleteBoard(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, user, notify, tx } = context.state\n const repository = getRepository(Board, tx)\n const board = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n const deleted = await repository.softDelete(id)\n\n notify &&\n notify({\n mode: 'in-app',\n title: `Board '${board.name}' deleted`,\n body: `Board '${board.name}' deleted by ${user.name}\\n${board.description}`\n })\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"board\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Board], { description: 'To import some Boards' })\n async importBoards(\n @Arg('groupId') groupId: string,\n @Arg('files', () => [GraphQLUpload]) files: FileUpload[],\n @Arg('overwrite') overwrite: boolean,\n @Ctx() context: ResolverContext\n ): Promise<Board[]> {\n const { domain, user, notify, tx } = context.state\n const groupRepository = getRepository(Group, tx)\n const boardRepository = getRepository(Board, tx)\n const group = await groupRepository.findOneBy({ domain: { id: domain.id }, id: groupId })\n\n if (!group) {\n throw `Group with id(${groupId}) is not found`\n }\n\n const boards = []\n\n for (const file of files) {\n const { id, name, description, model, thumbnail } = await parseJSONFile(file)\n\n var sameNameBoard = await boardRepository.findOneBy({ domain: { id: domain.id }, name })\n var sameIdBoard = await boardRepository.findOneBy({ id })\n\n if (overwrite) {\n var board = {} as any\n\n if (sameIdBoard) {\n if (overwrite && sameIdBoard.domainId != domain.id) {\n throw `Board with id(${id}) is already taken in another domain`\n }\n\n board = {\n ...sameIdBoard,\n name\n }\n\n if (sameNameBoard && sameIdBoard.id != sameNameBoard.id) {\n /* 이름 충돌 회피 */\n board.name = `${board.name}(${Date.now()})`\n }\n } else {\n board = {\n id,\n name: sameNameBoard ? `${name}(${Date.now()})` : name,\n version: 0,\n creator: user\n }\n }\n } else {\n board = {\n name,\n version: 0,\n creator: user\n }\n\n /* ID가 없으면, 사용해도 됨 */\n if (!sameIdBoard) {\n board.id = id\n }\n\n /* 이름 충돌 회피 */\n if (sameNameBoard) {\n board.name = `${board.name}(${Date.now()})`\n }\n }\n\n boards.push(\n await boardRepository.save({\n ...board,\n domain,\n description,\n model: typeof model != 'string' ? JSON.stringify(model) : model,\n thumbnail,\n group,\n state: 'draft',\n updater: user\n })\n )\n }\n\n notify &&\n notify({\n mode: 'in-app',\n title: `${boards.length} Board(s) are imported`,\n body: `${boards.length} Board(s) are imported into group ${group.name} by ${user.name}`\n })\n\n return boards\n }\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { User } from '@things-factory/auth-base';
|
|
2
2
|
import { Domain, ListParam } from '@things-factory/shell';
|
|
3
|
-
import { Group } from '../group/group';
|
|
4
|
-
import { PlayGroup } from '../play-group/play-group';
|
|
5
|
-
import { Board } from './board';
|
|
6
|
-
import { BoardList } from './board-type';
|
|
7
|
-
import { BoardHistory } from './board-history';
|
|
3
|
+
import { Group } from '../group/group.js';
|
|
4
|
+
import { PlayGroup } from '../play-group/play-group.js';
|
|
5
|
+
import { Board } from './board.js';
|
|
6
|
+
import { BoardList } from './board-type.js';
|
|
7
|
+
import { BoardHistory } from './board-history.js';
|
|
8
8
|
export declare class BoardQuery {
|
|
9
9
|
board(id: string, context: ResolverContext): Promise<Board>;
|
|
10
10
|
boardByName(name: string, context: ResolverContext): Promise<Board>;
|
|
@@ -7,16 +7,16 @@ const type_graphql_1 = require("type-graphql");
|
|
|
7
7
|
const auth_base_1 = require("@things-factory/auth-base");
|
|
8
8
|
const shell_1 = require("@things-factory/shell");
|
|
9
9
|
const operato_license_checker_1 = require("@things-factory/operato-license-checker");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
10
|
+
const group_js_1 = require("../group/group.js");
|
|
11
|
+
const play_group_js_1 = require("../play-group/play-group.js");
|
|
12
|
+
const board_js_1 = require("./board.js");
|
|
13
|
+
const board_type_js_1 = require("./board-type.js");
|
|
14
|
+
const board_history_js_1 = require("./board-history.js");
|
|
15
|
+
const license_error_js_1 = require("../../errors/license-error.js");
|
|
16
16
|
let BoardQuery = class BoardQuery {
|
|
17
17
|
async board(id, context) {
|
|
18
18
|
const { domain } = context.state;
|
|
19
|
-
var board = await (0, shell_1.getRepository)(
|
|
19
|
+
var board = await (0, shell_1.getRepository)(board_js_1.Board).findOne({
|
|
20
20
|
where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, id }
|
|
21
21
|
});
|
|
22
22
|
if (domain) {
|
|
@@ -27,22 +27,22 @@ let BoardQuery = class BoardQuery {
|
|
|
27
27
|
.from(shell_1.Domain, 'domain')
|
|
28
28
|
.getCount();
|
|
29
29
|
if (!(0, operato_license_checker_1.checkDomain)(count)) {
|
|
30
|
-
throw new
|
|
31
|
-
errorCode: context.t(
|
|
30
|
+
throw new license_error_js_1.LicenseError({
|
|
31
|
+
errorCode: context.t(license_error_js_1.LicenseError.ERROR_CODES.OVER_LIMIT)
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
if (board) {
|
|
36
36
|
// 1. check boardSecret is over limit quantity or not
|
|
37
|
-
var count = await (0, shell_1.getRepository)(
|
|
37
|
+
var count = await (0, shell_1.getRepository)(board_js_1.Board)
|
|
38
38
|
.manager.createQueryBuilder()
|
|
39
39
|
.select('id')
|
|
40
|
-
.from(
|
|
40
|
+
.from(board_js_1.Board, 'board')
|
|
41
41
|
.where('"domain_id" = :domainId', { domainId: domain.id })
|
|
42
42
|
.getCount();
|
|
43
43
|
if (!(0, operato_license_checker_1.checkTarget)(count)) {
|
|
44
|
-
throw new
|
|
45
|
-
errorCode: context.t(
|
|
44
|
+
throw new license_error_js_1.LicenseError({
|
|
45
|
+
errorCode: context.t(license_error_js_1.LicenseError.ERROR_CODES.OVER_LIMIT)
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -50,14 +50,14 @@ let BoardQuery = class BoardQuery {
|
|
|
50
50
|
}
|
|
51
51
|
async boardByName(name, context) {
|
|
52
52
|
const { domain } = context.state;
|
|
53
|
-
return await (0, shell_1.getRepository)(
|
|
53
|
+
return await (0, shell_1.getRepository)(board_js_1.Board).findOne({
|
|
54
54
|
where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, name }
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
async boardsCreatedByMe(params, context) {
|
|
58
58
|
const { domain, user } = context.state;
|
|
59
59
|
const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
|
|
60
|
-
repository: (0, shell_1.getRepository)(
|
|
60
|
+
repository: (0, shell_1.getRepository)(board_js_1.Board),
|
|
61
61
|
params,
|
|
62
62
|
domain,
|
|
63
63
|
alias: 'board',
|
|
@@ -68,7 +68,7 @@ let BoardQuery = class BoardQuery {
|
|
|
68
68
|
}
|
|
69
69
|
async boardVersions(id, context) {
|
|
70
70
|
const { domain } = context.state;
|
|
71
|
-
return await (0, shell_1.getRepository)(
|
|
71
|
+
return await (0, shell_1.getRepository)(board_history_js_1.BoardHistory).find({
|
|
72
72
|
where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, originalId: id },
|
|
73
73
|
relations: ['updater'],
|
|
74
74
|
order: { version: 'DESC' },
|
|
@@ -77,7 +77,7 @@ let BoardQuery = class BoardQuery {
|
|
|
77
77
|
}
|
|
78
78
|
async boardPublished(id, context) {
|
|
79
79
|
const { domain } = context.state;
|
|
80
|
-
return await (0, shell_1.getRepository)(
|
|
80
|
+
return await (0, shell_1.getRepository)(board_history_js_1.BoardHistory).findOne({
|
|
81
81
|
where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, originalId: id },
|
|
82
82
|
order: { version: 'DESC' }
|
|
83
83
|
});
|
|
@@ -85,7 +85,7 @@ let BoardQuery = class BoardQuery {
|
|
|
85
85
|
async boards(params, context) {
|
|
86
86
|
const { domain } = context.state;
|
|
87
87
|
const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
|
|
88
|
-
repository: (0, shell_1.getRepository)(
|
|
88
|
+
repository: (0, shell_1.getRepository)(board_js_1.Board),
|
|
89
89
|
params,
|
|
90
90
|
domain,
|
|
91
91
|
searchables: ['name', 'description']
|
|
@@ -95,13 +95,13 @@ let BoardQuery = class BoardQuery {
|
|
|
95
95
|
}
|
|
96
96
|
async group(board) {
|
|
97
97
|
return (board.groupId &&
|
|
98
|
-
(await (0, shell_1.getRepository)(
|
|
98
|
+
(await (0, shell_1.getRepository)(group_js_1.Group).findOneBy({
|
|
99
99
|
id: board.groupId
|
|
100
100
|
})));
|
|
101
101
|
}
|
|
102
102
|
async playGroups(board) {
|
|
103
103
|
var _a;
|
|
104
|
-
return (_a = (await (0, shell_1.getRepository)(
|
|
104
|
+
return (_a = (await (0, shell_1.getRepository)(board_js_1.Board).findOne({
|
|
105
105
|
where: { id: board.id },
|
|
106
106
|
relations: ['playGroups']
|
|
107
107
|
}))) === null || _a === void 0 ? void 0 : _a.playGroups;
|
|
@@ -128,7 +128,7 @@ let BoardQuery = class BoardQuery {
|
|
|
128
128
|
exports.BoardQuery = BoardQuery;
|
|
129
129
|
tslib_1.__decorate([
|
|
130
130
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)'),
|
|
131
|
-
(0, type_graphql_1.Query)(returns =>
|
|
131
|
+
(0, type_graphql_1.Query)(returns => board_js_1.Board, { description: 'To fetch a board' }),
|
|
132
132
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
133
133
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
134
134
|
tslib_1.__metadata("design:type", Function),
|
|
@@ -136,7 +136,7 @@ tslib_1.__decorate([
|
|
|
136
136
|
tslib_1.__metadata("design:returntype", Promise)
|
|
137
137
|
], BoardQuery.prototype, "board", null);
|
|
138
138
|
tslib_1.__decorate([
|
|
139
|
-
(0, type_graphql_1.Query)(returns =>
|
|
139
|
+
(0, type_graphql_1.Query)(returns => board_js_1.Board, { nullable: true, description: 'To fetch a Board Model by name' }),
|
|
140
140
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)'),
|
|
141
141
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('name')),
|
|
142
142
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
@@ -145,7 +145,7 @@ tslib_1.__decorate([
|
|
|
145
145
|
tslib_1.__metadata("design:returntype", Promise)
|
|
146
146
|
], BoardQuery.prototype, "boardByName", null);
|
|
147
147
|
tslib_1.__decorate([
|
|
148
|
-
(0, type_graphql_1.Query)(returns =>
|
|
148
|
+
(0, type_graphql_1.Query)(returns => board_type_js_1.BoardList, { description: 'To fetch Boards created by me' }),
|
|
149
149
|
tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
|
|
150
150
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
151
151
|
tslib_1.__metadata("design:type", Function),
|
|
@@ -153,7 +153,7 @@ tslib_1.__decorate([
|
|
|
153
153
|
tslib_1.__metadata("design:returntype", Promise)
|
|
154
154
|
], BoardQuery.prototype, "boardsCreatedByMe", null);
|
|
155
155
|
tslib_1.__decorate([
|
|
156
|
-
(0, type_graphql_1.Query)(returns => [
|
|
156
|
+
(0, type_graphql_1.Query)(returns => [board_history_js_1.BoardHistory], { description: 'To fetch a Board Versions' }),
|
|
157
157
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)'),
|
|
158
158
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
159
159
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
@@ -162,7 +162,7 @@ tslib_1.__decorate([
|
|
|
162
162
|
tslib_1.__metadata("design:returntype", Promise)
|
|
163
163
|
], BoardQuery.prototype, "boardVersions", null);
|
|
164
164
|
tslib_1.__decorate([
|
|
165
|
-
(0, type_graphql_1.Query)(returns =>
|
|
165
|
+
(0, type_graphql_1.Query)(returns => board_history_js_1.BoardHistory, { description: 'To fetch the latest Board published' }),
|
|
166
166
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)'),
|
|
167
167
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
168
168
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
@@ -171,7 +171,7 @@ tslib_1.__decorate([
|
|
|
171
171
|
tslib_1.__metadata("design:returntype", Promise)
|
|
172
172
|
], BoardQuery.prototype, "boardPublished", null);
|
|
173
173
|
tslib_1.__decorate([
|
|
174
|
-
(0, type_graphql_1.Query)(returns =>
|
|
174
|
+
(0, type_graphql_1.Query)(returns => board_type_js_1.BoardList, { description: 'To fetch multiple Boards' }),
|
|
175
175
|
(0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)'),
|
|
176
176
|
tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
|
|
177
177
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
@@ -180,41 +180,41 @@ tslib_1.__decorate([
|
|
|
180
180
|
tslib_1.__metadata("design:returntype", Promise)
|
|
181
181
|
], BoardQuery.prototype, "boards", null);
|
|
182
182
|
tslib_1.__decorate([
|
|
183
|
-
(0, type_graphql_1.FieldResolver)(type =>
|
|
183
|
+
(0, type_graphql_1.FieldResolver)(type => group_js_1.Group),
|
|
184
184
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
185
185
|
tslib_1.__metadata("design:type", Function),
|
|
186
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
186
|
+
tslib_1.__metadata("design:paramtypes", [board_js_1.Board]),
|
|
187
187
|
tslib_1.__metadata("design:returntype", Promise)
|
|
188
188
|
], BoardQuery.prototype, "group", null);
|
|
189
189
|
tslib_1.__decorate([
|
|
190
|
-
(0, type_graphql_1.FieldResolver)(type => [
|
|
190
|
+
(0, type_graphql_1.FieldResolver)(type => [play_group_js_1.PlayGroup]),
|
|
191
191
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
192
192
|
tslib_1.__metadata("design:type", Function),
|
|
193
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
193
|
+
tslib_1.__metadata("design:paramtypes", [board_js_1.Board]),
|
|
194
194
|
tslib_1.__metadata("design:returntype", Promise)
|
|
195
195
|
], BoardQuery.prototype, "playGroups", null);
|
|
196
196
|
tslib_1.__decorate([
|
|
197
197
|
(0, type_graphql_1.FieldResolver)(type => shell_1.Domain),
|
|
198
198
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
199
199
|
tslib_1.__metadata("design:type", Function),
|
|
200
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
200
|
+
tslib_1.__metadata("design:paramtypes", [board_js_1.Board]),
|
|
201
201
|
tslib_1.__metadata("design:returntype", Promise)
|
|
202
202
|
], BoardQuery.prototype, "domain", null);
|
|
203
203
|
tslib_1.__decorate([
|
|
204
204
|
(0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
|
|
205
205
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
206
206
|
tslib_1.__metadata("design:type", Function),
|
|
207
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
207
|
+
tslib_1.__metadata("design:paramtypes", [board_js_1.Board]),
|
|
208
208
|
tslib_1.__metadata("design:returntype", Promise)
|
|
209
209
|
], BoardQuery.prototype, "updater", null);
|
|
210
210
|
tslib_1.__decorate([
|
|
211
211
|
(0, type_graphql_1.FieldResolver)(type => auth_base_1.User),
|
|
212
212
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
213
213
|
tslib_1.__metadata("design:type", Function),
|
|
214
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
214
|
+
tslib_1.__metadata("design:paramtypes", [board_js_1.Board]),
|
|
215
215
|
tslib_1.__metadata("design:returntype", Promise)
|
|
216
216
|
], BoardQuery.prototype, "creator", null);
|
|
217
217
|
exports.BoardQuery = BoardQuery = tslib_1.__decorate([
|
|
218
|
-
(0, type_graphql_1.Resolver)(
|
|
218
|
+
(0, type_graphql_1.Resolver)(board_js_1.Board)
|
|
219
219
|
], BoardQuery);
|
|
220
220
|
//# sourceMappingURL=board-query.js.map
|