@things-factory/biz-base 10.1.121 → 10.1.122

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/CHANGELOG.md CHANGED
@@ -6,3 +6,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  <!-- ## [Unreleased] -->
9
+
10
+ ### Fixed
11
+
12
+ - Enforce domain ownership for bizplace mutations and constrain reads to existing permitted and partner scopes.
13
+ - Reject caller-supplied IDs on bulk creation and roll back mixed-domain bulk mutations.
14
+ - Prevent primary-key changes and unauthorized company references in bizplace patches.
@@ -0,0 +1,17 @@
1
+ import { EntityManager } from 'typeorm';
2
+ import { Bizplace } from './bizplace';
3
+ import { BizplacePatch } from './bizplace-types';
4
+ import { Company } from '../company/company';
5
+ export declare function accessDenied(): never;
6
+ export declare function callerDomain(context: ResolverContext): import("@things-factory/shell").Domain;
7
+ /** Explicitly shared reads do not grant permission to mutate another domain. */
8
+ export declare function readableBizplaceIds(context: ResolverContext): Promise<string[]>;
9
+ export declare function ownedBizplace(context: ResolverContext, where: {
10
+ id?: string;
11
+ name?: string;
12
+ }, tx?: EntityManager): Promise<Bizplace>;
13
+ /** Only editable fields reach save; id/domain/audit fields stay server-owned. */
14
+ export declare function editableBizplace(patch: BizplacePatch): {
15
+ [k: string]: string;
16
+ };
17
+ export declare function accessibleCompany(context: ResolverContext, id: string, tx?: EntityManager): Promise<Company>;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accessDenied = accessDenied;
4
+ exports.callerDomain = callerDomain;
5
+ exports.readableBizplaceIds = readableBizplaceIds;
6
+ exports.ownedBizplace = ownedBizplace;
7
+ exports.editableBizplace = editableBizplace;
8
+ exports.accessibleCompany = accessibleCompany;
9
+ const graphql_1 = require("graphql");
10
+ const typeorm_1 = require("typeorm");
11
+ const shell_1 = require("@things-factory/shell");
12
+ const utils_1 = require("../../utils");
13
+ const bizplace_1 = require("./bizplace");
14
+ const company_1 = require("../company/company");
15
+ function accessDenied() {
16
+ throw new graphql_1.GraphQLError('Bizplace not found or access denied.', { extensions: { code: 'FORBIDDEN' } });
17
+ }
18
+ function callerDomain(context) {
19
+ const { domain, user } = context.state;
20
+ if (!domain?.id || !user?.id)
21
+ accessDenied();
22
+ return domain;
23
+ }
24
+ /** Explicitly shared reads do not grant permission to mutate another domain. */
25
+ async function readableBizplaceIds(context) {
26
+ const domain = callerDomain(context);
27
+ const { user } = context.state;
28
+ const permitted = await (0, utils_1.getPermittedBizplaceIds)(domain, user);
29
+ const partners = await (0, utils_1.getPartnersBizplaces)(domain, user);
30
+ const companies = await (0, utils_1.getPartnersCompanyBizplaces)(domain, user, true);
31
+ return [...new Set([...permitted, ...partners.map(b => b?.id), ...companies.map(b => b?.id)].filter(Boolean))];
32
+ }
33
+ async function ownedBizplace(context, where, tx) {
34
+ const domain = callerDomain(context);
35
+ if (!where.id && !where.name)
36
+ accessDenied();
37
+ const row = await (0, shell_1.getRepository)(bizplace_1.Bizplace, tx).findOne({
38
+ where: { ...where, domain: { id: domain.id } },
39
+ relations: ['domain', 'company', 'creator']
40
+ });
41
+ if (!row)
42
+ accessDenied();
43
+ return row;
44
+ }
45
+ /** Only editable fields reach save; id/domain/audit fields stay server-owned. */
46
+ function editableBizplace(patch) {
47
+ const { name, description, address, postalCode, latlng, status } = patch;
48
+ return Object.fromEntries(Object.entries({ name, description, address, postalCode, latlng, status }).filter(([, v]) => v !== undefined));
49
+ }
50
+ async function accessibleCompany(context, id, tx) {
51
+ const domain = callerDomain(context);
52
+ if (!id)
53
+ accessDenied();
54
+ const repo = (0, shell_1.getRepository)(company_1.Company, tx);
55
+ const own = await repo.findOneBy({ id, domain: { id: domain.id } });
56
+ if (own)
57
+ return own;
58
+ // Preserve company links exposed through the existing permitted/shared bizplaces.
59
+ const ids = await readableBizplaceIds(context);
60
+ const linked = await (0, shell_1.getRepository)(bizplace_1.Bizplace, tx).findOne({
61
+ where: { id: (0, typeorm_1.In)(ids), company: { id } },
62
+ relations: ['company']
63
+ });
64
+ if (!linked?.company)
65
+ accessDenied();
66
+ return linked.company;
67
+ }
68
+ //# sourceMappingURL=bizplace-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bizplace-access.js","sourceRoot":"","sources":["../../../server/service/bizplace/bizplace-access.ts"],"names":[],"mappings":"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","sourcesContent":["import { GraphQLError } from 'graphql'\nimport { EntityManager, In } from 'typeorm'\nimport { getRepository } from '@things-factory/shell'\nimport { getPermittedBizplaceIds, getPartnersBizplaces, getPartnersCompanyBizplaces } from '../../utils'\nimport { Bizplace } from './bizplace'\nimport { BizplacePatch } from './bizplace-types'\nimport { Company } from '../company/company'\n\nexport function accessDenied(): never {\n throw new GraphQLError('Bizplace not found or access denied.', { extensions: { code: 'FORBIDDEN' } })\n}\n\nexport function callerDomain(context: ResolverContext) {\n const { domain, user } = context.state\n if (!domain?.id || !user?.id) accessDenied()\n return domain\n}\n\n/** Explicitly shared reads do not grant permission to mutate another domain. */\nexport async function readableBizplaceIds(context: ResolverContext): Promise<string[]> {\n const domain = callerDomain(context)\n const { user } = context.state\n const permitted = await getPermittedBizplaceIds(domain, user)\n const partners = await getPartnersBizplaces(domain, user)\n const companies = await getPartnersCompanyBizplaces(domain, user, true)\n return [...new Set([...permitted, ...partners.map(b => b?.id), ...companies.map(b => b?.id)].filter(Boolean))]\n}\n\nexport async function ownedBizplace(\n context: ResolverContext,\n where: { id?: string; name?: string },\n tx?: EntityManager\n) {\n const domain = callerDomain(context)\n if (!where.id && !where.name) accessDenied()\n const row = await getRepository(Bizplace, tx).findOne({\n where: { ...where, domain: { id: domain.id } },\n relations: ['domain', 'company', 'creator']\n })\n if (!row) accessDenied()\n return row\n}\n\n/** Only editable fields reach save; id/domain/audit fields stay server-owned. */\nexport function editableBizplace(patch: BizplacePatch) {\n const { name, description, address, postalCode, latlng, status } = patch\n return Object.fromEntries(\n Object.entries({ name, description, address, postalCode, latlng, status }).filter(([, v]) => v !== undefined)\n )\n}\n\nexport async function accessibleCompany(context: ResolverContext, id: string, tx?: EntityManager): Promise<Company> {\n const domain = callerDomain(context)\n if (!id) accessDenied()\n const repo = getRepository(Company, tx)\n const own = await repo.findOneBy({ id, domain: { id: domain.id } })\n if (own) return own\n // Preserve company links exposed through the existing permitted/shared bizplaces.\n const ids = await readableBizplaceIds(context)\n const linked = await getRepository(Bizplace, tx).findOne({\n where: { id: In(ids), company: { id } },\n relations: ['company']\n })\n if (!linked?.company) accessDenied()\n return linked.company\n}\n"]}
@@ -5,6 +5,6 @@ export declare class BizplaceMutation {
5
5
  updateBizplace(name: string, patch: BizplacePatch, context: ResolverContext): Promise<Bizplace>;
6
6
  updateMultipleBizplace(patches: BizplacePatch[], context: ResolverContext): Promise<Bizplace[]>;
7
7
  updateBizplaceCheckDomain(name: string, patch: BizplacePatch, context: ResolverContext): Promise<Bizplace>;
8
- deleteBizplace(id: string): Promise<Boolean>;
9
- deleteBizplaces(ids: string[]): Promise<Boolean>;
8
+ deleteBizplace(id: string, context: ResolverContext): Promise<Boolean>;
9
+ deleteBizplaces(ids: string[], context: ResolverContext): Promise<Boolean>;
10
10
  }
