@things-factory/board-service 6.0.0-alpha.6 → 6.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist-server/service/board/board-mutation.js.map +1 -1
  2. package/dist-server/service/board/board-subscription.js +49 -0
  3. package/dist-server/service/board/board-subscription.js.map +1 -0
  4. package/dist-server/service/board/event-subscriber.js +36 -0
  5. package/dist-server/service/board/event-subscriber.js.map +1 -0
  6. package/dist-server/service/board/index.js +5 -2
  7. package/dist-server/service/board/index.js.map +1 -1
  8. package/dist-server/service/index.js +6 -1
  9. package/dist-server/service/index.js.map +1 -1
  10. package/dist-server/service/play-group/event-subscriber.js +33 -0
  11. package/dist-server/service/play-group/event-subscriber.js.map +1 -0
  12. package/dist-server/service/play-group/index.js +5 -2
  13. package/dist-server/service/play-group/index.js.map +1 -1
  14. package/dist-server/service/play-group/play-group-mutation.js +22 -13
  15. package/dist-server/service/play-group/play-group-mutation.js.map +1 -1
  16. package/dist-server/service/play-group/play-group-subscription.js +49 -0
  17. package/dist-server/service/play-group/play-group-subscription.js.map +1 -0
  18. package/dist-server/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +4 -4
  20. package/server/service/board/board-mutation.ts +0 -1
  21. package/server/service/board/board-subscription.ts +43 -0
  22. package/server/service/board/event-subscriber.ts +39 -0
  23. package/server/service/board/index.ts +4 -1
  24. package/server/service/index.ts +12 -2
  25. package/server/service/play-group/event-subscriber.ts +33 -0
  26. package/server/service/play-group/index.ts +4 -1
  27. package/server/service/play-group/play-group-mutation.ts +26 -15
  28. package/server/service/play-group/play-group-subscription.ts +43 -0
