[core] ChatWoot - list custom attributes once on upsert
This commit is contained in:
1 parent
59fe4b30f0
commit
de47d6e445
2 files changed
+44
-31
No files matched your search
@@ -4,6 +4,7 @@ import {
|
||||
CustomAttributeModel,
|
||||
CustomAttributeType,
|
||||
} from '@waha/apps/chatwoot/client/types';
|
||||
import type { custom_attribute } from '@figuro/chatwoot-sdk/dist/models/custom_attribute';
|
||||
|
||||
export interface CustomAttribute {
|
||||
key: string;
|
||||
@@ -19,35 +20,49 @@ export class CustomAttributesService {
|
||||
private accountAPI: ChatwootClient,
|
||||
) {}
|
||||
|
||||
async upsert(attribute: CustomAttribute): Promise<void> {
|
||||
const attributes = await this.accountAPI.customAttributes.list({
|
||||
accountId: this.config.accountId,
|
||||
attributeModel: String(attribute.model) as '0' | '1',
|
||||
});
|
||||
const existing = attributes.find((a) => a.attribute_key === attribute.key);
|
||||
async upsert(attributes: Array<CustomAttribute>): Promise<void> {
|
||||
const current: Record<CustomAttributeModel, Array<custom_attribute>> = {
|
||||
[CustomAttributeModel.CONVERSATION]: [],
|
||||
[CustomAttributeModel.CONTACT]: [],
|
||||
};
|
||||
const models = [
|
||||
CustomAttributeModel.CONVERSATION,
|
||||
CustomAttributeModel.CONTACT,
|
||||
];
|
||||
for (const model of models) {
|
||||
current[model] = await this.accountAPI.customAttributes.list({
|
||||
accountId: this.config.accountId,
|
||||
attributeModel: String(model) as '0' | '1',
|
||||
});
|
||||
}
|
||||
|
||||
if (existing) {
|
||||
await this.accountAPI.customAttributes.update({
|
||||
accountId: this.config.accountId,
|
||||
id: existing.id,
|
||||
data: {
|
||||
attribute_key: attribute.key,
|
||||
attribute_display_name: attribute.name,
|
||||
attribute_display_type: attribute.type,
|
||||
attribute_description: attribute.description,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
await this.accountAPI.customAttributes.create({
|
||||
accountId: this.config.accountId,
|
||||
data: {
|
||||
attribute_key: attribute.key,
|
||||
attribute_display_name: attribute.name,
|
||||
attribute_display_type: attribute.type,
|
||||
attribute_description: attribute.description,
|
||||
attribute_model: attribute.model,
|
||||
},
|
||||
});
|
||||
for (const attribute of attributes) {
|
||||
const existing = current[attribute.model].find(
|
||||
(a) => a.attribute_key === attribute.key,
|
||||
);
|
||||
if (existing) {
|
||||
await this.accountAPI.customAttributes.update({
|
||||
accountId: this.config.accountId,
|
||||
id: existing.id,
|
||||
data: {
|
||||
attribute_key: attribute.key,
|
||||
attribute_display_name: attribute.name,
|
||||
attribute_display_type: attribute.type,
|
||||
attribute_description: attribute.description,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
await this.accountAPI.customAttributes.create({
|
||||
accountId: this.config.accountId,
|
||||
data: {
|
||||
attribute_key: attribute.key,
|
||||
attribute_display_name: attribute.name,
|
||||
attribute_display_type: attribute.type,
|
||||
attribute_description: attribute.description,
|
||||
attribute_model: attribute.model,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -130,9 +130,7 @@ export class ChatWootAppService implements IAppService {
|
||||
private async setupCustomAttributes(app: App<ChatWootAppConfig>) {
|
||||
const di = new DIContainer(0, app.config, this.logger, null);
|
||||
const service = di.CustomAttributesService();
|
||||
for (const attr of CHATWOOT_CUSTOM_ATTRIBUTES) {
|
||||
await service.upsert(attr);
|
||||
}
|
||||
await service.upsert(CHATWOOT_CUSTOM_ATTRIBUTES);
|
||||
}
|
||||
|
||||
private cleanCache(app: App<ChatWootAppConfig>) {
|
||||
|
||||
Reference in new issue
Block a user