Spaces:
Runtime error
Runtime error
File size: 3,104 Bytes
5e518ea |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import { InstanceDto } from '@api/dto/instance.dto';
import { TemplateDto } from '@api/dto/template.dto';
import { PrismaRepository } from '@api/repository/repository.service';
import { ConfigService, WaBusiness } from '@config/env.config';
import { Logger } from '@config/logger.config';
import axios from 'axios';
import { WAMonitoringService } from './monitor.service';
export class TemplateService {
constructor(
private readonly waMonitor: WAMonitoringService,
public readonly prismaRepository: PrismaRepository,
private readonly configService: ConfigService,
) {}
private readonly logger = new Logger('TemplateService');
private businessId: string;
private token: string;
public async find(instance: InstanceDto) {
const getInstance = await this.waMonitor.waInstances[instance.instanceName].instance;
if (!getInstance) {
throw new Error('Instance not found');
}
this.businessId = getInstance.businessId;
this.token = getInstance.token;
const response = await this.requestTemplate({}, 'GET');
if (!response) {
throw new Error('Error to create template');
}
return response.data;
}
public async create(instance: InstanceDto, data: TemplateDto) {
try {
const getInstance = await this.waMonitor.waInstances[instance.instanceName].instance;
if (!getInstance) {
throw new Error('Instance not found');
}
this.businessId = getInstance.businessId;
this.token = getInstance.token;
const postData = {
name: data.name,
category: data.category,
allow_category_change: data.allowCategoryChange,
language: data.language,
components: data.components,
};
const response = await this.requestTemplate(postData, 'POST');
if (!response || response.error) {
throw new Error('Error to create template');
}
const template = await this.prismaRepository.template.create({
data: {
templateId: response.id,
name: data.name,
template: response,
webhookUrl: data.webhookUrl,
instanceId: getInstance.id,
},
});
return template;
} catch (error) {
this.logger.error(error);
throw new Error('Error to create template');
}
}
private async requestTemplate(data: any, method: string) {
try {
let urlServer = this.configService.get<WaBusiness>('WA_BUSINESS').URL;
const version = this.configService.get<WaBusiness>('WA_BUSINESS').VERSION;
urlServer = `${urlServer}/${version}/${this.businessId}/message_templates`;
const headers = { 'Content-Type': 'application/json', Authorization: `Bearer ${this.token}` };
if (method === 'GET') {
const result = await axios.get(urlServer, { headers });
return result.data;
} else if (method === 'POST') {
const result = await axios.post(urlServer, data, { headers });
return result.data;
}
} catch (e) {
this.logger.error(e.response.data);
return e.response.data.error;
}
}
}
|