@@ -4,97 +4,113 @@ exports.BizplaceMutation = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const shell_1 = require("@things-factory/shell");
7
+ const typeorm_1 = require("typeorm");
7
8
  const utils_1 = require("@things-factory/utils");
8
- const company_1 = require("../company/company");
9
9
  const bizplace_1 = require("./bizplace");
10
10
  const bizplace_types_1 = require("./bizplace-types");
11
+ const bizplace_access_1 = require("./bizplace-access");
11
12
  let BizplaceMutation = class BizplaceMutation {
12
13
  async createBizplace(bizplace, context) {
13
- const { domain, user } = context.state;
14
+ const domain = (0, bizplace_access_1.callerDomain)(context);
15
+ const { user } = context.state;
14
16
  if (bizplace.company && bizplace.company.id) {
15
- bizplace.company = await (0, shell_1.getRepository)(company_1.Company).findOneBy({ id: bizplace.company.id });
17
+ bizplace.company = await (0, bizplace_access_1.accessibleCompany)(context, bizplace.company.id);
16
18
  }
17
19
  return await (0, shell_1.getRepository)(bizplace_1.Bizplace).save({
18
- ...bizplace,
20
+ ...(0, bizplace_access_1.editableBizplace)(bizplace),
21
+ company: bizplace.company,
19
22
  domain,
20
23
  creator: user,
21
24
  updater: user
22
25
  });
23
26
  }
24
27
  async updateBizplace(name, patch, context) {
25
- const { domain, user } = context.state;
26
- const bizplace = await (0, shell_1.getRepository)(bizplace_1.Bizplace).findOneBy({ domain: { id: domain.id }, name });
28
+ (0, bizplace_access_1.callerDomain)(context);
29
+ const { user } = context.state;
30
+ const bizplace = await (0, bizplace_access_1.ownedBizplace)(context, { name });
27
31
  if (patch.company && patch.company.id) {
28
- patch.company = await (0, shell_1.getRepository)(company_1.Company).findOneBy({ id: patch.company.id });
32
+ patch.company = await (0, bizplace_access_1.accessibleCompany)(context, patch.company.id);
29
33
  }
30
34
  return await (0, shell_1.getRepository)(bizplace_1.Bizplace).save({
31
35
  ...bizplace,
32
- ...patch,
36
+ ...(0, bizplace_access_1.editableBizplace)(patch),
37
+ company: patch.company === undefined ? bizplace.company : patch.company,
33
38
  updater: user
34
39
  });
35
40
  }
36
41
  async updateMultipleBizplace(patches, context) {
37
- let results = [];
38
- const _createRecords = patches.filter((patch) => patch.cuFlag.toUpperCase() === '+');
39
- const _updateRecords = patches.filter((patch) => patch.cuFlag.toUpperCase() === 'M');
40
- const bizplaceRepo = (0, shell_1.getRepository)(bizplace_1.Bizplace);
41
- const companyRepo = (0, shell_1.getRepository)(company_1.Company);
42
- if (_createRecords.length > 0) {
43
- for (let i = 0; i < _createRecords.length; i++) {
44
- const newRecord = _createRecords[i];
45
- if (newRecord.company && newRecord.company.id) {
46
- newRecord.company = await companyRepo.findOneBy({ id: newRecord.company.id });
47
- }
48
- const result = await bizplaceRepo.save({
49
- domain: context.state.domain,
50
- creator: context.state.user,
51
- updater: context.state.user,
52
- ...newRecord
53
- });
54
- results.push({ ...result, cuFlag: '+' });
55
- }
56
- }
57
- if (_updateRecords.length > 0) {
58
- for (let i = 0; i < _updateRecords.length; i++) {
59
- const newRecord = _updateRecords[i];
60
- const bizplace = await bizplaceRepo.findOneBy({ id: newRecord.id });
61
- if (newRecord.company && newRecord.company.id) {
62
- newRecord.company = await companyRepo.findOneBy({ id: newRecord.company.id });
63
- }
64
- const result = await bizplaceRepo.save({
65
- ...bizplace,
66
- ...newRecord,
67
- updater: context.state.user
42
+ const domain = (0, bizplace_access_1.callerDomain)(context);
43
+ const { user } = context.state;
44
+ return (0, shell_1.getRepository)(bizplace_1.Bizplace).manager.transaction(async (tx) => {
45
+ const repo = tx.getRepository(bizplace_1.Bizplace);
46
+ const results = [];
47
+ for (const patch of patches) {
48
+ const flag = patch.cuFlag?.toUpperCase();
49
+ if (flag !== '+' && flag !== 'M')
50
+ (0, bizplace_access_1.accessDenied)();
51
+ // save with a caller-supplied primary key can update an existing foreign row.
52
+ if (flag === '+' && patch.id)
53
+ (0, bizplace_access_1.accessDenied)();
54
+ const existing = flag === 'M' ? await (0, bizplace_access_1.ownedBizplace)(context, { id: patch.id }, tx) : undefined;
55
+ const company = patch.company?.id ? await (0, bizplace_access_1.accessibleCompany)(context, patch.company.id, tx) : existing?.company;
56
+ const result = await repo.save({
57
+ ...existing,
58
+ ...(0, bizplace_access_1.editableBizplace)(patch),
59
+ company,
60
+ domain,
61
+ creator: existing?.creator ?? user,
62
+ updater: user
68
63
  });
69
- results.push({ ...result, cuFlag: 'M' });
64
+ results.push({ ...result, cuFlag: flag });
70
65
  }
71
- }
72
- return results;
66
+ return results;
67
+ });
73
68
  }
74
69
  async updateBizplaceCheckDomain(name, patch, context) {
75
- let bizplace = await (0, shell_1.getRepository)(bizplace_1.Bizplace).findOne({ where: { name }, relations: ['domain'] });
76
- let domain = bizplace.domain;
77
- if (domain) {
78
- if (bizplace.name !== patch.name) {
79
- domain = await (0, shell_1.getRepository)(shell_1.Domain).save({
80
- ...domain,
70
+ (0, bizplace_access_1.callerDomain)(context);
71
+ return (0, shell_1.getRepository)(bizplace_1.Bizplace).manager.transaction(async (tx) => {
72
+ const bizplace = await (0, bizplace_access_1.ownedBizplace)(context, { name }, tx);
73
+ const company = patch.company?.id ? await (0, bizplace_access_1.accessibleCompany)(context, patch.company.id, tx) : bizplace.company;
74
+ if (patch.name !== undefined && bizplace.name !== patch.name) {
75
+ await tx.getRepository(shell_1.Domain).save({
76
+ ...bizplace.domain,
81
77
  name: patch.name,
82
78
  subdomain: (0, utils_1.slugger)(patch.name)
83
79
  });
84
80
  }
85
- }
86
- return await (0, shell_1.getRepository)(bizplace_1.Bizplace).save({
87
- ...bizplace,
88
- ...patch,
89
- updater: context.state.user
81
+ return tx.getRepository(bizplace_1.Bizplace).save({
82
+ ...bizplace,
83
+ ...(0, bizplace_access_1.editableBizplace)(patch),
84
+ company,
85
+ updater: context.state.user
86
+ });
90
87
  });
91
88
  }
92
- async deleteBizplace(id) {
93
- await (0, shell_1.getRepository)(bizplace_1.Bizplace).delete(id);
89
+ async deleteBizplace(id, context) {
90
+ const domain = (0, bizplace_access_1.callerDomain)(context);
91
+ if (!id)
92
+ (0, bizplace_access_1.accessDenied)();
93
+ const result = await (0, shell_1.getRepository)(bizplace_1.Bizplace).delete({ id, domain: { id: domain.id } });
94
+ if (!result.affected)
95
+ (0, bizplace_access_1.accessDenied)();
94
96
  return true;
95
97
  }
96
- async deleteBizplaces(ids) {
97
- await (0, shell_1.getRepository)(bizplace_1.Bizplace).delete(ids);
98
+ async deleteBizplaces(ids, context) {
99
+ const domain = (0, bizplace_access_1.callerDomain)(context);
100
+ if (!ids.length)
101
+ return true;
102
+ const uniqueIds = [...new Set(ids)];
103
+ if (uniqueIds.some(id => !id))
104
+ (0, bizplace_access_1.accessDenied)();
105
+ await (0, shell_1.getRepository)(bizplace_1.Bizplace).manager.transaction(async (tx) => {
106
+ const repo = tx.getRepository(bizplace_1.Bizplace);
107
+ const where = { id: (0, typeorm_1.In)(uniqueIds), domain: { id: domain.id } };
108
+ if ((await repo.countBy(where)) !== uniqueIds.length)
109
+ (0, bizplace_access_1.accessDenied)();
110
+ const result = await repo.delete(where);
111
+ if (result.affected !== uniqueIds.length)
112
+ (0, bizplace_access_1.accessDenied)();
113
+ });
98
114
  return true;
99
115
  }
100
116
  };
@@ -141,16 +157,18 @@ tslib_1.__decorate([
141
157
  (0, type_graphql_1.Directive)('@privilege(category: "bizplace", privilege: "mutation")'),
142
158
  (0, type_graphql_1.Mutation)(returns => Boolean),
143
159
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
160
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
144
161
  tslib_1.__metadata("design:type", Function),
145
- tslib_1.__metadata("design:paramtypes", [String]),
162
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
146
163
  tslib_1.__metadata("design:returntype", Promise)
147
164
  ], BizplaceMutation.prototype, "deleteBizplace", null);
148
165
  tslib_1.__decorate([
149
166
  (0, type_graphql_1.Directive)('@privilege(category: "bizplace", privilege: "mutation")'),
150
167
  (0, type_graphql_1.Mutation)(returns => Boolean),
151
168
  tslib_1.__param(0, (0, type_graphql_1.Arg)('ids', type => [String])),
169
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
152
170
  tslib_1.__metadata("design:type", Function),
153
- tslib_1.__metadata("design:paramtypes", [Array]),
171
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
154
172
  tslib_1.__metadata("design:returntype", Promise)
155
173
  ], BizplaceMutation.prototype, "deleteBizplaces", null);
156
174
  exports.BizplaceMutation = BizplaceMutation = tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"bizplace-mutation.js","sourceRoot":"","sources":["../../../server/service/bizplace/bizplace-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\n\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { slugger } from '@things-factory/utils'\n\nimport { Company } from '../company/company'\nimport { Bizplace } from './bizplace'\nimport { BizplacePatch, NewBizplace } from './bizplace-types'\n\n@Resolver(Bizplace)\nexport class BizplaceMutation {\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Bizplace)\n async createBizplace(@Arg('bizplace') bizplace: NewBizplace, @Ctx() context: ResolverContext): Promise<Bizplace> {\n const { domain, user } = context.state\n if (bizplace.company && bizplace.company.id) {\n bizplace.company = await getRepository(Company).findOneBy({ id: bizplace.company.id })\n }\n\n return await getRepository(Bizplace).save({\n ...bizplace,\n domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Bizplace)\n async updateBizplace(\n @Arg('name') name: string,\n @Arg('patch') patch: BizplacePatch,\n @Ctx() context: ResolverContext\n ): Promise<Bizplace> {\n const { domain, user } = context.state\n const bizplace = await getRepository(Bizplace).findOneBy({ domain: { id: domain.id }, name })\n\n if (patch.company && patch.company.id) {\n patch.company = await getRepository(Company).findOneBy({ id: patch.company.id })\n }\n\n return await getRepository(Bizplace).save({\n ...bizplace,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => [Bizplace])\n async updateMultipleBizplace(\n @Arg('patches', type => [BizplacePatch]) patches: BizplacePatch[],\n @Ctx() context: ResolverContext\n ): Promise<Bizplace[]> {\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const bizplaceRepo = getRepository(Bizplace)\n const companyRepo = getRepository(Company)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n if (newRecord.company && newRecord.company.id) {\n newRecord.company = await companyRepo.findOneBy({ id: newRecord.company.id })\n }\n\n const result = await bizplaceRepo.save({\n domain: context.state.domain,\n creator: context.state.user,\n updater: context.state.user,\n ...newRecord\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const bizplace = await bizplaceRepo.findOneBy({ id: newRecord.id })\n\n if (newRecord.company && newRecord.company.id) {\n newRecord.company = await companyRepo.findOneBy({ id: newRecord.company.id })\n }\n\n const result = await bizplaceRepo.save({\n ...bizplace,\n ...newRecord,\n updater: context.state.user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Bizplace)\n async updateBizplaceCheckDomain(\n @Arg('name') name: string,\n @Arg('patch') patch: BizplacePatch,\n @Ctx() context: ResolverContext\n ): Promise<Bizplace> {\n let bizplace: Bizplace = await getRepository(Bizplace).findOne({ where: { name }, relations: ['domain'] })\n let domain: Domain = bizplace.domain\n\n if (domain) {\n if (bizplace.name !== patch.name) {\n domain = await getRepository(Domain).save({\n ...domain,\n name: patch.name,\n subdomain: slugger(patch.name)\n })\n }\n }\n\n return await getRepository(Bizplace).save({\n ...bizplace,\n ...patch,\n updater: context.state.user\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Boolean)\n async deleteBizplace(@Arg('id') id: string): Promise<Boolean> {\n await getRepository(Bizplace).delete(id)\n\n return true\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Boolean)\n async deleteBizplaces(@Arg('ids', type => [String]) ids: string[]): Promise<Boolean> {\n await getRepository(Bizplace).delete(ids)\n\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"bizplace-mutation.js","sourceRoot":"","sources":["../../../server/service/bizplace/bizplace-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\n\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { In } from 'typeorm'\nimport { slugger } from '@things-factory/utils'\n\nimport { Bizplace } from './bizplace'\nimport { BizplacePatch, NewBizplace } from './bizplace-types'\nimport { accessibleCompany, accessDenied, callerDomain, editableBizplace, ownedBizplace } from './bizplace-access'\n\n@Resolver(Bizplace)\nexport class BizplaceMutation {\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Bizplace)\n async createBizplace(@Arg('bizplace') bizplace: NewBizplace, @Ctx() context: ResolverContext): Promise<Bizplace> {\n const domain = callerDomain(context)\n const { user } = context.state\n if (bizplace.company && bizplace.company.id) {\n bizplace.company = await accessibleCompany(context, bizplace.company.id)\n }\n\n return await getRepository(Bizplace).save({\n ...editableBizplace(bizplace),\n company: bizplace.company,\n domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Bizplace)\n async updateBizplace(\n @Arg('name') name: string,\n @Arg('patch') patch: BizplacePatch,\n @Ctx() context: ResolverContext\n ): Promise<Bizplace> {\n callerDomain(context)\n const { user } = context.state\n const bizplace = await ownedBizplace(context, { name })\n\n if (patch.company && patch.company.id) {\n patch.company = await accessibleCompany(context, patch.company.id)\n }\n\n return await getRepository(Bizplace).save({\n ...bizplace,\n ...editableBizplace(patch),\n company: patch.company === undefined ? bizplace.company : patch.company,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => [Bizplace])\n async updateMultipleBizplace(\n @Arg('patches', type => [BizplacePatch]) patches: BizplacePatch[],\n @Ctx() context: ResolverContext\n ): Promise<Bizplace[]> {\n const domain = callerDomain(context)\n const { user } = context.state\n return getRepository(Bizplace).manager.transaction(async tx => {\n const repo = tx.getRepository(Bizplace)\n const results: Bizplace[] = []\n for (const patch of patches) {\n const flag = patch.cuFlag?.toUpperCase()\n if (flag !== '+' && flag !== 'M') accessDenied()\n // save with a caller-supplied primary key can update an existing foreign row.\n if (flag === '+' && patch.id) accessDenied()\n const existing = flag === 'M' ? await ownedBizplace(context, { id: patch.id }, tx) : undefined\n const company = patch.company?.id ? await accessibleCompany(context, patch.company.id, tx) : existing?.company\n const result = await repo.save({\n ...existing,\n ...editableBizplace(patch),\n company,\n domain,\n creator: existing?.creator ?? user,\n updater: user\n })\n results.push({ ...result, cuFlag: flag } as Bizplace)\n }\n return results\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Bizplace)\n async updateBizplaceCheckDomain(\n @Arg('name') name: string,\n @Arg('patch') patch: BizplacePatch,\n @Ctx() context: ResolverContext\n ): Promise<Bizplace> {\n callerDomain(context)\n return getRepository(Bizplace).manager.transaction(async tx => {\n const bizplace = await ownedBizplace(context, { name }, tx)\n const company = patch.company?.id ? await accessibleCompany(context, patch.company.id, tx) : bizplace.company\n if (patch.name !== undefined && bizplace.name !== patch.name) {\n await tx.getRepository(Domain).save({\n ...bizplace.domain,\n name: patch.name,\n subdomain: slugger(patch.name)\n })\n }\n return tx.getRepository(Bizplace).save({\n ...bizplace,\n ...editableBizplace(patch),\n company,\n updater: context.state.user\n })\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Boolean)\n async deleteBizplace(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const domain = callerDomain(context)\n if (!id) accessDenied()\n const result = await getRepository(Bizplace).delete({ id, domain: { id: domain.id } })\n if (!result.affected) accessDenied()\n\n return true\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"mutation\")')\n @Mutation(returns => Boolean)\n async deleteBizplaces(\n @Arg('ids', type => [String]) ids: string[],\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const domain = callerDomain(context)\n if (!ids.length) return true\n const uniqueIds = [...new Set(ids)]\n if (uniqueIds.some(id => !id)) accessDenied()\n await getRepository(Bizplace).manager.transaction(async tx => {\n const repo = tx.getRepository(Bizplace)\n const where = { id: In(uniqueIds), domain: { id: domain.id } }\n if ((await repo.countBy(where)) !== uniqueIds.length) accessDenied()\n const result = await repo.delete(where)\n if (result.affected !== uniqueIds.length) accessDenied()\n })\n\n return true\n }\n}\n"]}
@@ -8,7 +8,7 @@ export declare class BizplaceQuery {
8
8
  businessBizplace(context: ResolverContext): Promise<Bizplace>;
9
9
  userBizplaces(email: string, context: ResolverContext): Promise<Bizplace[]>;
10
10
  bizplaces(params: ListParam, context: ResolverContext): Promise<BizplaceList>;
11
- bizplace(id: string): Promise<Bizplace>;
11
+ bizplace(id: string, context: ResolverContext): Promise<Bizplace>;
12
12
  bizplaceUsers(params: ListParam, context: ResolverContext): Promise<UserList>;
13
13
  partnersBizplaces(params: ListParam, context: ResolverContext): Promise<BizplaceList>;
14
14
  permittedPartnersCompanyBizplaces(params: ListParam, context: ResolverContext): Promise<BizplaceList>;
@@ -10,6 +10,7 @@ const shell_1 = require("@things-factory/shell");
10
10
  const utils_1 = require("../../utils");
11
11
  const bizplace_1 = require("./bizplace");
12
12
  const bizplace_types_1 = require("./bizplace-types");
13
+ const bizplace_access_1 = require("./bizplace-access");
13
14
  let BizplaceQuery = class BizplaceQuery {
14
15
  async customerBizplaces(context) {
15
16
  const { domain, user } = context.state;
@@ -35,7 +36,8 @@ let BizplaceQuery = class BizplaceQuery {
35
36
  const user = await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({
36
37
  email: email != '' ? email : context.state.user.email
37
38
  });
38
- return await (0, utils_1.getUserBizplaces)(user);
39
+ const allowed = new Set(await (0, bizplace_access_1.readableBizplaceIds)(context));
40
+ return (await (0, utils_1.getUserBizplaces)(user)).filter(b => b && allowed.has(b.id));
39
41
  // const bizplaces = await getRepository(Bizplace).find({ domain })
40
42
  // // const userBizplaces = user.bizplaces
41
43
  // return bizplaces.map((bizplace: Bizplace) => {
@@ -70,8 +72,10 @@ let BizplaceQuery = class BizplaceQuery {
70
72
  else {
71
73
  if (!(bizplace_ids.length > 0))
72
74
  convertedParams.where.id = (0, typeorm_1.In)(await (0, utils_1.getPermittedBizplaceIds)(context.state.domain, context.state.user));
73
- else
74
- convertedParams.where.id = (0, typeorm_1.In)(bizplace_ids);
75
+ else {
76
+ const permitted = new Set(await (0, utils_1.getPermittedBizplaceIds)(context.state.domain, context.state.user));
77
+ convertedParams.where.id = (0, typeorm_1.In)(bizplace_ids.filter(id => permitted.has(id)));
78
+ }
75
79
  }
76
80
  const [items, total] = await (0, shell_1.getRepository)(bizplace_1.Bizplace).findAndCount({
77
81
  ...convertedParams,
@@ -79,7 +83,9 @@ let BizplaceQuery = class BizplaceQuery {
79
83
  });
80
84
  return { items, total };
81
85
  }
82
- async bizplace(id) {
86
+ async bizplace(id, context) {
87
+ if (!(await (0, bizplace_access_1.readableBizplaceIds)(context)).includes(id))
88
+ (0, bizplace_access_1.accessDenied)();
83
89
  return await (0, shell_1.getRepository)(bizplace_1.Bizplace).findOne({
84
90
  where: { id },
85
91
  relations: ['company', 'domain', 'users', 'users.roles', 'creator', 'updater']
@@ -104,25 +110,13 @@ let BizplaceQuery = class BizplaceQuery {
104
110
  });
105
111
  params.filters.splice(bizplaceIndex, 1);
106
112
  }
107
- if (!(partnersBizplaceIds.length > 0)) {
108
- const partnersBizplaces = await (0, utils_1.getPartnersBizplaces)(context.state.domain, context.state.user);
109
- partnersBizplaceIds = partnersBizplaces.map((bizplace) => bizplace.id || null);
110
- params.filters.push({
111
- name: 'id',
112
- operator: 'in',
113
- value: partnersBizplaceIds
114
- });
115
- }
116
- else {
117
- params.filters.push({
118
- name: 'id',
119
- operator: 'in',
120
- value: partnersBizplaceIds
121
- });
122
- }
123
- const convertedParams = (0, shell_1.convertListParams)(params, {
124
- searchables: ['name', 'description']
125
- });
113
+ const allowed = new Set((await (0, utils_1.getPartnersBizplaces)(context.state.domain, context.state.user)).filter(Boolean).map(b => b.id));
114
+ if (partnersBizplaceIds.length)
115
+ partnersBizplaceIds = partnersBizplaceIds.filter(id => allowed.has(id));
116
+ else
117
+ partnersBizplaceIds = [...allowed];
118
+ const convertedParams = (0, shell_1.convertListParams)(params, { searchables: ['name', 'description'] });
119
+ convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds);
126
120
  const [items, total] = await (0, shell_1.getRepository)(bizplace_1.Bizplace).findAndCount({
127
121
  ...convertedParams,
128
122
  relations: ['domain', 'company', 'users', 'creator', 'updater']
@@ -147,7 +141,10 @@ let BizplaceQuery = class BizplaceQuery {
147
141
  convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds);
148
142
  }
149
143
  else {
150
- convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds);
144
+ const allowed = new Set((await (0, utils_1.getPartnersCompanyBizplaces)(context.state.domain, context.state.user, true))
145
+ .filter(Boolean)
146
+ .map(b => b.id));
147
+ convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds.filter(id => allowed.has(id)));
151
148
  }
152
149
  const [items, total] = await (0, shell_1.getRepository)(bizplace_1.Bizplace).findAndCount({
153
150
  ...convertedParams,
@@ -195,8 +192,9 @@ tslib_1.__decorate([
195
192
  (0, type_graphql_1.Directive)('@privilege(category: "bizplace", privilege: "query", domainOwnerGranted: true)'),
196
193
  (0, type_graphql_1.Query)(returns => bizplace_1.Bizplace),
197
194
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
195
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
198
196
  tslib_1.__metadata("design:type", Function),
199
- tslib_1.__metadata("design:paramtypes", [String]),
197
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
200
198
  tslib_1.__metadata("design:returntype", Promise)
201
199
  ], BizplaceQuery.prototype, "bizplace", null);
202
200
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"bizplace-query.js","sourceRoot":"","sources":["../../../server/service/bizplace/bizplace-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, Query, Resolver } from 'type-graphql'\nimport { EntityManager, FindManyOptions, In, Not, Repository } from 'typeorm'\n\nimport { User, UserList } from '@things-factory/auth-base'\nimport { convertListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport {\n getMyBizplace,\n getPartnerBizplaceIds,\n getPartnersBizplaces,\n getPartnersCompanyBizplaces,\n getPermittedBizplaceIds,\n getUserBizplaces\n} from '../../utils'\nimport { Bizplace } from './bizplace'\nimport { BizplaceList } from './bizplace-types'\n\n@Resolver(Bizplace)\nexport class BizplaceQuery {\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\")')\n @Query(returns => [Bizplace])\n async customerBizplaces(@Ctx() context: ResolverContext): Promise<Bizplace[]> {\n const { domain, user } = context.state\n return await getRepository(Bizplace).find({\n where: {\n domain: { id: domain.id },\n id: Not(In([await getMyBizplace(domain, user)]))\n },\n relations: ['domain', 'creator', 'updater']\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Bizplace)\n async businessBizplace(@Ctx() context: ResolverContext): Promise<Bizplace> {\n const { domain, user } = context.state\n const myBizplace = await getMyBizplace(domain, user)\n return await getRepository(Bizplace).findOne({\n where: { id: myBizplace.id },\n relations: ['company', 'domain', 'users', 'creator', 'updater']\n })\n }\n\n /* TODO make it work */\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => [Bizplace])\n async userBizplaces(@Arg('email') email: string, @Ctx() context: ResolverContext): Promise<Bizplace[]> {\n const { domain } = context.state\n\n const user: User = await getRepository(User).findOneBy({\n email: email != '' ? email : context.state.user.email\n })\n\n return await getUserBizplaces(user)\n\n // const bizplaces = await getRepository(Bizplace).find({ domain })\n // // const userBizplaces = user.bizplaces\n // return bizplaces.map((bizplace: Bizplace) => {\n // return {\n // id: bizplace.id,\n // name: bizplace.name,\n // description: bizplace.description,\n // userBizplaceId: userBizplaces\n // .map(userBiz => userBiz.bizplace.id)\n // .slice(0, 1)\n // .shift(),\n // assigned: userBizplaces.filter((userBizplace: Bizplace) => userBizplace.id === bizplace.id).length > 0\n // }\n // })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => BizplaceList)\n async bizplaces(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<BizplaceList> {\n let bizplace_ids = []\n let bizplaceIndex: any = params.filters.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex > -1) {\n bizplace_ids = params.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n params.filters.splice(bizplaceIndex, 1)\n }\n\n const convertedParams = convertListParams(params)\n\n let domainIndex: any = params.filters.findIndex(x => x.name === 'domain')\n if (domainIndex > -1) {\n convertedParams.where.id = In(await getPartnerBizplaceIds(context.state.domain, context.state.user))\n } else {\n if (!(bizplace_ids.length > 0))\n convertedParams.where.id = In(await getPermittedBizplaceIds(context.state.domain, context.state.user))\n else convertedParams.where.id = In(bizplace_ids)\n }\n\n const [items, total] = await getRepository(Bizplace).findAndCount({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Bizplace)\n async bizplace(@Arg('id') id: string): Promise<Bizplace> {\n return await getRepository(Bizplace).findOne({\n where: { id },\n relations: ['company', 'domain', 'users', 'users.roles', 'creator', 'updater']\n })\n }\n\n @Query(returns => UserList)\n async bizplaceUsers(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<UserList> {\n const { domain, user } = context.state\n const myBizplace: Bizplace = await getMyBizplace(domain, user)\n return await bizplaceUsers(myBizplace, {\n ...(await convertListParams(params)),\n relations: ['domain', 'domains', 'roles', 'roles.privileges', 'roles.users']\n })\n }\n\n @Query(returns => BizplaceList)\n async partnersBizplaces(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<BizplaceList> {\n let partnersBizplaceIds = []\n let bizplaceIndex: any = params.filters.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex > -1) {\n partnersBizplaceIds = params.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n params.filters.splice(bizplaceIndex, 1)\n }\n\n if (!(partnersBizplaceIds.length > 0)) {\n const partnersBizplaces: Bizplace[] = await getPartnersBizplaces(context.state.domain, context.state.user)\n partnersBizplaceIds = partnersBizplaces.map((bizplace: Bizplace) => bizplace.id || null)\n params.filters.push({\n name: 'id',\n operator: 'in',\n value: partnersBizplaceIds\n })\n } else {\n params.filters.push({\n name: 'id',\n operator: 'in',\n value: partnersBizplaceIds\n })\n }\n\n const convertedParams = convertListParams(params, {\n searchables: ['name', 'description']\n })\n\n const [items, total] = await getRepository(Bizplace).findAndCount({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })\n\n return { items, total }\n }\n\n @Query(returns => BizplaceList)\n async permittedPartnersCompanyBizplaces(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<BizplaceList> {\n let partnersBizplaceIds = []\n let bizplaceIndex: any = params.filters.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex > -1) {\n partnersBizplaceIds = params.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n params.filters.splice(bizplaceIndex, 1)\n }\n\n const convertedParams = convertListParams(params)\n\n if (!(partnersBizplaceIds.length > 0)) {\n const partnersBizplaces: Bizplace[] = await getPartnersCompanyBizplaces(\n context.state.domain,\n context.state.user,\n true\n )\n partnersBizplaceIds = partnersBizplaces.map((bizplace: Bizplace) => bizplace.id || null)\n convertedParams.where.id = In(partnersBizplaceIds)\n } else {\n convertedParams.where.id = In(partnersBizplaceIds)\n }\n\n const [items, total] = await getRepository(Bizplace).findAndCount({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })\n\n return { items, total }\n }\n}\n\nexport async function bizplaceUsers(\n bizplace: Bizplace,\n params: FindManyOptions<User>,\n trxMgr?: EntityManager\n): Promise<{ items: User[]; total: number }> {\n const bizplaceRepo: Repository<Bizplace> = trxMgr?.getRepository(Bizplace) || getRepository(Bizplace)\n const userRepo: Repository<User> = trxMgr?.getRepository(User) || getRepository(User)\n\n if (!bizplace?.users?.length) {\n bizplace = await bizplaceRepo.findOne({\n where: { id: bizplace.id },\n relations: ['users']\n })\n }\n const users: User[] = bizplace.users\n const userIds: string[] = users.map((user: User) => user.id)\n\n const [items, total] = await userRepo.findAndCount({\n ...params,\n where: {\n ...(params.where as any),\n id: In(userIds)\n }\n })\n\n return {\n items,\n total\n }\n}\n"]}
1
+ {"version":3,"file":"bizplace-query.js","sourceRoot":"","sources":["../../../server/service/bizplace/bizplace-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, Directive, Query, Resolver } from 'type-graphql'\nimport { EntityManager, FindManyOptions, In, Not, Repository } from 'typeorm'\n\nimport { User, UserList } from '@things-factory/auth-base'\nimport { convertListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport {\n getMyBizplace,\n getPartnerBizplaceIds,\n getPartnersBizplaces,\n getPartnersCompanyBizplaces,\n getPermittedBizplaceIds,\n getUserBizplaces\n} from '../../utils'\nimport { Bizplace } from './bizplace'\nimport { BizplaceList } from './bizplace-types'\nimport { accessDenied, readableBizplaceIds } from './bizplace-access'\n\n@Resolver(Bizplace)\nexport class BizplaceQuery {\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\")')\n @Query(returns => [Bizplace])\n async customerBizplaces(@Ctx() context: ResolverContext): Promise<Bizplace[]> {\n const { domain, user } = context.state\n return await getRepository(Bizplace).find({\n where: {\n domain: { id: domain.id },\n id: Not(In([await getMyBizplace(domain, user)]))\n },\n relations: ['domain', 'creator', 'updater']\n })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Bizplace)\n async businessBizplace(@Ctx() context: ResolverContext): Promise<Bizplace> {\n const { domain, user } = context.state\n const myBizplace = await getMyBizplace(domain, user)\n return await getRepository(Bizplace).findOne({\n where: { id: myBizplace.id },\n relations: ['company', 'domain', 'users', 'creator', 'updater']\n })\n }\n\n /* TODO make it work */\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => [Bizplace])\n async userBizplaces(@Arg('email') email: string, @Ctx() context: ResolverContext): Promise<Bizplace[]> {\n const { domain } = context.state\n\n const user: User = await getRepository(User).findOneBy({\n email: email != '' ? email : context.state.user.email\n })\n\n const allowed = new Set(await readableBizplaceIds(context))\n return (await getUserBizplaces(user)).filter(b => b && allowed.has(b.id))\n\n // const bizplaces = await getRepository(Bizplace).find({ domain })\n // // const userBizplaces = user.bizplaces\n // return bizplaces.map((bizplace: Bizplace) => {\n // return {\n // id: bizplace.id,\n // name: bizplace.name,\n // description: bizplace.description,\n // userBizplaceId: userBizplaces\n // .map(userBiz => userBiz.bizplace.id)\n // .slice(0, 1)\n // .shift(),\n // assigned: userBizplaces.filter((userBizplace: Bizplace) => userBizplace.id === bizplace.id).length > 0\n // }\n // })\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => BizplaceList)\n async bizplaces(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<BizplaceList> {\n let bizplace_ids = []\n let bizplaceIndex: any = params.filters.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex > -1) {\n bizplace_ids = params.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n params.filters.splice(bizplaceIndex, 1)\n }\n\n const convertedParams = convertListParams(params)\n\n let domainIndex: any = params.filters.findIndex(x => x.name === 'domain')\n if (domainIndex > -1) {\n convertedParams.where.id = In(await getPartnerBizplaceIds(context.state.domain, context.state.user))\n } else {\n if (!(bizplace_ids.length > 0))\n convertedParams.where.id = In(await getPermittedBizplaceIds(context.state.domain, context.state.user))\n else {\n const permitted = new Set(await getPermittedBizplaceIds(context.state.domain, context.state.user))\n convertedParams.where.id = In(bizplace_ids.filter(id => permitted.has(id)))\n }\n }\n\n const [items, total] = await getRepository(Bizplace).findAndCount({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })\n\n return { items, total }\n }\n\n @Directive('@privilege(category: \"bizplace\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Bizplace)\n async bizplace(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Bizplace> {\n if (!(await readableBizplaceIds(context)).includes(id)) accessDenied()\n return await getRepository(Bizplace).findOne({\n where: { id },\n relations: ['company', 'domain', 'users', 'users.roles', 'creator', 'updater']\n })\n }\n\n @Query(returns => UserList)\n async bizplaceUsers(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<UserList> {\n const { domain, user } = context.state\n const myBizplace: Bizplace = await getMyBizplace(domain, user)\n return await bizplaceUsers(myBizplace, {\n ...(await convertListParams(params)),\n relations: ['domain', 'domains', 'roles', 'roles.privileges', 'roles.users']\n })\n }\n\n @Query(returns => BizplaceList)\n async partnersBizplaces(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<BizplaceList> {\n let partnersBizplaceIds = []\n let bizplaceIndex: any = params.filters.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex > -1) {\n partnersBizplaceIds = params.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n params.filters.splice(bizplaceIndex, 1)\n }\n\n const allowed = new Set(\n (await getPartnersBizplaces(context.state.domain, context.state.user)).filter(Boolean).map(b => b.id)\n )\n if (partnersBizplaceIds.length) partnersBizplaceIds = partnersBizplaceIds.filter(id => allowed.has(id))\n else partnersBizplaceIds = [...allowed]\n const convertedParams = convertListParams(params, { searchables: ['name', 'description'] })\n convertedParams.where.id = In(partnersBizplaceIds)\n\n const [items, total] = await getRepository(Bizplace).findAndCount({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })\n\n return { items, total }\n }\n\n @Query(returns => BizplaceList)\n async permittedPartnersCompanyBizplaces(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<BizplaceList> {\n let partnersBizplaceIds = []\n let bizplaceIndex: any = params.filters.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex > -1) {\n partnersBizplaceIds = params.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n params.filters.splice(bizplaceIndex, 1)\n }\n\n const convertedParams = convertListParams(params)\n\n if (!(partnersBizplaceIds.length > 0)) {\n const partnersBizplaces: Bizplace[] = await getPartnersCompanyBizplaces(\n context.state.domain,\n context.state.user,\n true\n )\n partnersBizplaceIds = partnersBizplaces.map((bizplace: Bizplace) => bizplace.id || null)\n convertedParams.where.id = In(partnersBizplaceIds)\n } else {\n const allowed = new Set(\n (await getPartnersCompanyBizplaces(context.state.domain, context.state.user, true))\n .filter(Boolean)\n .map(b => b.id)\n )\n convertedParams.where.id = In(partnersBizplaceIds.filter(id => allowed.has(id)))\n }\n\n const [items, total] = await getRepository(Bizplace).findAndCount({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })\n\n return { items, total }\n }\n}\n\nexport async function bizplaceUsers(\n bizplace: Bizplace,\n params: FindManyOptions<User>,\n trxMgr?: EntityManager\n): Promise<{ items: User[]; total: number }> {\n const bizplaceRepo: Repository<Bizplace> = trxMgr?.getRepository(Bizplace) || getRepository(Bizplace)\n const userRepo: Repository<User> = trxMgr?.getRepository(User) || getRepository(User)\n\n if (!bizplace?.users?.length) {\n bizplace = await bizplaceRepo.findOne({\n where: { id: bizplace.id },\n relations: ['users']\n })\n }\n const users: User[] = bizplace.users\n const userIds: string[] = users.map((user: User) => user.id)\n\n const [items, total] = await userRepo.findAndCount({\n ...params,\n where: {\n ...(params.where as any),\n id: In(userIds)\n }\n })\n\n return {\n items,\n total\n }\n}\n"]}