@@ -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 } from 'type-graphql'\n\nimport { getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { thumbnail } from '../../controllers/thumbnail'\nimport { Group } from '../group/group'\nimport { Board } from './board'\nimport { BoardPatch, NewBoard } from './board-type'\n\n@Resolver(Board)\nexport class BoardMutation {\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 } = context.state\n const repository = getRepository(Board)\n const groupRepository = getRepository(Group)\n\n const newBoard: Board = {\n ...board\n }\n\n if (board.groupId) {\n newBoard.group = await groupRepository.findOneBy({\n id: board.groupId\n })\n }\n\n const base64 = await thumbnail({\n model: board.model,\n context\n })\n\n if (base64) {\n newBoard.thumbnail = 'data:image/png;base64,' + base64.toString('base64')\n } else {\n newBoard.thumbnail = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n }\n\n const created = await repository.save({\n domain,\n ...newBoard,\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 @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 } = context.state\n const repository = getRepository(Board)\n\n const board = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n if (patch.model) {\n const base64 = await thumbnail({\n model: patch.model,\n context\n })\n\n if (base64) {\n patch.thumbnail = 'data:image/png;base64,' + base64.toString('base64')\n } else {\n patch.thumbnail = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n }\n }\n\n if (patch.groupId !== undefined) {\n const groupRepository = getRepository(Group)\n board.group =\n (await groupRepository.findOneBy({\n domain: { id: domain.id },\n id: patch.groupId\n })) || null\n\n delete patch.groupId\n }\n\n const updated = await repository.save({\n ...board,\n ...patch,\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 @Mutation(returns => Boolean, { description: 'To delete Board' })\n async deleteBoard(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, user, notify } = context.state\n const repository = getRepository(Board)\n const board = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n const deleted = await repository.delete(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"]}
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 } from 'type-graphql'\nimport { getRedirectSubdomainPath, getRepository } from '@things-factory/shell'\n\nimport { thumbnail } from '../../controllers/thumbnail'\nimport { Group } from '../group/group'\nimport { Board } from './board'\nimport { BoardPatch, NewBoard } from './board-type'\n\n@Resolver(Board)\nexport class BoardMutation {\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 } = context.state\n const repository = getRepository(Board)\n const groupRepository = getRepository(Group)\n\n const newBoard: Board = {\n ...board\n }\n\n if (board.groupId) {\n newBoard.group = await groupRepository.findOneBy({\n id: board.groupId\n })\n }\n\n const base64 = await thumbnail({\n model: board.model,\n context\n })\n\n if (base64) {\n newBoard.thumbnail = 'data:image/png;base64,' + base64.toString('base64')\n } else {\n newBoard.thumbnail = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n }\n\n const created = await repository.save({\n domain,\n ...newBoard,\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 @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 } = context.state\n const repository = getRepository(Board)\n\n const board = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n if (patch.model) {\n const base64 = await thumbnail({\n model: patch.model,\n context\n })\n\n if (base64) {\n patch.thumbnail = 'data:image/png;base64,' + base64.toString('base64')\n } else {\n patch.thumbnail = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n }\n }\n\n if (patch.groupId !== undefined) {\n const groupRepository = getRepository(Group)\n board.group =\n (await groupRepository.findOneBy({\n domain: { id: domain.id },\n id: patch.groupId\n })) || null\n\n delete patch.groupId\n }\n\n const updated = await repository.save({\n ...board,\n ...patch,\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 @Mutation(returns => Boolean, { description: 'To delete Board' })\n async deleteBoard(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, user, notify } = context.state\n const repository = getRepository(Board)\n const board = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n const deleted = await repository.delete(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"]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoardSubscription = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const graphql_subscriptions_1 = require("graphql-subscriptions");
7
+ const shell_1 = require("@things-factory/shell");
8
+ const board_1 = require("./board");
9
+ let BoardSubscription = class BoardSubscription {
10
+ board(payload, id) {
11
+ return payload.board;
12
+ }
13
+ };
14
+ tslib_1.__decorate([
15
+ (0, type_graphql_1.Subscription)({
16
+ subscribe: (_, args, context, info) => {
17
+ var _a;
18
+ const { domain, user } = context.state;
19
+ const { id } = args;
20
+ const subdomain = domain === null || domain === void 0 ? void 0 : domain.subdomain;
21
+ if (!domain) {
22
+ throw new Error('domain required');
23
+ }
24
+ if (!((_a = user.domains) === null || _a === void 0 ? void 0 : _a.find(d => d.subdomain === subdomain))) {
25
+ throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`);
26
+ }
27
+ return (0, graphql_subscriptions_1.withFilter)(() => shell_1.pubsub.asyncIterator('board'), (payload, variables, context, info) => {
28
+ const { domainId, id: boardId } = payload.board;
29
+ if (domainId !== domain.id) {
30
+ return false;
31
+ }
32
+ if (id !== boardId) {
33
+ return false;
34
+ }
35
+ return true;
36
+ })(_, args, context, info);
37
+ }
38
+ }),
39
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
40
+ tslib_1.__param(1, (0, type_graphql_1.Arg)('id')),
41
+ tslib_1.__metadata("design:type", Function),
42
+ tslib_1.__metadata("design:paramtypes", [Object, String]),
43
+ tslib_1.__metadata("design:returntype", board_1.Board)
44
+ ], BoardSubscription.prototype, "board", null);
45
+ BoardSubscription = tslib_1.__decorate([
46
+ (0, type_graphql_1.Resolver)(board_1.Board)
47
+ ], BoardSubscription);
48
+ exports.BoardSubscription = BoardSubscription;
49
+ //# sourceMappingURL=board-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-subscription.js","sourceRoot":"","sources":["../../../server/service/board/board-subscription.ts"],"names":[],"mappings":";;;;AAAA,+CAAgE;AAChE,iEAAkD;AAClD,iDAA8C;AAC9C,mCAA+B;AAG/B,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;IAiC5B,KAAK,CAAS,OAAyB,EAAa,EAAU;QAC5D,OAAO,OAAO,CAAC,KAAK,CAAA;IACtB,CAAC;CACF,CAAA;AAHC;IAhCC,IAAA,2BAAY,EAAC;QACZ,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;;YACpC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;YACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;YACnB,MAAM,SAAS,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAA;YAEnC,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;aACnC;YAED,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA,EAAE;gBACvD,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,6BAA6B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;aAChF;YAED,OAAO,IAAA,kCAAU,EACf,GAAG,EAAE,CAAC,cAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EACnC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBACpC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;gBAE/C,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE;oBAC1B,OAAO,KAAK,CAAA;iBACb;gBAED,IAAI,EAAE,KAAK,OAAO,EAAE;oBAClB,OAAO,KAAK,CAAA;iBACb;gBAED,OAAO,IAAI,CAAA;YACb,CAAC,CACF,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC;IACK,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAA6B,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;;;4CAAc,aAAK;8CAErE;AAnCU,iBAAiB;IAD7B,IAAA,uBAAQ,EAAC,aAAK,CAAC;GACH,iBAAiB,CAoC7B;AApCY,8CAAiB","sourcesContent":["import { Resolver, Subscription, Root, Arg } from 'type-graphql'\nimport { withFilter } from 'graphql-subscriptions'\nimport { pubsub } from '@things-factory/shell'\nimport { Board } from './board'\n\n@Resolver(Board)\nexport class BoardSubscription {\n @Subscription({\n subscribe: (_, args, context, info) => {\n const { domain, user } = context.state\n const { id } = args\n const subdomain = domain?.subdomain\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return withFilter(\n () => pubsub.asyncIterator('board'),\n (payload, variables, context, info) => {\n const { domainId, id: boardId } = payload.board\n\n if (domainId !== domain.id) {\n return false\n }\n\n if (id !== boardId) {\n return false\n }\n\n return true\n }\n )(_, args, context, info)\n }\n })\n board(@Root() payload: { board: Board }, @Arg('id') id: string): Board {\n return payload.board\n }\n}\n"]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoardSubscriber = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const shell_1 = require("@things-factory/shell");
7
+ const board_1 = require("./board");
8
+ let BoardSubscriber = class BoardSubscriber {
9
+ listenTo() {
10
+ return board_1.Board;
11
+ }
12
+ // afterInsert(event: InsertEvent<Board>): Promise<any> | void {
13
+ // const board = event.entity
14
+ // pubsub.publish('board', {
15
+ // board
16
+ // })
17
+ // }
18
+ async afterUpdate(event) {
19
+ var board = event.entity;
20
+ board = await (0, shell_1.getRepository)(board_1.Board).findOne({
21
+ where: { domain: { id: board.domainId }, id: board.id },
22
+ relations: ['playGroups']
23
+ });
24
+ board.playGroups.forEach(playGroup => shell_1.pubsub.publish('play-group', {
25
+ playGroup
26
+ }));
27
+ shell_1.pubsub.publish('board', {
28
+ board
29
+ });
30
+ }
31
+ };
32
+ BoardSubscriber = tslib_1.__decorate([
33
+ (0, typeorm_1.EventSubscriber)()
34
+ ], BoardSubscriber);
35
+ exports.BoardSubscriber = BoardSubscriber;
36
+ //# sourceMappingURL=event-subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-subscriber.js","sourceRoot":"","sources":["../../../server/service/board/event-subscriber.ts"],"names":[],"mappings":";;;;AAAA,qCAA8F;AAE9F,iDAA6D;AAE7D,mCAA+B;AAG/B,IAAa,eAAe,GAA5B,MAAa,eAAe;IAC1B,QAAQ;QACN,OAAO,aAAK,CAAA;IACd,CAAC;IAED,gEAAgE;IAChE,+BAA+B;IAE/B,8BAA8B;IAC9B,YAAY;IACZ,OAAO;IACP,IAAI;IAEJ,KAAK,CAAC,WAAW,CAAC,KAAyB;QACzC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;QAExB,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,aAAK,CAAC,CAAC,OAAO,CAAC;YACzC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;YACvD,SAAS,EAAE,CAAC,YAAY,CAAC;SAC1B,CAAC,CAAA;QAEF,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CACnC,cAAM,CAAC,OAAO,CAAC,YAAY,EAAE;YAC3B,SAAS;SACV,CAAC,CACH,CAAA;QAED,cAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YACtB,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA/BY,eAAe;IAD3B,IAAA,yBAAe,GAAE;GACL,eAAe,CA+B3B;AA/BY,0CAAe","sourcesContent":["import { EventSubscriber, EntitySubscriberInterface, InsertEvent, UpdateEvent } from 'typeorm'\n\nimport { pubsub, getRepository } from '@things-factory/shell'\n\nimport { Board } from './board'\n\n@EventSubscriber()\nexport class BoardSubscriber implements EntitySubscriberInterface<Board> {\n listenTo() {\n return Board\n }\n\n // afterInsert(event: InsertEvent<Board>): Promise<any> | void {\n // const board = event.entity\n\n // pubsub.publish('board', {\n // board\n // })\n // }\n\n async afterUpdate(event: UpdateEvent<Board>): Promise<any> {\n var board = event.entity\n\n board = await getRepository(Board).findOne({\n where: { domain: { id: board.domainId }, id: board.id },\n relations: ['playGroups']\n })\n\n board.playGroups.forEach(playGroup =>\n pubsub.publish('play-group', {\n playGroup\n })\n )\n\n pubsub.publish('board', {\n board\n })\n }\n}\n"]}
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = exports.entities = void 0;
3
+ exports.subscribers = exports.resolvers = exports.entities = void 0;
4
4
  const board_1 = require("./board");
5
5
  const board_query_1 = require("./board-query");
6
6
  const board_mutation_1 = require("./board-mutation");
7
+ const board_subscription_1 = require("./board-subscription");
8
+ const event_subscriber_1 = require("./event-subscriber");
7
9
  exports.entities = [board_1.Board];
8
- exports.resolvers = [board_query_1.BoardQuery, board_mutation_1.BoardMutation];
10
+ exports.resolvers = [board_query_1.BoardQuery, board_mutation_1.BoardMutation, board_subscription_1.BoardSubscription];
11
+ exports.subscribers = [event_subscriber_1.BoardSubscriber];
9
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/board/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,+CAA0C;AAC1C,qDAAgD;AAEnC,QAAA,QAAQ,GAAG,CAAC,aAAK,CAAC,CAAA;AAClB,QAAA,SAAS,GAAG,CAAC,wBAAU,EAAE,8BAAa,CAAC,CAAA","sourcesContent":["import { Board } from './board'\nimport { BoardQuery } from './board-query'\nimport { BoardMutation } from './board-mutation'\n\nexport const entities = [Board]\nexport const resolvers = [BoardQuery, BoardMutation]\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/board/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,+CAA0C;AAC1C,qDAAgD;AAChD,6DAAwD;AACxD,yDAAoD;AAEvC,QAAA,QAAQ,GAAG,CAAC,aAAK,CAAC,CAAA;AAClB,QAAA,SAAS,GAAG,CAAC,wBAAU,EAAE,8BAAa,EAAE,sCAAiB,CAAC,CAAA;AAC1D,QAAA,WAAW,GAAG,CAAC,kCAAe,CAAC,CAAA","sourcesContent":["import { Board } from './board'\nimport { BoardQuery } from './board-query'\nimport { BoardMutation } from './board-mutation'\nimport { BoardSubscription } from './board-subscription'\nimport { BoardSubscriber } from './event-subscriber'\n\nexport const entities = [Board]\nexport const resolvers = [BoardQuery, BoardMutation, BoardSubscription]\nexport const subscribers = [BoardSubscriber]\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.schema = exports.entities = void 0;
3
+ exports.schema = exports.subscribers = exports.entities = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  /* EXPORT ENTITY TYPES */
6
6
  tslib_1.__exportStar(require("./board/board"), exports);
@@ -16,6 +16,11 @@ exports.entities = [
16
16
  ...group_1.entities,
17
17
  ...play_group_1.entities
18
18
  ];
19
+ exports.subscribers = [
20
+ /* SUBSCRIBERS */
21
+ ...board_1.subscribers,
22
+ ...play_group_1.subscribers
23
+ ];
19
24
  exports.schema = {
20
25
  resolverClasses: [
21
26
  /* RESOLVER CLASSES */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;AAAA,yBAAyB;AACzB,wDAA6B;AAC7B,wDAA6B;AAC7B,kEAAuC;AAEvC,mCAAmC;AACnC,mCAAgF;AAChF,mCAAgF;AAChF,6CAA6F;AAEhF,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,gBAAa;IAChB,GAAG,gBAAa;IAChB,GAAG,qBAAiB;CACrB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,iBAAc;QACjB,GAAG,iBAAc;QACjB,GAAG,sBAAkB;KACtB;CACF,CAAA","sourcesContent":["/* EXPORT ENTITY TYPES */\nexport * from './board/board'\nexport * from './group/group'\nexport * from './play-group/play-group'\n\n/* IMPORT ENTITIES AND RESOLVERS */\nimport { entities as BoardEntities, resolvers as BoardResolvers } from './board'\nimport { entities as GroupEntities, resolvers as GroupResolvers } from './group'\nimport { entities as PlayGroupEntities, resolvers as PlayGroupResolvers } from './play-group'\n\nexport const entities = [\n /* ENTITIES */\n ...BoardEntities,\n ...GroupEntities,\n ...PlayGroupEntities\n]\n\nexport const schema = {\n resolverClasses: [\n /* RESOLVER CLASSES */\n ...BoardResolvers,\n ...GroupResolvers,\n ...PlayGroupResolvers\n ]\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;AAAA,yBAAyB;AACzB,wDAA6B;AAC7B,wDAA6B;AAC7B,kEAAuC;AAEvC,mCAAmC;AACnC,mCAAiH;AACjH,mCAAgF;AAChF,6CAIqB;AAER,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,gBAAa;IAChB,GAAG,gBAAa;IAChB,GAAG,qBAAiB;CACrB,CAAA;AAEY,QAAA,WAAW,GAAG;IACzB,iBAAiB;IACjB,GAAG,mBAAgB;IACnB,GAAG,wBAAoB;CACxB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,iBAAc;QACjB,GAAG,iBAAc;QACjB,GAAG,sBAAkB;KACtB;CACF,CAAA","sourcesContent":["/* EXPORT ENTITY TYPES */\nexport * from './board/board'\nexport * from './group/group'\nexport * from './play-group/play-group'\n\n/* IMPORT ENTITIES AND RESOLVERS */\nimport { entities as BoardEntities, resolvers as BoardResolvers, subscribers as BoardSubscribers } from './board'\nimport { entities as GroupEntities, resolvers as GroupResolvers } from './group'\nimport {\n entities as PlayGroupEntities,\n resolvers as PlayGroupResolvers,\n subscribers as PlayGroupSubscribers\n} from './play-group'\n\nexport const entities = [\n /* ENTITIES */\n ...BoardEntities,\n ...GroupEntities,\n ...PlayGroupEntities\n]\n\nexport const subscribers = [\n /* SUBSCRIBERS */\n ...BoardSubscribers,\n ...PlayGroupSubscribers\n]\n\nexport const schema = {\n resolverClasses: [\n /* RESOLVER CLASSES */\n ...BoardResolvers,\n ...GroupResolvers,\n ...PlayGroupResolvers\n ]\n}\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlayGroupSubscriber = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const shell_1 = require("@things-factory/shell");
7
+ const play_group_1 = require("./play-group");
8
+ let PlayGroupSubscriber = class PlayGroupSubscriber {
9
+ listenTo() {
10
+ return play_group_1.PlayGroup;
11
+ }
12
+ // afterInsert(event: InsertEvent<PlayGroup>): Promise<any> | void {
13
+ // const playGroup = event.entity
14
+ // pubsub.publish('playGroup', {
15
+ // playGroup
16
+ // })
17
+ // }
18
+ async afterUpdate(event) {
19
+ var playGroup = event.entity;
20
+ playGroup = await (0, shell_1.getRepository)(play_group_1.PlayGroup).findOne({
21
+ where: { domain: { id: playGroup.domainId }, id: playGroup.id },
22
+ relations: ['domain']
23
+ });
24
+ shell_1.pubsub.publish('play-group', {
25
+ playGroup
26
+ });
27
+ }
28
+ };
29
+ PlayGroupSubscriber = tslib_1.__decorate([
30
+ (0, typeorm_1.EventSubscriber)()
31
+ ], PlayGroupSubscriber);
32
+ exports.PlayGroupSubscriber = PlayGroupSubscriber;
33
+ //# sourceMappingURL=event-subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-subscriber.js","sourceRoot":"","sources":["../../../server/service/play-group/event-subscriber.ts"],"names":[],"mappings":";;;;AAAA,qCAA8F;AAE9F,iDAA6D;AAE7D,6CAAwC;AAGxC,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAC9B,QAAQ;QACN,OAAO,sBAAS,CAAA;IAClB,CAAC;IAED,oEAAoE;IACpE,mCAAmC;IAEnC,kCAAkC;IAClC,gBAAgB;IAChB,OAAO;IACP,IAAI;IAEJ,KAAK,CAAC,WAAW,CAAC,KAA6B;QAC7C,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAA;QAE5B,SAAS,GAAG,MAAM,IAAA,qBAAa,EAAC,sBAAS,CAAC,CAAC,OAAO,CAAC;YACjD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE;YAC/D,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAA;QAEF,cAAM,CAAC,OAAO,CAAC,YAAY,EAAE;YAC3B,SAAS;SACV,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAzBY,mBAAmB;IAD/B,IAAA,yBAAe,GAAE;GACL,mBAAmB,CAyB/B;AAzBY,kDAAmB","sourcesContent":["import { EventSubscriber, EntitySubscriberInterface, InsertEvent, UpdateEvent } from 'typeorm'\n\nimport { pubsub, getRepository } from '@things-factory/shell'\n\nimport { PlayGroup } from './play-group'\n\n@EventSubscriber()\nexport class PlayGroupSubscriber implements EntitySubscriberInterface<PlayGroup> {\n listenTo() {\n return PlayGroup\n }\n\n // afterInsert(event: InsertEvent<PlayGroup>): Promise<any> | void {\n // const playGroup = event.entity\n\n // pubsub.publish('playGroup', {\n // playGroup\n // })\n // }\n\n async afterUpdate(event: UpdateEvent<PlayGroup>): Promise<any> {\n var playGroup = event.entity\n\n playGroup = await getRepository(PlayGroup).findOne({\n where: { domain: { id: playGroup.domainId }, id: playGroup.id },\n relations: ['domain']\n })\n\n pubsub.publish('play-group', {\n playGroup\n })\n }\n}\n"]}
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = exports.entities = void 0;
3
+ exports.subscribers = exports.resolvers = exports.entities = void 0;
4
4
  const play_group_1 = require("./play-group");
5
5
  const play_group_query_1 = require("./play-group-query");
6
6
  const play_group_mutation_1 = require("./play-group-mutation");
7
+ const play_group_subscription_1 = require("./play-group-subscription");
8
+ const event_subscriber_1 = require("./event-subscriber");
7
9
  exports.entities = [play_group_1.PlayGroup];
8
- exports.resolvers = [play_group_query_1.PlayGroupQuery, play_group_mutation_1.PlayGroupMutation];
10
+ exports.resolvers = [play_group_query_1.PlayGroupQuery, play_group_mutation_1.PlayGroupMutation, play_group_subscription_1.PlayGroupSubscription];
11
+ exports.subscribers = [event_subscriber_1.PlayGroupSubscriber];
9
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/play-group/index.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AACxC,yDAAmD;AACnD,+DAAyD;AAE5C,QAAA,QAAQ,GAAG,CAAC,sBAAS,CAAC,CAAA;AACtB,QAAA,SAAS,GAAG,CAAC,iCAAc,EAAE,uCAAiB,CAAC,CAAA","sourcesContent":["import { PlayGroup } from './play-group'\nimport { PlayGroupQuery } from './play-group-query'\nimport { PlayGroupMutation } from './play-group-mutation'\n\nexport const entities = [PlayGroup]\nexport const resolvers = [PlayGroupQuery, PlayGroupMutation]\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/play-group/index.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AACxC,yDAAmD;AACnD,+DAAyD;AACzD,uEAAiE;AACjE,yDAAwD;AAE3C,QAAA,QAAQ,GAAG,CAAC,sBAAS,CAAC,CAAA;AACtB,QAAA,SAAS,GAAG,CAAC,iCAAc,EAAE,uCAAiB,EAAE,+CAAqB,CAAC,CAAA;AACtE,QAAA,WAAW,GAAG,CAAC,sCAAmB,CAAC,CAAA","sourcesContent":["import { PlayGroup } from './play-group'\nimport { PlayGroupQuery } from './play-group-query'\nimport { PlayGroupMutation } from './play-group-mutation'\nimport { PlayGroupSubscription } from './play-group-subscription'\nimport { PlayGroupSubscriber } from './event-subscriber'\n\nexport const entities = [PlayGroup]\nexport const resolvers = [PlayGroupQuery, PlayGroupMutation, PlayGroupSubscription]\nexport const subscribers = [PlayGroupSubscriber]\n"]}
@@ -3,23 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PlayGroupMutation = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
- const shell_1 = require("@things-factory/shell");
6
+ const typeorm_1 = require("typeorm");
7
7
  const board_1 = require("../board/board");
8
8
  const play_group_1 = require("./play-group");
9
9
  const play_group_type_1 = require("./play-group-type");
10
10
  let PlayGroupMutation = class PlayGroupMutation {
11
11
  async createPlayGroup(playGroup, context) {
12
- const { domain, user } = context.state;
13
- return await (0, shell_1.getRepository)(play_group_1.PlayGroup).save(Object.assign(Object.assign({ domain }, playGroup), { creator: user, updater: user }));
12
+ const { domain, user, tx } = context.state;
13
+ return await tx.getRepository(play_group_1.PlayGroup).save(Object.assign(Object.assign({ domain }, playGroup), { creator: user, updater: user }));
14
14
  }
15
15
  async updatePlayGroup(id, patch, context) {
16
- const { domain, user } = context.state;
17
- const repository = (0, shell_1.getRepository)(play_group_1.PlayGroup);
16
+ const { domain, user, tx } = context.state;
17
+ const repository = tx.getRepository(play_group_1.PlayGroup);
18
18
  const playGroup = await repository.findOneBy({ domain: { id: domain.id }, id });
19
19
  return await repository.save(Object.assign(Object.assign(Object.assign({}, playGroup), patch), { updater: user }));
20
20
  }
21
21
  async joinPlayGroup(id, boardIds, context) {
22
- const repository = (0, shell_1.getRepository)(play_group_1.PlayGroup);
22
+ const { tx } = context.state;
23
+ const repository = tx.getRepository(play_group_1.PlayGroup);
23
24
  const playGroup = await repository.findOne({
24
25
  where: { id },
25
26
  relations: ['boards']
@@ -30,12 +31,14 @@ let PlayGroupMutation = class PlayGroupMutation {
30
31
  boardIdList.push(boardId);
31
32
  }
32
33
  });
33
- const boardRepository = (0, shell_1.getRepository)(board_1.Board);
34
- playGroup.boards = await boardRepository.findByIds(boardIdList);
34
+ const boardRepository = tx.getRepository(board_1.Board);
35
+ playGroup.boards = await boardRepository.findBy({ id: (0, typeorm_1.In)(boardIdList) });
36
+ playGroup.updatedAt = new Date();
35
37
  return await repository.save(playGroup);
36
38
  }
37
39
  async leavePlayGroup(id, boardIds, context) {
38
- const repository = (0, shell_1.getRepository)(play_group_1.PlayGroup);
40
+ const { tx } = context.state;
41
+ const repository = tx.getRepository(play_group_1.PlayGroup);
39
42
  const playGroup = await repository.findOne({
40
43
  where: { id },
41
44
  relations: ['boards']
@@ -47,13 +50,14 @@ let PlayGroupMutation = class PlayGroupMutation {
47
50
  boardIdList.splice(index, 1);
48
51
  }
49
52
  });
50
- const boardRepository = (0, shell_1.getRepository)(board_1.Board);
51
- playGroup.boards = await boardRepository.findByIds(boardIdList);
53
+ const boardRepository = tx.getRepository(board_1.Board);
54
+ playGroup.boards = await boardRepository.findBy({ id: (0, typeorm_1.In)(boardIdList) });
55
+ playGroup.updatedAt = new Date();
52
56
  return await repository.save(playGroup);
53
57
  }
54
58
  async deletePlayGroup(id, context) {
55
- const { domain } = context.state;
56
- const repository = (0, shell_1.getRepository)(play_group_1.PlayGroup);
59
+ const { domain, tx } = context.state;
60
+ const repository = tx.getRepository(play_group_1.PlayGroup);
57
61
  /* TODO - 플레이 그룹은 소속된 보드-플레이그룹 관계들도 제거되어야 한다. */
58
62
  const playGroup = await repository.findOneBy({ domain: { id: domain.id }, id });
59
63
  await repository.delete(id);
@@ -62,6 +66,7 @@ let PlayGroupMutation = class PlayGroupMutation {
62
66
  };
63
67
  tslib_1.__decorate([
64
68
  (0, type_graphql_1.Mutation)(returns => play_group_1.PlayGroup, { description: 'To create new PlayGroup' }),
69
+ (0, type_graphql_1.Directive)('@transaction'),
65
70
  tslib_1.__param(0, (0, type_graphql_1.Arg)('playGroup')),
66
71
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
67
72
  tslib_1.__metadata("design:type", Function),
@@ -70,6 +75,7 @@ tslib_1.__decorate([
70
75
  ], PlayGroupMutation.prototype, "createPlayGroup", null);
71
76
  tslib_1.__decorate([
72
77
  (0, type_graphql_1.Mutation)(returns => play_group_1.PlayGroup, { description: 'To modify PlayGroup information' }),
78
+ (0, type_graphql_1.Directive)('@transaction'),
73
79
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
74
80
  tslib_1.__param(1, (0, type_graphql_1.Arg)('patch')),
75
81
  tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
@@ -79,6 +85,7 @@ tslib_1.__decorate([
79
85
  ], PlayGroupMutation.prototype, "updatePlayGroup", null);
80
86
  tslib_1.__decorate([
81
87
  (0, type_graphql_1.Mutation)(returns => play_group_1.PlayGroup, { description: 'To make the board to join the play group' }),
88
+ (0, type_graphql_1.Directive)('@transaction'),
82
89
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
83
90
  tslib_1.__param(1, (0, type_graphql_1.Arg)('boardIds', type => [String])),
84
91
  tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
@@ -88,6 +95,7 @@ tslib_1.__decorate([
88
95
  ], PlayGroupMutation.prototype, "joinPlayGroup", null);
89
96
  tslib_1.__decorate([
90
97
  (0, type_graphql_1.Mutation)(returns => play_group_1.PlayGroup, { description: 'To make the board to leave from the play group' }),
98
+ (0, type_graphql_1.Directive)('@transaction'),
91
99
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
92
100
  tslib_1.__param(1, (0, type_graphql_1.Arg)('boardIds', type => [String])),
93
101
  tslib_1.__param(2, (0, type_graphql_1.Ctx)()),
@@ -97,6 +105,7 @@ tslib_1.__decorate([
97
105
  ], PlayGroupMutation.prototype, "leavePlayGroup", null);
98
106
  tslib_1.__decorate([
99
107
  (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To delete PlayGroup' }),
108
+ (0, type_graphql_1.Directive)('@transaction'),
100
109
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
101
110
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
102
111
  tslib_1.__metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"play-group-mutation.js","sourceRoot":"","sources":["../../../server/service/play-group/play-group-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository } from '@things-factory/shell'\n\nimport { Board } from '../board/board'\nimport { PlayGroup } from './play-group'\nimport { NewPlayGroup, PlayGroupPatch } from './play-group-type'\n\n@Resolver(PlayGroup)\nexport class PlayGroupMutation {\n @Mutation(returns => PlayGroup, { description: 'To create new PlayGroup' })\n async createPlayGroup(\n @Arg('playGroup') playGroup: NewPlayGroup,\n @Ctx() context: ResolverContext\n ): Promise<PlayGroup> {\n const { domain, user } = context.state\n\n return await getRepository(PlayGroup).save({\n domain,\n ...playGroup,\n creator: user,\n updater: user\n })\n }\n\n @Mutation(returns => PlayGroup, { description: 'To modify PlayGroup information' })\n async updatePlayGroup(\n @Arg('id') id: string,\n @Arg('patch') patch: PlayGroupPatch,\n @Ctx() context: ResolverContext\n ): Promise<PlayGroup> {\n const { domain, user } = context.state\n const repository = getRepository(PlayGroup)\n\n const playGroup = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n return await repository.save({\n ...playGroup,\n ...patch,\n updater: user\n })\n }\n\n @Mutation(returns => PlayGroup, { description: 'To make the board to join the play group' })\n async joinPlayGroup(\n @Arg('id') id: string,\n @Arg('boardIds', type => [String]) boardIds: string[],\n @Ctx() context: ResolverContext\n ) {\n const repository = getRepository(PlayGroup)\n const playGroup = await repository.findOne({\n where: { id },\n relations: ['boards']\n })\n\n const boardIdList = playGroup.boards.map(board => board.id)\n boardIds.forEach(boardId => {\n if (boardIdList.indexOf(boardId) == -1) {\n boardIdList.push(boardId)\n }\n })\n\n const boardRepository = getRepository(Board)\n playGroup.boards = await boardRepository.findByIds(boardIdList)\n\n return await repository.save(playGroup)\n }\n\n @Mutation(returns => PlayGroup, { description: 'To make the board to leave from the play group' })\n async leavePlayGroup(\n @Arg('id') id: string,\n @Arg('boardIds', type => [String]) boardIds: string[],\n @Ctx() context: ResolverContext\n ) {\n const repository = getRepository(PlayGroup)\n const playGroup = await repository.findOne({\n where: { id },\n relations: ['boards']\n })\n\n const boardIdList = playGroup.boards.map(board => board.id)\n boardIds.forEach(boardId => {\n let index = boardIdList.indexOf(boardId)\n if (index !== -1) {\n boardIdList.splice(index, 1)\n }\n })\n\n const boardRepository = getRepository(Board)\n playGroup.boards = await boardRepository.findByIds(boardIdList)\n\n return await repository.save(playGroup)\n }\n\n @Mutation(returns => Boolean, { description: 'To delete PlayGroup' })\n async deletePlayGroup(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain } = context.state\n const repository = getRepository(PlayGroup)\n\n /* TODO - 플레이 그룹은 소속된 보드-플레이그룹 관계들도 제거되어야 한다. */\n const playGroup = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n await repository.delete(id)\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"play-group-mutation.js","sourceRoot":"","sources":["../../../server/service/play-group/play-group-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data } from '@things-factory/shell'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { Board } from '../board/board'\nimport { PlayGroup } from './play-group'\nimport { NewPlayGroup, PlayGroupPatch } from './play-group-type'\n\n@Resolver(PlayGroup)\nexport class PlayGroupMutation {\n @Mutation(returns => PlayGroup, { description: 'To create new PlayGroup' })\n @Directive('@transaction')\n async createPlayGroup(\n @Arg('playGroup') playGroup: NewPlayGroup,\n @Ctx() context: ResolverContext\n ): Promise<PlayGroup> {\n const { domain, user, tx } = context.state\n\n return await tx.getRepository(PlayGroup).save({\n domain,\n ...playGroup,\n creator: user,\n updater: user\n })\n }\n\n @Mutation(returns => PlayGroup, { description: 'To modify PlayGroup information' })\n @Directive('@transaction')\n async updatePlayGroup(\n @Arg('id') id: string,\n @Arg('patch') patch: PlayGroupPatch,\n @Ctx() context: ResolverContext\n ): Promise<PlayGroup> {\n const { domain, user, tx } = context.state\n const repository = tx.getRepository(PlayGroup)\n\n const playGroup = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n return await repository.save({\n ...playGroup,\n ...patch,\n updater: user\n })\n }\n\n @Mutation(returns => PlayGroup, { description: 'To make the board to join the play group' })\n @Directive('@transaction')\n async joinPlayGroup(\n @Arg('id') id: string,\n @Arg('boardIds', type => [String]) boardIds: string[],\n @Ctx() context: ResolverContext\n ) {\n const { tx } = context.state\n\n const repository = tx.getRepository(PlayGroup)\n const playGroup = await repository.findOne({\n where: { id },\n relations: ['boards']\n })\n\n const boardIdList = playGroup.boards.map(board => board.id)\n boardIds.forEach(boardId => {\n if (boardIdList.indexOf(boardId) == -1) {\n boardIdList.push(boardId)\n }\n })\n\n const boardRepository = tx.getRepository(Board)\n playGroup.boards = await boardRepository.findBy({ id: In(boardIdList) })\n playGroup.updatedAt = new Date()\n\n return await repository.save(playGroup)\n }\n\n @Mutation(returns => PlayGroup, { description: 'To make the board to leave from the play group' })\n @Directive('@transaction')\n async leavePlayGroup(\n @Arg('id') id: string,\n @Arg('boardIds', type => [String]) boardIds: string[],\n @Ctx() context: ResolverContext\n ) {\n const { tx } = context.state\n\n const repository = tx.getRepository(PlayGroup)\n const playGroup = await repository.findOne({\n where: { id },\n relations: ['boards']\n })\n\n const boardIdList = playGroup.boards.map(board => board.id)\n boardIds.forEach(boardId => {\n let index = boardIdList.indexOf(boardId)\n if (index !== -1) {\n boardIdList.splice(index, 1)\n }\n })\n\n const boardRepository = tx.getRepository(Board)\n playGroup.boards = await boardRepository.findBy({ id: In(boardIdList) })\n playGroup.updatedAt = new Date()\n\n return await repository.save(playGroup)\n }\n\n @Mutation(returns => Boolean, { description: 'To delete PlayGroup' })\n @Directive('@transaction')\n async deletePlayGroup(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n const repository = tx.getRepository(PlayGroup)\n\n /* TODO - 플레이 그룹은 소속된 보드-플레이그룹 관계들도 제거되어야 한다. */\n const playGroup = await repository.findOneBy({ domain: { id: domain.id }, id })\n\n await repository.delete(id)\n return true\n }\n}\n"]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlayGroupSubscription = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const graphql_subscriptions_1 = require("graphql-subscriptions");
7
+ const shell_1 = require("@things-factory/shell");
8
+ const play_group_1 = require("./play-group");
9
+ let PlayGroupSubscription = class PlayGroupSubscription {
10
+ playGroup(payload, id) {
11
+ return payload.playGroup;
12
+ }
13
+ };
14
+ tslib_1.__decorate([
15
+ (0, type_graphql_1.Subscription)({
16
+ subscribe: (_, args, context, info) => {
17
+ var _a;
18
+ const { domain, user } = context.state;
19
+ const { id } = args;
20
+ const subdomain = domain === null || domain === void 0 ? void 0 : domain.subdomain;
21
+ if (!domain) {
22
+ throw new Error('domain required');
23
+ }
24
+ if (!((_a = user.domains) === null || _a === void 0 ? void 0 : _a.find(d => d.subdomain === subdomain))) {
25
+ throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`);
26
+ }
27
+ return (0, graphql_subscriptions_1.withFilter)(() => shell_1.pubsub.asyncIterator('play-group'), (payload, variables, context, info) => {
28
+ const { id: playGroupId, domainId } = payload.playGroup;
29
+ if (domainId !== domain.id) {
30
+ return false;
31
+ }
32
+ if (id !== playGroupId) {
33
+ return false;
34
+ }
35
+ return true;
36
+ })(_, args, context, info);
37
+ }
38
+ }),
39
+ tslib_1.__param(0, (0, type_graphql_1.Root)()),
40
+ tslib_1.__param(1, (0, type_graphql_1.Arg)('id')),
41
+ tslib_1.__metadata("design:type", Function),
42
+ tslib_1.__metadata("design:paramtypes", [Object, String]),
43
+ tslib_1.__metadata("design:returntype", play_group_1.PlayGroup)
44
+ ], PlayGroupSubscription.prototype, "playGroup", null);
45
+ PlayGroupSubscription = tslib_1.__decorate([
46
+ (0, type_graphql_1.Resolver)(play_group_1.PlayGroup)
47
+ ], PlayGroupSubscription);
48
+ exports.PlayGroupSubscription = PlayGroupSubscription;
49
+ //# sourceMappingURL=play-group-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play-group-subscription.js","sourceRoot":"","sources":["../../../server/service/play-group/play-group-subscription.ts"],"names":[],"mappings":";;;;AAAA,+CAAgE;AAChE,iEAAkD;AAClD,iDAA8C;AAC9C,6CAAwC;AAGxC,IAAa,qBAAqB,GAAlC,MAAa,qBAAqB;IAiChC,SAAS,CAAS,OAAiC,EAAa,EAAU;QACxE,OAAO,OAAO,CAAC,SAAS,CAAA;IAC1B,CAAC;CACF,CAAA;AAHC;IAhCC,IAAA,2BAAY,EAAC;QACZ,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;;YACpC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;YACtC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAA;YACnB,MAAM,SAAS,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAA;YAEnC,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;aACnC;YAED,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA,EAAE;gBACvD,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,6BAA6B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;aAChF;YAED,OAAO,IAAA,kCAAU,EACf,GAAG,EAAE,CAAC,cAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EACxC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBACpC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAAA;gBAEvD,IAAI,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE;oBAC1B,OAAO,KAAK,CAAA;iBACb;gBAED,IAAI,EAAE,KAAK,WAAW,EAAE;oBACtB,OAAO,KAAK,CAAA;iBACb;gBAED,OAAO,IAAI,CAAA;YACb,CAAC,CACF,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC;IACS,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAAqC,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;;;4CAAc,sBAAS;sDAErF;AAnCU,qBAAqB;IADjC,IAAA,uBAAQ,EAAC,sBAAS,CAAC;GACP,qBAAqB,CAoCjC;AApCY,sDAAqB","sourcesContent":["import { Resolver, Subscription, Root, Arg } from 'type-graphql'\nimport { withFilter } from 'graphql-subscriptions'\nimport { pubsub } from '@things-factory/shell'\nimport { PlayGroup } from './play-group'\n\n@Resolver(PlayGroup)\nexport class PlayGroupSubscription {\n @Subscription({\n subscribe: (_, args, context, info) => {\n const { domain, user } = context.state\n const { id } = args\n const subdomain = domain?.subdomain\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return withFilter(\n () => pubsub.asyncIterator('play-group'),\n (payload, variables, context, info) => {\n const { id: playGroupId, domainId } = payload.playGroup\n\n if (domainId !== domain.id) {\n return false\n }\n\n if (id !== playGroupId) {\n return false\n }\n\n return true\n }\n )(_, args, context, info)\n }\n })\n playGroup(@Root() payload: { playGroup: PlayGroup }, @Arg('id') id: string): PlayGroup {\n return payload.playGroup\n }\n}\n"]}