@things-factory/contact 10.1.123 → 10.1.134
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/components/contact-popup.d.ts +2 -0
- package/dist-client/components/contact-popup.js +35 -3
- package/dist-client/components/contact-popup.js.map +1 -1
- package/dist-client/components/contact-selector.js +11 -7
- package/dist-client/components/contact-selector.js.map +1 -1
- package/dist-client/pages/contact-importer.d.ts +1 -0
- package/dist-client/pages/contact-importer.js +35 -1
- package/dist-client/pages/contact-importer.js.map +1 -1
- package/dist-client/pages/contact-list-page.js +18 -14
- package/dist-client/pages/contact-list-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/contact/contact-counterparty.d.ts +12 -0
- package/dist-server/service/contact/contact-counterparty.js +27 -0
- package/dist-server/service/contact/contact-counterparty.js.map +1 -0
- package/dist-server/service/contact/contact-item.js +8 -8
- package/dist-server/service/contact/contact-item.js.map +1 -1
- package/dist-server/service/contact/contact-mutation.js +8 -5
- package/dist-server/service/contact/contact-mutation.js.map +1 -1
- package/dist-server/service/contact/contact-query.d.ts +2 -0
- package/dist-server/service/contact/contact-query.js +19 -1
- package/dist-server/service/contact/contact-query.js.map +1 -1
- package/dist-server/service/contact/contact-type.d.ts +3 -2
- package/dist-server/service/contact/contact-type.js +29 -28
- package/dist-server/service/contact/contact-type.js.map +1 -1
- package/dist-server/service/contact/contact.d.ts +3 -2
- package/dist-server/service/contact/contact.js +22 -17
- package/dist-server/service/contact/contact.js.map +1 -1
- package/dist-server/service/contact/index.d.ts +1 -1
- package/dist-server/service/contact/profile.js +11 -11
- package/dist-server/service/contact/profile.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -2
- package/translations/en.json +4 -2
- package/translations/ja.json +4 -2
- package/translations/ko.json +4 -2
- package/translations/ms.json +4 -2
- package/translations/zh.json +4 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm';
|
|
2
|
+
import { Counterparty } from '@things-factory/biz-base';
|
|
3
|
+
import { Domain, ObjectRef } from '@things-factory/shell';
|
|
4
|
+
/**
|
|
5
|
+
* The counterparty a contact is given: left out, it stays as it is (undefined); null clears it; an id must name a
|
|
6
|
+
* live counterparty of the contact's own domain - one of another domain is refused, never linked.
|
|
7
|
+
*/
|
|
8
|
+
export declare function counterpartyFor(tx: EntityManager, domain: Domain, ref: ObjectRef | null | undefined): Promise<Counterparty | null | undefined>;
|
|
9
|
+
/** Contact values as they are saved: the counterparty resolved in the domain, or left out when it was not given. */
|
|
10
|
+
export declare function withCounterparty<T extends {
|
|
11
|
+
counterparty?: ObjectRef | null;
|
|
12
|
+
}>(tx: EntityManager, domain: Domain, values: T): Promise<Omit<T, "counterparty">>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.counterpartyFor = counterpartyFor;
|
|
4
|
+
exports.withCounterparty = withCounterparty;
|
|
5
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
6
|
+
const shell_1 = require("@things-factory/shell");
|
|
7
|
+
/**
|
|
8
|
+
* The counterparty a contact is given: left out, it stays as it is (undefined); null clears it; an id must name a
|
|
9
|
+
* live counterparty of the contact's own domain - one of another domain is refused, never linked.
|
|
10
|
+
*/
|
|
11
|
+
async function counterpartyFor(tx, domain, ref) {
|
|
12
|
+
if (ref === undefined)
|
|
13
|
+
return undefined;
|
|
14
|
+
if (ref === null)
|
|
15
|
+
return null;
|
|
16
|
+
const counterparty = await tx.getRepository(biz_base_1.Counterparty).findOne({ where: { id: ref.id, domain: { id: domain.id } } });
|
|
17
|
+
if (!counterparty)
|
|
18
|
+
throw new shell_1.Refusal('contact-counterparty-not-found', { counterpartyId: ref.id }, `counterparty '${ref.id}' is not a counterparty of this domain`);
|
|
19
|
+
return counterparty;
|
|
20
|
+
}
|
|
21
|
+
/** Contact values as they are saved: the counterparty resolved in the domain, or left out when it was not given. */
|
|
22
|
+
async function withCounterparty(tx, domain, values) {
|
|
23
|
+
const { counterparty, ...rest } = values;
|
|
24
|
+
const resolved = await counterpartyFor(tx, domain, counterparty);
|
|
25
|
+
return resolved === undefined ? rest : { ...rest, counterparty: resolved };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=contact-counterparty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-counterparty.js","sourceRoot":"","sources":["../../../server/service/contact/contact-counterparty.ts"],"names":[],"mappings":";;AASA,0CAMC;AAGD,4CAIC;AApBD,uDAAuD;AACvD,iDAAkE;AAElE;;;GAGG;AACI,KAAK,UAAU,eAAe,CAAC,EAAiB,EAAE,MAAc,EAAE,GAAiC;IACxG,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACvC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC7B,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,uBAAY,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAS,EAAE,CAAC,CAAA;IAC9H,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,eAAO,CAAC,gCAAgC,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,iBAAiB,GAAG,CAAC,EAAE,wCAAwC,CAAC,CAAA;IACnK,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,oHAAoH;AAC7G,KAAK,UAAU,gBAAgB,CAAgD,EAAiB,EAAE,MAAc,EAAE,MAAS;IAChI,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;IACxC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;IAChE,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAA;AAC5E,CAAC","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { Counterparty } from '@things-factory/biz-base'\nimport { Domain, ObjectRef, Refusal } from '@things-factory/shell'\n\n/**\n * The counterparty a contact is given: left out, it stays as it is (undefined); null clears it; an id must name a\n * live counterparty of the contact's own domain - one of another domain is refused, never linked.\n */\nexport async function counterpartyFor(tx: EntityManager, domain: Domain, ref: ObjectRef | null | undefined): Promise<Counterparty | null | undefined> {\n if (ref === undefined) return undefined\n if (ref === null) return null\n const counterparty = await tx.getRepository(Counterparty).findOne({ where: { id: ref.id, domain: { id: domain.id } } as any })\n if (!counterparty) throw new Refusal('contact-counterparty-not-found', { counterpartyId: ref.id }, `counterparty '${ref.id}' is not a counterparty of this domain`)\n return counterparty\n}\n\n/** Contact values as they are saved: the counterparty resolved in the domain, or left out when it was not given. */\nexport async function withCounterparty<T extends { counterparty?: ObjectRef | null }>(tx: EntityManager, domain: Domain, values: T) {\n const { counterparty, ...rest } = values\n const resolved = await counterpartyFor(tx, domain, counterparty)\n return resolved === undefined ? rest : { ...rest, counterparty: resolved }\n}\n"]}
|
|
@@ -8,36 +8,36 @@ let ContactItem = class ContactItem {
|
|
|
8
8
|
};
|
|
9
9
|
exports.ContactItem = ContactItem;
|
|
10
10
|
tslib_1.__decorate([
|
|
11
|
-
(0, type_graphql_1.Field)(),
|
|
11
|
+
(0, type_graphql_1.Field)({ description: 'Where it is used - work, home, mobile or other' }),
|
|
12
12
|
tslib_1.__metadata("design:type", String)
|
|
13
13
|
], ContactItem.prototype, "label", void 0);
|
|
14
14
|
tslib_1.__decorate([
|
|
15
|
-
(0, type_graphql_1.Field)(),
|
|
15
|
+
(0, type_graphql_1.Field)({ description: 'What it is - phone, email, address and the like' }),
|
|
16
16
|
tslib_1.__metadata("design:type", String)
|
|
17
17
|
], ContactItem.prototype, "type", void 0);
|
|
18
18
|
tslib_1.__decorate([
|
|
19
|
-
(0, type_graphql_1.Field)(),
|
|
19
|
+
(0, type_graphql_1.Field)({ description: 'The number, address or text itself' }),
|
|
20
20
|
tslib_1.__metadata("design:type", String)
|
|
21
21
|
], ContactItem.prototype, "value", void 0);
|
|
22
22
|
exports.ContactItem = ContactItem = tslib_1.__decorate([
|
|
23
|
-
(0, type_graphql_1.ObjectType)()
|
|
23
|
+
(0, type_graphql_1.ObjectType)({ description: 'One way to reach a contact - a phone, an email, an address' })
|
|
24
24
|
], ContactItem);
|
|
25
25
|
let ContactItemPatch = class ContactItemPatch {
|
|
26
26
|
};
|
|
27
27
|
exports.ContactItemPatch = ContactItemPatch;
|
|
28
28
|
tslib_1.__decorate([
|
|
29
|
-
(0, type_graphql_1.Field)(),
|
|
29
|
+
(0, type_graphql_1.Field)({ description: 'Where it is used - work, home, mobile or other' }),
|
|
30
30
|
tslib_1.__metadata("design:type", String)
|
|
31
31
|
], ContactItemPatch.prototype, "label", void 0);
|
|
32
32
|
tslib_1.__decorate([
|
|
33
|
-
(0, type_graphql_1.Field)(),
|
|
33
|
+
(0, type_graphql_1.Field)({ description: 'What it is - phone, email, address and the like' }),
|
|
34
34
|
tslib_1.__metadata("design:type", String)
|
|
35
35
|
], ContactItemPatch.prototype, "type", void 0);
|
|
36
36
|
tslib_1.__decorate([
|
|
37
|
-
(0, type_graphql_1.Field)(),
|
|
37
|
+
(0, type_graphql_1.Field)({ description: 'The number, address or text itself' }),
|
|
38
38
|
tslib_1.__metadata("design:type", String)
|
|
39
39
|
], ContactItemPatch.prototype, "value", void 0);
|
|
40
40
|
exports.ContactItemPatch = ContactItemPatch = tslib_1.__decorate([
|
|
41
|
-
(0, type_graphql_1.InputType)()
|
|
41
|
+
(0, type_graphql_1.InputType)({ description: 'One way to reach a contact, as it is given' })
|
|
42
42
|
], ContactItemPatch);
|
|
43
43
|
//# sourceMappingURL=contact-item.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-item.js","sourceRoot":"","sources":["../../../server/service/contact/contact-item.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,uCAAwC;AAGjC,IAAM,WAAW,GAAjB,MAAM,WAAW;CASvB,CAAA;AATY,kCAAW;AAEtB;IADC,IAAA,oBAAK,
|
|
1
|
+
{"version":3,"file":"contact-item.js","sourceRoot":"","sources":["../../../server/service/contact/contact-item.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,uCAAwC;AAGjC,IAAM,WAAW,GAAjB,MAAM,WAAW;CASvB,CAAA;AATY,kCAAW;AAEtB;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC;;0CAC5D;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC;;yCACxD;AAGlB;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;;0CAChD;sBARF,WAAW;IADvB,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,4DAA4D,EAAE,CAAC;GAC7E,WAAW,CASvB;AAGM,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAS5B,CAAA;AATY,4CAAgB;AAE3B;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC;;+CAC5D;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC;;8CACxD;AAGlB;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;;+CAChD;2BARF,gBAAgB;IAD5B,IAAA,wBAAS,EAAC,EAAE,WAAW,EAAE,4CAA4C,EAAE,CAAC;GAC5D,gBAAgB,CAS5B","sourcesContent":["import { ObjectType, Field, InputType } from 'type-graphql'\n\nimport { ContactField } from './contact'\n\n@ObjectType({ description: 'One way to reach a contact - a phone, an email, an address' })\nexport class ContactItem {\n @Field({ description: 'Where it is used - work, home, mobile or other' })\n label: string\n\n @Field({ description: 'What it is - phone, email, address and the like' })\n type: ContactField\n\n @Field({ description: 'The number, address or text itself' })\n value: string\n}\n\n@InputType({ description: 'One way to reach a contact, as it is given' })\nexport class ContactItemPatch {\n @Field({ description: 'Where it is used - work, home, mobile or other' })\n label: string\n\n @Field({ description: 'What it is - phone, email, address and the like' })\n type: ContactField\n\n @Field({ description: 'The number, address or text itself' })\n value: string\n}\n"]}
|
|
@@ -5,8 +5,10 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const type_graphql_1 = require("type-graphql");
|
|
6
6
|
const typeorm_1 = require("typeorm");
|
|
7
7
|
const attachment_base_1 = require("@things-factory/attachment-base");
|
|
8
|
+
const shell_1 = require("@things-factory/shell");
|
|
8
9
|
const contact_1 = require("./contact");
|
|
9
10
|
const contact_type_1 = require("./contact-type");
|
|
11
|
+
const contact_counterparty_1 = require("./contact-counterparty");
|
|
10
12
|
let ContactMutation = class ContactMutation {
|
|
11
13
|
async createContact(contact, context) {
|
|
12
14
|
const { domain, user, tx } = context.state;
|
|
@@ -17,7 +19,7 @@ let ContactMutation = class ContactMutation {
|
|
|
17
19
|
}
|
|
18
20
|
const ContactRepository = tx.getRepository(contact_1.Contact);
|
|
19
21
|
const result = await ContactRepository.save({
|
|
20
|
-
...contact,
|
|
22
|
+
...(await (0, contact_counterparty_1.withCounterparty)(tx, domain, contact)),
|
|
21
23
|
domain,
|
|
22
24
|
creator: user,
|
|
23
25
|
updater: user
|
|
@@ -46,7 +48,7 @@ let ContactMutation = class ContactMutation {
|
|
|
46
48
|
});
|
|
47
49
|
const result = await ContactRepository.save({
|
|
48
50
|
...contact,
|
|
49
|
-
...patch,
|
|
51
|
+
...(await (0, contact_counterparty_1.withCounterparty)(tx, domain, patch)),
|
|
50
52
|
updater: user
|
|
51
53
|
});
|
|
52
54
|
if (file) {
|
|
@@ -71,7 +73,7 @@ let ContactMutation = class ContactMutation {
|
|
|
71
73
|
for (let i = 0; i < _createRecords.length; i++) {
|
|
72
74
|
const newRecord = _createRecords[i];
|
|
73
75
|
const result = await contactRepo.save({
|
|
74
|
-
...newRecord,
|
|
76
|
+
...(await (0, contact_counterparty_1.withCounterparty)(tx, domain, newRecord)),
|
|
75
77
|
domain,
|
|
76
78
|
creator: user,
|
|
77
79
|
updater: user
|
|
@@ -90,7 +92,7 @@ let ContactMutation = class ContactMutation {
|
|
|
90
92
|
}
|
|
91
93
|
const result = await contactRepo.save({
|
|
92
94
|
...contact,
|
|
93
|
-
...updateRecord,
|
|
95
|
+
...(await (0, contact_counterparty_1.withCounterparty)(tx, domain, updateRecord)),
|
|
94
96
|
updater: user
|
|
95
97
|
});
|
|
96
98
|
results.push({ ...result, cuFlag: 'M' });
|
|
@@ -116,7 +118,7 @@ let ContactMutation = class ContactMutation {
|
|
|
116
118
|
async importContacts(contacts, context) {
|
|
117
119
|
const { domain, tx } = context.state;
|
|
118
120
|
await Promise.all(contacts.map(async (contact) => {
|
|
119
|
-
const createdContact = await tx.getRepository(contact_1.Contact).save({ domain, ...contact });
|
|
121
|
+
const createdContact = await tx.getRepository(contact_1.Contact).save({ domain, ...(await (0, contact_counterparty_1.withCounterparty)(tx, domain, contact)) });
|
|
120
122
|
}));
|
|
121
123
|
return true;
|
|
122
124
|
}
|
|
@@ -184,6 +186,7 @@ tslib_1.__decorate([
|
|
|
184
186
|
tslib_1.__metadata("design:returntype", Promise)
|
|
185
187
|
], ContactMutation.prototype, "importContacts", null);
|
|
186
188
|
exports.ContactMutation = ContactMutation = tslib_1.__decorate([
|
|
189
|
+
(0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals),
|
|
187
190
|
(0, type_graphql_1.Resolver)(contact_1.Contact)
|
|
188
191
|
], ContactMutation);
|
|
189
192
|
//# sourceMappingURL=contact-mutation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-mutation.js","sourceRoot":"","sources":["../../../server/service/contact/contact-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'\n\nimport { Contact } from './contact'\nimport { NewContact, ContactPatch } from './contact-type'\n\n@Resolver(Contact)\nexport class ContactMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To create new Contact' })\n async createContact(@Arg('contact') contact: NewContact, @Ctx() context: ResolverContext): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = contact.profile?.file\n\n if (contact.profile) {\n const { left, top, zoom } = contact.profile\n contact.profile = { left, top, zoom }\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const result = await ContactRepository.save({\n ...contact,\n domain,\n creator: user,\n updater: user\n })\n\n if (file) {\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To modify Contact information' })\n async updateContact(\n @Arg('id') id: string,\n @Arg('patch') patch: ContactPatch,\n @Ctx() context: ResolverContext\n ): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = patch.profile?.file\n\n if (patch.profile) {\n const { left, top, zoom } = patch.profile\n patch.profile = { left, top, zoom } as any\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const contact = await ContactRepository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n const result = await ContactRepository.save({\n ...contact,\n ...patch,\n updater: user\n })\n\n if (file) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Contact], { description: \"To modify multiple Contacts' information\" })\n async updateMultipleContact(\n @Arg('patches', type => [ContactPatch]) patches: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Contact[]> {\n const { domain, user, tx } = context.state\n\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 contactRepo = tx.getRepository(Contact)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await contactRepo.save({\n ...newRecord,\n domain,\n creator: user,\n updater: user\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 updateRecord = _updateRecords[i]\n const contact = await contactRepo.findOne({\n where: { domain: { id: domain.id }, id: updateRecord.id }\n })\n\n if (!contact) {\n throw new Error(`failed to find contact to update: ${updateRecord.id}`)\n }\n\n const result = await contactRepo.save({\n ...contact,\n ...updateRecord,\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete Contact' })\n async deleteContact(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({ domain: { id: domain.id }, id })\n // await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete multiple Contacts' })\n async deleteContacts(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n // await deleteAttachmentsByRef(null, { refBys: ids }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To import multiple Contacts' })\n async importContacts(\n @Arg('contacts', type => [ContactPatch]) contacts: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n contacts.map(async (contact: ContactPatch) => {\n const createdContact: Contact = await tx.getRepository(Contact).save({ domain, ...contact })\n })\n )\n\n return true\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"contact-mutation.js","sourceRoot":"","sources":["../../../server/service/contact/contact-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive, UseMiddleware } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'\nimport { SpeakRefusals } from '@things-factory/shell'\n\nimport { Contact } from './contact'\nimport { NewContact, ContactPatch } from './contact-type'\nimport { withCounterparty } from './contact-counterparty'\n\n@UseMiddleware(SpeakRefusals)\n@Resolver(Contact)\nexport class ContactMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To create new Contact' })\n async createContact(@Arg('contact') contact: NewContact, @Ctx() context: ResolverContext): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = contact.profile?.file\n\n if (contact.profile) {\n const { left, top, zoom } = contact.profile\n contact.profile = { left, top, zoom }\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const result = await ContactRepository.save({\n ...(await withCounterparty(tx, domain, contact)),\n domain,\n creator: user,\n updater: user\n })\n\n if (file) {\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To modify Contact information' })\n async updateContact(\n @Arg('id') id: string,\n @Arg('patch') patch: ContactPatch,\n @Ctx() context: ResolverContext\n ): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = patch.profile?.file\n\n if (patch.profile) {\n const { left, top, zoom } = patch.profile\n patch.profile = { left, top, zoom } as any\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const contact = await ContactRepository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n const result = await ContactRepository.save({\n ...contact,\n ...(await withCounterparty(tx, domain, patch)),\n updater: user\n })\n\n if (file) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Contact], { description: \"To modify multiple Contacts' information\" })\n async updateMultipleContact(\n @Arg('patches', type => [ContactPatch]) patches: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Contact[]> {\n const { domain, user, tx } = context.state\n\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 contactRepo = tx.getRepository(Contact)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await contactRepo.save({\n ...(await withCounterparty(tx, domain, newRecord)),\n domain,\n creator: user,\n updater: user\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 updateRecord = _updateRecords[i]\n const contact = await contactRepo.findOne({\n where: { domain: { id: domain.id }, id: updateRecord.id }\n })\n\n if (!contact) {\n throw new Error(`failed to find contact to update: ${updateRecord.id}`)\n }\n\n const result = await contactRepo.save({\n ...contact,\n ...(await withCounterparty(tx, domain, updateRecord)),\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete Contact' })\n async deleteContact(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({ domain: { id: domain.id }, id })\n // await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete multiple Contacts' })\n async deleteContacts(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n // await deleteAttachmentsByRef(null, { refBys: ids }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To import multiple Contacts' })\n async importContacts(\n @Arg('contacts', type => [ContactPatch]) contacts: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n contacts.map(async (contact: ContactPatch) => {\n const createdContact: Contact = await tx.getRepository(Contact).save({ domain, ...(await withCounterparty(tx, domain, contact)) })\n })\n )\n\n return true\n }\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Domain, ListParam } from '@things-factory/shell';
|
|
2
2
|
import { User } from '@things-factory/auth-base';
|
|
3
|
+
import { Counterparty } from '@things-factory/biz-base';
|
|
3
4
|
import { Contact } from './contact';
|
|
4
5
|
import { ContactItem } from './contact-item';
|
|
5
6
|
import { Profile } from './profile';
|
|
@@ -8,6 +9,7 @@ export declare class ContactQuery {
|
|
|
8
9
|
contact(id: string, context: ResolverContext): Promise<Contact>;
|
|
9
10
|
contacts(params: ListParam, context: ResolverContext): Promise<ContactList>;
|
|
10
11
|
profile(contact: Contact): Promise<Profile>;
|
|
12
|
+
counterparty(contact: Contact): Promise<Counterparty | null>;
|
|
11
13
|
phone(contact: Contact): Promise<string>;
|
|
12
14
|
email(contact: Contact): Promise<string>;
|
|
13
15
|
address(contact: Contact): Promise<string>;
|
|
@@ -6,6 +6,7 @@ const type_graphql_1 = require("type-graphql");
|
|
|
6
6
|
const graphql_scalars_1 = require("graphql-scalars");
|
|
7
7
|
const shell_1 = require("@things-factory/shell");
|
|
8
8
|
const auth_base_1 = require("@things-factory/auth-base");
|
|
9
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
9
10
|
const attachment_base_1 = require("@things-factory/attachment-base");
|
|
10
11
|
const contact_1 = require("./contact");
|
|
11
12
|
const contact_item_1 = require("./contact-item");
|
|
@@ -35,7 +36,9 @@ let ContactQuery = class ContactQuery {
|
|
|
35
36
|
domain,
|
|
36
37
|
params,
|
|
37
38
|
repository: await (0, shell_1.getRepository)(contact_1.Contact),
|
|
38
|
-
searchables: ['name', '
|
|
39
|
+
searchables: ['name', 'counterparty', 'email', 'phone'],
|
|
40
|
+
/* A search by counterparty is a search by the name of the counterparty the contact belongs to. */
|
|
41
|
+
filtersMap: { counterparty: { columnName: 'name', relationColumn: 'counterparty' } }
|
|
39
42
|
});
|
|
40
43
|
const [items, total] = await queryBuilder.getManyAndCount();
|
|
41
44
|
return { items, total };
|
|
@@ -54,6 +57,14 @@ let ContactQuery = class ContactQuery {
|
|
|
54
57
|
});
|
|
55
58
|
return { left, top, zoom, picture: attachment?.fullpath };
|
|
56
59
|
}
|
|
60
|
+
/* A counterparty deleted since is still the one the contact belonged to: it is read with the deleted ones. */
|
|
61
|
+
async counterparty(contact) {
|
|
62
|
+
if (contact.counterparty !== undefined)
|
|
63
|
+
return contact.counterparty;
|
|
64
|
+
if (!contact.counterpartyId)
|
|
65
|
+
return null;
|
|
66
|
+
return await (0, shell_1.getRepository)(biz_base_1.Counterparty).findOne({ where: { id: contact.counterpartyId, domain: { id: contact.domainId } }, withDeleted: true });
|
|
67
|
+
}
|
|
57
68
|
async phone(contact) {
|
|
58
69
|
return getContactItem(contact, contact_1.ContactField.Phone, 'work');
|
|
59
70
|
}
|
|
@@ -103,6 +114,13 @@ tslib_1.__decorate([
|
|
|
103
114
|
tslib_1.__metadata("design:paramtypes", [contact_1.Contact]),
|
|
104
115
|
tslib_1.__metadata("design:returntype", Promise)
|
|
105
116
|
], ContactQuery.prototype, "profile", null);
|
|
117
|
+
tslib_1.__decorate([
|
|
118
|
+
(0, type_graphql_1.FieldResolver)(type => biz_base_1.Counterparty, { nullable: true }),
|
|
119
|
+
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
120
|
+
tslib_1.__metadata("design:type", Function),
|
|
121
|
+
tslib_1.__metadata("design:paramtypes", [contact_1.Contact]),
|
|
122
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
123
|
+
], ContactQuery.prototype, "counterparty", null);
|
|
106
124
|
tslib_1.__decorate([
|
|
107
125
|
(0, type_graphql_1.FieldResolver)(type => String, { nullable: true }),
|
|
108
126
|
tslib_1.__param(0, (0, type_graphql_1.Root)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-query.js","sourceRoot":"","sources":["../../../server/service/contact/contact-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AACnF,qDAAqD;AACrD,iDAAuG;AACvG,yDAAgD;AAChD,qEAA4D;AAC5D,uCAAiD;AACjD,iDAA4C;AAC5C,uCAAmC;AACnC,iDAA4C;AAE5C,SAAS,eAAe,CAAC,OAAgB;IACvC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB,EAAE,IAAY,EAAE,KAAa;IACnE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,OAAO,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,CAAA;AAC/E,CAAC;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEjB,AAAN,KAAK,CAAC,OAAO,CAAY,EAAU,EAAS,OAAwB;QAClE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,OAAO,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,OAAO,CAAC;YAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAA0B,MAAiB,EAAS,OAAwB;QACxF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC;YACxC,WAAW,EAAE,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"contact-query.js","sourceRoot":"","sources":["../../../server/service/contact/contact-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AACnF,qDAAqD;AACrD,iDAAuG;AACvG,yDAAgD;AAChD,uDAAuD;AACvD,qEAA4D;AAC5D,uCAAiD;AACjD,iDAA4C;AAC5C,uCAAmC;AACnC,iDAA4C;AAE5C,SAAS,eAAe,CAAC,OAAgB;IACvC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB,EAAE,IAAY,EAAE,KAAa;IACnE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEzB,OAAO,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,CAAA;AAC/E,CAAC;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEjB,AAAN,KAAK,CAAC,OAAO,CAAY,EAAU,EAAS,OAAwB;QAClE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,OAAO,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC,CAAC,OAAO,CAAC;YAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;SACzC,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAA0B,MAAiB,EAAS,OAAwB;QACxF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,iBAAO,CAAC;YACxC,WAAW,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC;YACvD,kGAAkG;YAClG,UAAU,EAAE,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE;SACrF,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,OAAgB;QACpC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;QAE/C,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAClE,OAAM;QACR,CAAC;QAED,MAAM,UAAU,GAAe,MAAM,IAAA,qBAAa,EAAC,4BAAU,CAAC,CAAC,OAAO,CAAC;YACrE,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE;gBAChC,OAAO,EAAE,iBAAO,CAAC,IAAI;gBACrB,KAAK,EAAE,OAAO,CAAC,EAAE;aAClB;SACF,CAAC,CAAA;QAEF,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;IAC3D,CAAC;IAED,8GAA8G;IAExG,AAAN,KAAK,CAAC,YAAY,CAAS,OAAgB;QACzC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,YAAY,CAAA;QACnE,IAAI,CAAC,OAAO,CAAC,cAAc;YAAE,OAAO,IAAI,CAAA;QACxC,OAAO,MAAM,IAAA,qBAAa,EAAC,uBAAY,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IACzJ,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK,CAAS,OAAgB;QAClC,OAAO,cAAc,CAAC,OAAO,EAAE,sBAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC5D,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK,CAAS,OAAgB;QAClC,OAAO,cAAc,CAAC,OAAO,EAAE,sBAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC5D,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,OAAgB;QACpC,OAAO,cAAc,CAAC,OAAO,EAAE,sBAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC9D,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAS,OAAgB;QACvC,OAAO,cAAc,CAAC,OAAO,EAAE,sBAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACjE,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK,CAAS,OAAgB;QAClC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAS,OAAgB;QACnC,OAAO,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACxE,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,OAAgB;QACpC,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACvE,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,OAAgB;QACpC,OAAO,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACvE,CAAC;CACF,CAAA;AA9FY,oCAAY;AAEjB;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,iBAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACnE,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;IAAc,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;2CAM1C;AAGK;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,0BAAW,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC7D,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;4CAexD;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAO,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;2CAgBrC;AAIK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,uBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACpC,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;gDAI1C;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACrC,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;yCAEnC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,qCAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClD,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;yCAEnC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACnC,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;2CAErC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChC,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;8CAExC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0BAAW,CAAC,CAAC;IACxB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;yCAEnC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;0CAEpC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;2CAErC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAU,iBAAO;;2CAErC;uBA7FU,YAAY;IADxB,IAAA,uBAAQ,EAAC,iBAAO,CAAC;GACL,YAAY,CA8FxB","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx } from 'type-graphql'\nimport { GraphQLEmailAddress } from 'graphql-scalars'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Counterparty } from '@things-factory/biz-base'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { Contact, ContactField } from './contact'\nimport { ContactItem } from './contact-item'\nimport { Profile } from './profile'\nimport { ContactList } from './contact-type'\n\nfunction getContactItems(contact: Contact) {\n const { items } = contact\n\n if (!items || !(items instanceof Array)) {\n return []\n }\n\n return items\n}\n\nfunction getContactItem(contact: Contact, type: String, label: String) {\n const { items } = contact\n\n return items?.find(item => item.type === type && item.label === label)?.value\n}\n\n@Resolver(Contact)\nexport class ContactQuery {\n @Query(returns => Contact!, { nullable: true, description: 'To fetch a Contact' })\n async contact(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Contact> {\n const { domain } = context.state\n\n return await getRepository(Contact).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ContactList, { description: 'To fetch multiple Contacts' })\n async contacts(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<ContactList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(Contact),\n searchables: ['name', 'counterparty', 'email', 'phone'],\n /* A search by counterparty is a search by the name of the counterparty the contact belongs to. */\n filtersMap: { counterparty: { columnName: 'name', relationColumn: 'counterparty' } }\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => Profile)\n async profile(@Root() contact: Contact): Promise<Profile> {\n var { left, top, zoom } = contact.profile || {}\n\n if (left === undefined || top === undefined || zoom === undefined) {\n return\n }\n\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: contact.domainId },\n refType: Contact.name,\n refBy: contact.id\n }\n })\n\n return { left, top, zoom, picture: attachment?.fullpath }\n }\n\n /* A counterparty deleted since is still the one the contact belonged to: it is read with the deleted ones. */\n @FieldResolver(type => Counterparty, { nullable: true })\n async counterparty(@Root() contact: Contact): Promise<Counterparty | null> {\n if (contact.counterparty !== undefined) return contact.counterparty\n if (!contact.counterpartyId) return null\n return await getRepository(Counterparty).findOne({ where: { id: contact.counterpartyId, domain: { id: contact.domainId } } as any, withDeleted: true })\n }\n\n @FieldResolver(type => String, { nullable: true })\n async phone(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Phone, 'work')\n }\n\n @FieldResolver(type => GraphQLEmailAddress, { nullable: true })\n async email(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Email, 'work')\n }\n\n @FieldResolver(type => String, { nullable: true })\n async address(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Address, 'work')\n }\n\n @FieldResolver(type => String, { nullable: true })\n async department(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Department, 'work')\n }\n\n @FieldResolver(type => [ContactItem])\n async items(@Root() contact: Contact): Promise<ContactItem[]> {\n return getContactItems(contact)\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() contact: Contact): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: contact.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() contact: Contact): Promise<User> {\n return await getRepository(User).findOneBy({ id: contact.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() contact: Contact): Promise<User> {\n return await getRepository(User).findOneBy({ id: contact.creatorId })\n }\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { ObjectRef } from '@things-factory/shell';
|
|
1
2
|
import { ProfileInput } from './profile';
|
|
2
3
|
import { ContactItemPatch } from './contact-item';
|
|
3
4
|
import { Contact } from './contact';
|
|
4
5
|
export declare class NewContact {
|
|
5
6
|
name: string;
|
|
6
|
-
|
|
7
|
+
counterparty?: ObjectRef | null;
|
|
7
8
|
email?: string;
|
|
8
9
|
phone?: string;
|
|
9
10
|
address?: string;
|
|
@@ -15,7 +16,7 @@ export declare class NewContact {
|
|
|
15
16
|
export declare class ContactPatch {
|
|
16
17
|
id?: string;
|
|
17
18
|
name?: string;
|
|
18
|
-
|
|
19
|
+
counterparty?: ObjectRef | null;
|
|
19
20
|
email?: string;
|
|
20
21
|
phone?: string;
|
|
21
22
|
address?: string;
|
|
@@ -4,6 +4,7 @@ exports.ContactList = exports.ContactPatch = exports.NewContact = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const type_graphql_1 = require("type-graphql");
|
|
6
6
|
const graphql_scalars_1 = require("graphql-scalars");
|
|
7
|
+
const shell_1 = require("@things-factory/shell");
|
|
7
8
|
const profile_1 = require("./profile");
|
|
8
9
|
const contact_item_1 = require("./contact-item");
|
|
9
10
|
const contact_1 = require("./contact");
|
|
@@ -11,43 +12,43 @@ let NewContact = class NewContact {
|
|
|
11
12
|
};
|
|
12
13
|
exports.NewContact = NewContact;
|
|
13
14
|
tslib_1.__decorate([
|
|
14
|
-
(0, type_graphql_1.Field)(),
|
|
15
|
+
(0, type_graphql_1.Field)({ description: 'The name of the person' }),
|
|
15
16
|
tslib_1.__metadata("design:type", String)
|
|
16
17
|
], NewContact.prototype, "name", void 0);
|
|
17
18
|
tslib_1.__decorate([
|
|
18
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
19
|
-
tslib_1.__metadata("design:type",
|
|
20
|
-
], NewContact.prototype, "
|
|
19
|
+
(0, type_graphql_1.Field)(type => shell_1.ObjectRef, { nullable: true, description: 'The counterparty the person belongs to, by its id - null clears it' }),
|
|
20
|
+
tslib_1.__metadata("design:type", shell_1.ObjectRef)
|
|
21
|
+
], NewContact.prototype, "counterparty", void 0);
|
|
21
22
|
tslib_1.__decorate([
|
|
22
|
-
(0, type_graphql_1.Field)(type => graphql_scalars_1.GraphQLEmailAddress, { nullable: true }),
|
|
23
|
+
(0, type_graphql_1.Field)(type => graphql_scalars_1.GraphQLEmailAddress, { nullable: true, description: 'The work email - kept as a work email item' }),
|
|
23
24
|
tslib_1.__metadata("design:type", String)
|
|
24
25
|
], NewContact.prototype, "email", void 0);
|
|
25
26
|
tslib_1.__decorate([
|
|
26
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
27
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The work phone - kept as a work phone item' }),
|
|
27
28
|
tslib_1.__metadata("design:type", String)
|
|
28
29
|
], NewContact.prototype, "phone", void 0);
|
|
29
30
|
tslib_1.__decorate([
|
|
30
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
31
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The work address - kept as a work address item' }),
|
|
31
32
|
tslib_1.__metadata("design:type", String)
|
|
32
33
|
], NewContact.prototype, "address", void 0);
|
|
33
34
|
tslib_1.__decorate([
|
|
34
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
35
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The department at work - kept as a work department item' }),
|
|
35
36
|
tslib_1.__metadata("design:type", String)
|
|
36
37
|
], NewContact.prototype, "department", void 0);
|
|
37
38
|
tslib_1.__decorate([
|
|
38
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
39
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'A note about the person' }),
|
|
39
40
|
tslib_1.__metadata("design:type", String)
|
|
40
41
|
], NewContact.prototype, "note", void 0);
|
|
41
42
|
tslib_1.__decorate([
|
|
42
|
-
(0, type_graphql_1.Field)(type => profile_1.ProfileInput, { nullable: true }),
|
|
43
|
+
(0, type_graphql_1.Field)(type => profile_1.ProfileInput, { nullable: true, description: 'The profile picture and how it is framed' }),
|
|
43
44
|
tslib_1.__metadata("design:type", profile_1.ProfileInput)
|
|
44
45
|
], NewContact.prototype, "profile", void 0);
|
|
45
46
|
tslib_1.__decorate([
|
|
46
|
-
(0, type_graphql_1.Field)(type => [contact_item_1.ContactItemPatch], { nullable: true }),
|
|
47
|
+
(0, type_graphql_1.Field)(type => [contact_item_1.ContactItemPatch], { nullable: true, description: 'Ways to reach the person' }),
|
|
47
48
|
tslib_1.__metadata("design:type", Array)
|
|
48
49
|
], NewContact.prototype, "items", void 0);
|
|
49
50
|
exports.NewContact = NewContact = tslib_1.__decorate([
|
|
50
|
-
(0, type_graphql_1.InputType)()
|
|
51
|
+
(0, type_graphql_1.InputType)({ description: 'A new contact' })
|
|
51
52
|
], NewContact);
|
|
52
53
|
let ContactPatch = class ContactPatch {
|
|
53
54
|
};
|
|
@@ -57,60 +58,60 @@ tslib_1.__decorate([
|
|
|
57
58
|
tslib_1.__metadata("design:type", String)
|
|
58
59
|
], ContactPatch.prototype, "id", void 0);
|
|
59
60
|
tslib_1.__decorate([
|
|
60
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
61
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The name of the person' }),
|
|
61
62
|
tslib_1.__metadata("design:type", String)
|
|
62
63
|
], ContactPatch.prototype, "name", void 0);
|
|
63
64
|
tslib_1.__decorate([
|
|
64
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
65
|
-
tslib_1.__metadata("design:type",
|
|
66
|
-
], ContactPatch.prototype, "
|
|
65
|
+
(0, type_graphql_1.Field)(type => shell_1.ObjectRef, { nullable: true, description: 'The counterparty the person belongs to, by its id - null clears it' }),
|
|
66
|
+
tslib_1.__metadata("design:type", shell_1.ObjectRef)
|
|
67
|
+
], ContactPatch.prototype, "counterparty", void 0);
|
|
67
68
|
tslib_1.__decorate([
|
|
68
|
-
(0, type_graphql_1.Field)(type => graphql_scalars_1.GraphQLEmailAddress, { nullable: true }),
|
|
69
|
+
(0, type_graphql_1.Field)(type => graphql_scalars_1.GraphQLEmailAddress, { nullable: true, description: 'The work email - kept as a work email item' }),
|
|
69
70
|
tslib_1.__metadata("design:type", String)
|
|
70
71
|
], ContactPatch.prototype, "email", void 0);
|
|
71
72
|
tslib_1.__decorate([
|
|
72
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
73
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The work phone - kept as a work phone item' }),
|
|
73
74
|
tslib_1.__metadata("design:type", String)
|
|
74
75
|
], ContactPatch.prototype, "phone", void 0);
|
|
75
76
|
tslib_1.__decorate([
|
|
76
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
77
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The work address - kept as a work address item' }),
|
|
77
78
|
tslib_1.__metadata("design:type", String)
|
|
78
79
|
], ContactPatch.prototype, "address", void 0);
|
|
79
80
|
tslib_1.__decorate([
|
|
80
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
81
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'The department at work - kept as a work department item' }),
|
|
81
82
|
tslib_1.__metadata("design:type", String)
|
|
82
83
|
], ContactPatch.prototype, "department", void 0);
|
|
83
84
|
tslib_1.__decorate([
|
|
84
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
85
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'A note about the person' }),
|
|
85
86
|
tslib_1.__metadata("design:type", String)
|
|
86
87
|
], ContactPatch.prototype, "note", void 0);
|
|
87
88
|
tslib_1.__decorate([
|
|
88
|
-
(0, type_graphql_1.Field)(type => profile_1.ProfileInput, { nullable: true }),
|
|
89
|
+
(0, type_graphql_1.Field)(type => profile_1.ProfileInput, { nullable: true, description: 'The profile picture and how it is framed' }),
|
|
89
90
|
tslib_1.__metadata("design:type", profile_1.ProfileInput)
|
|
90
91
|
], ContactPatch.prototype, "profile", void 0);
|
|
91
92
|
tslib_1.__decorate([
|
|
92
|
-
(0, type_graphql_1.Field)(type => [contact_item_1.ContactItemPatch], { nullable: true }),
|
|
93
|
+
(0, type_graphql_1.Field)(type => [contact_item_1.ContactItemPatch], { nullable: true, description: 'Ways to reach the person' }),
|
|
93
94
|
tslib_1.__metadata("design:type", Array)
|
|
94
95
|
], ContactPatch.prototype, "items", void 0);
|
|
95
96
|
tslib_1.__decorate([
|
|
96
|
-
(0, type_graphql_1.Field)({ nullable: true }),
|
|
97
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'In a batch: + to create, M to modify' }),
|
|
97
98
|
tslib_1.__metadata("design:type", String)
|
|
98
99
|
], ContactPatch.prototype, "cuFlag", void 0);
|
|
99
100
|
exports.ContactPatch = ContactPatch = tslib_1.__decorate([
|
|
100
|
-
(0, type_graphql_1.InputType)()
|
|
101
|
+
(0, type_graphql_1.InputType)({ description: 'Changes to a contact; a field left out stays as it is' })
|
|
101
102
|
], ContactPatch);
|
|
102
103
|
let ContactList = class ContactList {
|
|
103
104
|
};
|
|
104
105
|
exports.ContactList = ContactList;
|
|
105
106
|
tslib_1.__decorate([
|
|
106
|
-
(0, type_graphql_1.Field)(type => [contact_1.Contact]),
|
|
107
|
+
(0, type_graphql_1.Field)(type => [contact_1.Contact], { description: 'The contacts of the page' }),
|
|
107
108
|
tslib_1.__metadata("design:type", Array)
|
|
108
109
|
], ContactList.prototype, "items", void 0);
|
|
109
110
|
tslib_1.__decorate([
|
|
110
|
-
(0, type_graphql_1.Field)(type => type_graphql_1.Int),
|
|
111
|
+
(0, type_graphql_1.Field)(type => type_graphql_1.Int, { description: 'How many contacts match, over all pages' }),
|
|
111
112
|
tslib_1.__metadata("design:type", Number)
|
|
112
113
|
], ContactList.prototype, "total", void 0);
|
|
113
114
|
exports.ContactList = ContactList = tslib_1.__decorate([
|
|
114
|
-
(0, type_graphql_1.ObjectType)()
|
|
115
|
+
(0, type_graphql_1.ObjectType)({ description: 'A page of contacts' })
|
|
115
116
|
], ContactList);
|
|
116
117
|
//# sourceMappingURL=contact-type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-type.js","sourceRoot":"","sources":["../../../server/service/contact/contact-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,qDAAqD;AAErD,uCAAwC;AACxC,iDAAiD;AACjD,uCAAmC;AAG5B,IAAM,UAAU,GAAhB,MAAM,UAAU;CA2BtB,CAAA;AA3BY,gCAAU;AAErB;IADC,IAAA,oBAAK,
|
|
1
|
+
{"version":3,"file":"contact-type.js","sourceRoot":"","sources":["../../../server/service/contact/contact-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { ObjectType, Field, InputType, Int, ID } from 'type-graphql'\nimport { GraphQLEmailAddress } from 'graphql-scalars'\n\nimport { ObjectRef } from '@things-factory/shell'\n\nimport { ProfileInput } from './profile'\nimport { ContactItemPatch } from './contact-item'\nimport { Contact } from './contact'\n\n@InputType({ description: 'A new contact' })\nexport class NewContact {\n @Field({ description: 'The name of the person' })\n name: string\n\n @Field(type => ObjectRef, { nullable: true, description: 'The counterparty the person belongs to, by its id - null clears it' })\n counterparty?: ObjectRef | null\n\n @Field(type => GraphQLEmailAddress, { nullable: true, description: 'The work email - kept as a work email item' })\n email?: string\n\n @Field({ nullable: true, description: 'The work phone - kept as a work phone item' })\n phone?: string\n\n @Field({ nullable: true, description: 'The work address - kept as a work address item' })\n address?: string\n\n @Field({ nullable: true, description: 'The department at work - kept as a work department item' })\n department?: string\n\n @Field({ nullable: true, description: 'A note about the person' })\n note?: string\n\n @Field(type => ProfileInput, { nullable: true, description: 'The profile picture and how it is framed' })\n profile?: ProfileInput\n\n @Field(type => [ContactItemPatch], { nullable: true, description: 'Ways to reach the person' })\n items?: ContactItemPatch[]\n}\n\n@InputType({ description: 'Changes to a contact; a field left out stays as it is' })\nexport class ContactPatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true, description: 'The name of the person' })\n name?: string\n\n @Field(type => ObjectRef, { nullable: true, description: 'The counterparty the person belongs to, by its id - null clears it' })\n counterparty?: ObjectRef | null\n\n @Field(type => GraphQLEmailAddress, { nullable: true, description: 'The work email - kept as a work email item' })\n email?: string\n\n @Field({ nullable: true, description: 'The work phone - kept as a work phone item' })\n phone?: string\n\n @Field({ nullable: true, description: 'The work address - kept as a work address item' })\n address?: string\n\n @Field({ nullable: true, description: 'The department at work - kept as a work department item' })\n department?: string\n\n @Field({ nullable: true, description: 'A note about the person' })\n note?: string\n\n @Field(type => ProfileInput, { nullable: true, description: 'The profile picture and how it is framed' })\n profile?: ProfileInput\n\n @Field(type => [ContactItemPatch], { nullable: true, description: 'Ways to reach the person' })\n items?: ContactItemPatch[]\n\n @Field({ nullable: true, description: 'In a batch: + to create, M to modify' })\n cuFlag?: string\n}\n\n@ObjectType({ description: 'A page of contacts' })\nexport class ContactList {\n @Field(type => [Contact], { description: 'The contacts of the page' })\n items: Contact[]\n\n @Field(type => Int, { description: 'How many contacts match, over all pages' })\n total: number\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Domain } from '@things-factory/shell';
|
|
2
2
|
import { User } from '@things-factory/auth-base';
|
|
3
|
+
import { Counterparty } from '@things-factory/biz-base';
|
|
3
4
|
import { ContactItem } from './contact-item';
|
|
4
5
|
import { Profile } from './profile';
|
|
5
6
|
export declare enum ContactField {
|
|
@@ -12,7 +13,6 @@ export declare enum ContactField {
|
|
|
12
13
|
Profile = "profile",
|
|
13
14
|
Picture = "picture",
|
|
14
15
|
Department = "department",
|
|
15
|
-
Company = "company",
|
|
16
16
|
Homepage = "homepage"
|
|
17
17
|
}
|
|
18
18
|
export declare class Contact {
|
|
@@ -20,7 +20,8 @@ export declare class Contact {
|
|
|
20
20
|
domain?: Domain;
|
|
21
21
|
domainId?: string;
|
|
22
22
|
name?: string;
|
|
23
|
-
|
|
23
|
+
counterparty?: Counterparty;
|
|
24
|
+
counterpartyId?: string;
|
|
24
25
|
email?: string;
|
|
25
26
|
phone?: string;
|
|
26
27
|
address?: string;
|