@@ -88,6 +88,77 @@ export class TemplateService {
8888 }
8989 }
9090
91+ public async edit (
92+ instance : InstanceDto ,
93+ data : { templateId : string ; category ?: string ; components ?: any ; allowCategoryChange ?: boolean ; ttl ?: number } ,
94+ ) {
95+ const getInstance = await this . waMonitor . waInstances [ instance . instanceName ] . instance ;
96+ if ( ! getInstance ) {
97+ throw new Error ( 'Instance not found' ) ;
98+ }
99+
100+ this . businessId = getInstance . businessId ;
101+ this . token = getInstance . token ;
102+
103+ const payload : Record < string , unknown > = { } ;
104+ if ( typeof data . category === 'string' ) payload . category = data . category ;
105+ if ( typeof data . allowCategoryChange === 'boolean' ) payload . allow_category_change = data . allowCategoryChange ;
106+ if ( typeof data . ttl === 'number' ) payload . time_to_live = data . ttl ;
107+ if ( data . components ) payload . components = data . components ;
108+
109+ const response = await this . requestEditTemplate ( data . templateId , payload ) ;
110+
111+ if ( ! response || response . error ) {
112+ if ( response && response . error ) {
113+ const metaError = new Error ( response . error . message || 'WhatsApp API Error' ) ;
114+ ( metaError as any ) . template = response . error ;
115+ throw metaError ;
116+ }
117+ throw new Error ( 'Error to edit template' ) ;
118+ }
119+
120+ return response ;
121+ }
122+
123+ public async delete ( instance : InstanceDto , data : { name : string ; hsmId ?: string } ) {
124+ const getInstance = await this . waMonitor . waInstances [ instance . instanceName ] . instance ;
125+ if ( ! getInstance ) {
126+ throw new Error ( 'Instance not found' ) ;
127+ }
128+
129+ this . businessId = getInstance . businessId ;
130+ this . token = getInstance . token ;
131+
132+ const response = await this . requestDeleteTemplate ( { name : data . name , hsm_id : data . hsmId } ) ;
133+
134+ if ( ! response || response . error ) {
135+ if ( response && response . error ) {
136+ const metaError = new Error ( response . error . message || 'WhatsApp API Error' ) ;
137+ ( metaError as any ) . template = response . error ;
138+ throw metaError ;
139+ }
140+ throw new Error ( 'Error to delete template' ) ;
141+ }
142+
143+ try {
144+ // Best-effort local cleanup of stored template metadata
145+ await this . prismaRepository . template . deleteMany ( {
146+ where : {
147+ OR : [
148+ { name : data . name , instanceId : getInstance . id } ,
149+ data . hsmId ? { templateId : data . hsmId , instanceId : getInstance . id } : undefined ,
150+ ] . filter ( Boolean ) as any ,
151+ } ,
152+ } ) ;
153+ } catch ( err ) {
154+ this . logger . warn (
155+ `Failed to cleanup local template records after delete: ${ ( err as Error ) ?. message || String ( err ) } ` ,
156+ ) ;
157+ }
158+
159+ return response ;
160+ }
161+
91162 private async requestTemplate ( data : any , method : string ) {
92163 try {
93164 let urlServer = this . configService . get < WaBusiness > ( 'WA_BUSINESS' ) . URL ;
@@ -116,4 +187,38 @@ export class TemplateService {
116187 throw new Error ( `Connection error: ${ e . message } ` ) ;
117188 }
118189 }
190+
191+ private async requestEditTemplate ( templateId : string , data : any ) {
192+ try {
193+ let urlServer = this . configService . get < WaBusiness > ( 'WA_BUSINESS' ) . URL ;
194+ const version = this . configService . get < WaBusiness > ( 'WA_BUSINESS' ) . VERSION ;
195+ urlServer = `${ urlServer } /${ version } /${ templateId } ` ;
196+ const headers = { 'Content-Type' : 'application/json' , Authorization : `Bearer ${ this . token } ` } ;
197+ const result = await axios . post ( urlServer , data , { headers } ) ;
198+ return result . data ;
199+ } catch ( e ) {
200+ this . logger . error (
201+ 'WhatsApp API request error: ' + ( e . response ?. data ? JSON . stringify ( e . response ?. data ) : e . message ) ,
202+ ) ;
203+ if ( e . response ?. data ) return e . response . data ;
204+ throw new Error ( `Connection error: ${ e . message } ` ) ;
205+ }
206+ }
207+
208+ private async requestDeleteTemplate ( params : { name : string ; hsm_id ?: string } ) {
209+ try {
210+ let urlServer = this . configService . get < WaBusiness > ( 'WA_BUSINESS' ) . URL ;
211+ const version = this . configService . get < WaBusiness > ( 'WA_BUSINESS' ) . VERSION ;
212+ urlServer = `${ urlServer } /${ version } /${ this . businessId } /message_templates` ;
213+ const headers = { Authorization : `Bearer ${ this . token } ` } ;
214+ const result = await axios . delete ( urlServer , { headers, params } ) ;
215+ return result . data ;
216+ } catch ( e ) {
217+ this . logger . error (
218+ 'WhatsApp API request error: ' + ( e . response ?. data ? JSON . stringify ( e . response ?. data ) : e . message ) ,
219+ ) ;
220+ if ( e . response ?. data ) return e . response . data ;
221+ throw new Error ( `Connection error: ${ e . message } ` ) ;
222+ }
223+ }
119224}
0 commit comments