@@ -33,6 +33,13 @@ interface EnrichmentRefreshPayload extends Record<string, unknown> {
3333 provider : string
3434 externalId : string
3535 locale : string
36+ url ?: string
37+ }
38+
39+ interface EnrichmentRefInput {
40+ provider : string
41+ externalId : string
42+ url ?: string
3643}
3744
3845/**
@@ -64,8 +71,11 @@ export class EnrichmentService implements OnModuleInit {
6471 type : ENRICHMENT_REFRESH_TASK_TYPE ,
6572 execute : async ( payload : EnrichmentRefreshPayload ) => {
6673 const locale = payload . locale ?? ''
74+ const url = typeof payload . url === 'string' ? payload . url : undefined
6775 try {
68- await this . refresh ( payload . provider , payload . externalId , locale )
76+ await this . refresh ( payload . provider , payload . externalId , locale , {
77+ url,
78+ } )
6979 } catch ( error ) {
7080 // Record per-row failure so backoff kicks in on subsequent SWR
7181 // resolves; re-throw so the task queue marks the task failed.
@@ -217,6 +227,7 @@ export class EnrichmentService implements OnModuleInit {
217227 providerName : string ,
218228 id : string ,
219229 lang ?: string ,
230+ opts ?: { url ?: string } ,
220231 ) : Promise < EnrichmentResult > {
221232 const provider = this . providerRegistry . getByName ( providerName )
222233 if ( ! provider ) throw new Error ( `Unknown provider: ${ providerName } ` )
@@ -226,6 +237,7 @@ export class EnrichmentService implements OnModuleInit {
226237
227238 const result = await this . fetchAndPersist ( provider , id , {
228239 locale : cacheLocale ,
240+ url : opts ?. url ,
229241 } )
230242 await this . deleteFromRedis ( result . url , cacheLocale )
231243 return result
@@ -294,7 +306,7 @@ export class EnrichmentService implements OnModuleInit {
294306 * should index via the same helper.
295307 */
296308 async hydrateRefs (
297- refs : ReadonlyArray < { provider : string ; externalId : string } > ,
309+ refs : ReadonlyArray < EnrichmentRefInput > ,
298310 lang ?: string ,
299311 ) : Promise < Record < string , EnrichmentResult > > {
300312 if ( refs . length === 0 ) return { }
@@ -304,6 +316,7 @@ export class EnrichmentService implements OnModuleInit {
304316 provider : string
305317 externalId : string
306318 locale : string
319+ url ?: string
307320 }
308321 const byKey = new Map < string , RefEntry > ( )
309322 for ( const r of refs ) {
@@ -312,17 +325,28 @@ export class EnrichmentService implements OnModuleInit {
312325 ? this . resolveCacheLocale ( provider , reqLocale )
313326 : ''
314327 const key = `${ r . provider } \t${ r . externalId } \t${ locale } `
315- if ( byKey . has ( key ) ) continue
328+ const existing = byKey . get ( key )
329+ if ( existing ) {
330+ if ( ! existing . url && r . url ) existing . url = r . url
331+ continue
332+ }
316333 byKey . set ( key , {
317334 provider : r . provider ,
318335 externalId : r . externalId ,
319336 locale,
337+ url : r . url ,
320338 } )
321339 }
322340 if ( byKey . size === 0 ) return { }
323341
324342 const refQueries = [ ...byKey . values ( ) ]
325- const rows = await this . repository . findManyByRefs ( refQueries )
343+ const rows = await this . repository . findManyByRefs (
344+ refQueries . map ( ( { provider, externalId, locale } ) => ( {
345+ provider,
346+ externalId,
347+ locale,
348+ } ) ) ,
349+ )
326350 const now = new Date ( )
327351 const out : Record < string , EnrichmentResult > = { }
328352 const seenKeys = new Set < string > ( )
@@ -361,12 +385,18 @@ export class EnrichmentService implements OnModuleInit {
361385 if ( ! provider ) continue
362386 config ??= await this . configsService . get ( 'thirdPartyServiceIntegration' )
363387 if ( ! this . isProviderReady ( provider , config ) ) continue
388+ if ( provider . requiresUrlContext && ! entry . url ) continue
364389 const k = refKey ( entry . provider , entry . externalId )
365390 if ( entry . locale !== '' && ! out [ k ] ) {
366391 const fb = fallbackByKey . get ( k )
367392 if ( fb ) out [ k ] = fb
368393 }
369- this . enqueueRefresh ( entry . provider , entry . externalId , entry . locale )
394+ this . enqueueRefresh (
395+ entry . provider ,
396+ entry . externalId ,
397+ entry . locale ,
398+ entry . url ,
399+ )
370400 }
371401 }
372402 return out
@@ -400,6 +430,7 @@ export class EnrichmentService implements OnModuleInit {
400430 urlRefs . map ( ( r ) => ( {
401431 provider : r . provider ,
402432 externalId : r . externalId ,
433+ url : r . url ,
403434 } ) ) ,
404435 lang ,
405436 )
@@ -604,6 +635,7 @@ export class EnrichmentService implements OnModuleInit {
604635 providerName : string ,
605636 externalId : string ,
606637 locale : string ,
638+ url ?: string ,
607639 ) : void {
608640 const dedupKey = locale
609641 ? `${ providerName } :${ externalId } :${ locale } `
@@ -617,6 +649,7 @@ export class EnrichmentService implements OnModuleInit {
617649 provider : providerName ,
618650 externalId,
619651 locale,
652+ ...( url ? { url } : { } ) ,
620653 } satisfies EnrichmentRefreshPayload ,
621654 } )
622655 . catch ( ( error ) => {
0 commit comments