@@ -15,6 +15,7 @@ export async function GetIdsColliding(
1515 dataProvider : DataProvider ,
1616 csvValues : any [ ] ,
1717 resourceName : string ,
18+ disableGetMany : boolean | undefined ,
1819) : Promise < Identifier [ ] > {
1920 const logger = makeLogger ( logging ) ;
2021 const hasIds = csvValues . some ( ( v ) => v . id ) ;
@@ -23,13 +24,65 @@ export async function GetIdsColliding(
2324 }
2425 try {
2526 const csvIds : Identifier [ ] = csvValues . filter ( v => ! ! v . id ) . map ( ( v ) => v . id ) ;
27+ const recordsIdsColliding = await ( disableGetMany
28+ ? GetIdsCollidingGetSingle ( logging , translate , dataProvider , csvIds , resourceName )
29+ : GetIdsCollidingGetMany ( logging , translate , dataProvider , csvIds , resourceName )
30+ ) ;
31+ return recordsIdsColliding ;
32+ } catch ( error ) {
33+ logger . error ( "GetIdsColliding" , { csvValues } , error ) ;
34+ throw translate ( "csv.parsing.collidingIds" ) ;
35+ }
36+ }
37+
38+ export async function GetIdsCollidingGetSingle (
39+ logging : boolean ,
40+ translate : Translate ,
41+ dataProvider : DataProvider ,
42+ csvIds : Identifier [ ] ,
43+ resourceName : string ,
44+ ) : Promise < Identifier [ ] > {
45+ const logger = makeLogger ( logging ) ;
46+ try {
47+ const recordsColliding = await Promise . all ( csvIds . map ( id => IsIdColliding (
48+ dataProvider ,
49+ id ,
50+ resourceName ,
51+ ) ) ) ;
52+ const recordIdsColliding = recordsColliding . filter ( Boolean ) as Identifier [ ] ;
53+ return recordIdsColliding ;
54+ } catch ( error ) {
55+ logger . error ( "GetIdsCollidingGetSingle" , { csvIds } , error ) ;
56+ throw translate ( "csv.parsing.collidingIds" ) ;
57+ }
58+ }
59+
60+ export async function IsIdColliding (
61+ dataProvider : DataProvider ,
62+ id : Identifier ,
63+ resourceName : string ,
64+ ) {
65+ return dataProvider . getOne ( resourceName , { id} )
66+ . then ( _ => undefined )
67+ . catch ( _ => id ) ;
68+ }
69+
70+ export async function GetIdsCollidingGetMany (
71+ logging : boolean ,
72+ translate : Translate ,
73+ dataProvider : DataProvider ,
74+ csvIds : Identifier [ ] ,
75+ resourceName : string ,
76+ ) : Promise < Identifier [ ] > {
77+ const logger = makeLogger ( logging ) ;
78+ try {
2679 const recordsColliding = await dataProvider . getMany ( resourceName , {
2780 ids : csvIds ,
2881 } ) ;
2982 const recordIdsColliding = recordsColliding . data . map ( ( r ) => r . id ) ;
3083 return recordIdsColliding ;
3184 } catch ( error ) {
32- logger . error ( "GetIdsColliding " , { csvValues } , error ) ;
85+ logger . error ( "GetIdsCollidingGetMany " , { csvIds } , error ) ;
3386 throw translate ( "csv.parsing.collidingIds" ) ;
3487 }
3588}
0 commit comments