@@ -7,6 +7,13 @@ export default class ImportPersonalize extends BaseClass {
77 private config : ImportConfig ;
88 public personalizeConfig : ImportConfig [ 'modules' ] [ 'personalize' ] ;
99
10+ private readonly moduleDisplayMapper = {
11+ events : 'Events' ,
12+ attributes : 'Attributes' ,
13+ audiences : 'Audiences' ,
14+ experiences : 'Experiences' ,
15+ } ;
16+
1017 constructor ( { importConfig, stackAPIClient } : ModuleClassParams ) {
1118 super ( { importConfig, stackAPIClient } ) ;
1219 this . config = importConfig ;
@@ -29,30 +36,23 @@ export default class ImportPersonalize extends BaseClass {
2936 }
3037
3138 const progress = this . createNestedProgress ( this . currentModuleName ) ;
32- progress . addProcess ( 'Project Import' , 1 ) ;
3339
34- if ( this . personalizeConfig . importData && modulesCount > 0 ) {
35- progress . addProcess ( 'Personalize data import' , modulesCount ) ;
36- }
40+ this . addProjectProcess ( progress ) ;
41+ this . addModuleProcesses ( progress , modulesCount ) ;
3742
3843 // Step 1: Import personalize project
39- progress . startProcess ( 'Project Import' ) . updateStatus ( 'Importing personalize project...' , 'Project Import' ) ;
40- log . info ( 'Starting personalize project import' , this . config . context ) ;
41- await this . importPersonalizeProject ( progress ) ;
42- progress . completeProcess ( 'Project Import' , true ) ;
44+ await this . importProjects ( progress ) ;
4345
4446 // Step 2: Import personalize data modules (if enabled)
4547 if ( this . personalizeConfig . importData && modulesCount > 0 ) {
46- progress
47- . startProcess ( 'Personalize data import' )
48- . updateStatus ( 'Importing personalize data modules...' , 'Personalize data import' ) ;
49- log . info ( 'Starting personalize data import' , this . config . context ) ;
50- await this . importPersonalizeData ( progress ) ;
51- progress . completeProcess ( 'Personalize data import' , true ) ;
48+ log . debug ( 'Processing personalize modules...' , this . config . context ) ;
49+ await this . importModules ( progress ) ;
50+ } else {
51+ log . debug ( 'No personalize modules configured for processing' , this . config . context ) ;
5252 }
5353
5454 this . completeProgress ( true ) ;
55- log . success ( 'Personalize import completed successfully' , this . config . context )
55+ log . success ( 'Personalize import completed successfully' , this . config . context ) ;
5656 } catch ( error ) {
5757 this . personalizeConfig . importData = false ; // Stop personalize import if project creation fails
5858 this . completeProgress ( false , ( error as any ) ?. message || 'Personalize import failed' ) ;
@@ -64,25 +64,40 @@ export default class ImportPersonalize extends BaseClass {
6464 }
6565 }
6666
67- private async importPersonalizeProject ( parentProgress : any ) : Promise < void > {
68- log . debug ( 'Starting personalize project import' , this . config . context ) ;
69- log . debug ( `Base URL: ${ this . personalizeConfig . baseURL [ this . config . region . name ] } ` , this . config . context ) ;
67+ private addProjectProcess ( progress : any ) {
68+ progress . addProcess ( 'Projects' , 1 ) ;
69+ log . debug ( 'Added Projects process to personalize progress' , this . config . context ) ;
70+ }
71+
72+ private addModuleProcesses ( progress : any , moduleCount : number ) {
73+ if ( moduleCount > 0 ) {
74+ const order : ( keyof typeof this . moduleDisplayMapper ) [ ] = this . personalizeConfig
75+ . importOrder as ( keyof typeof this . moduleDisplayMapper ) [ ] ;
7076
71- // Create project instance and set parent progress manager
72- const projectInstance = new Import . Project ( this . config ) ;
73- if ( projectInstance . setParentProgressManager ) {
74- projectInstance . setParentProgressManager ( parentProgress ) ;
77+ log . debug ( `Adding ${ order . length } personalize module processes: ${ order . join ( ', ' ) } ` , this . config . context ) ;
78+
79+ for ( const module of order ) {
80+ const processName = this . moduleDisplayMapper [ module ] ;
81+ progress . addProcess ( processName , 1 ) ;
82+ log . debug ( `Added ${ processName } process to personalize progress` , this . config . context ) ;
83+ }
84+ } else {
85+ log . debug ( 'No personalize modules to add to progress' , this . config . context ) ;
7586 }
87+ }
88+
89+ private async importProjects ( progress : any ) : Promise < void > {
90+ progress . startProcess ( 'Projects' ) . updateStatus ( 'Importing personalization projects...' , 'Projects' ) ;
91+ log . debug ( 'Starting projects import for personalization...' , this . config . context ) ;
7692
93+ const projectInstance = new Import . Project ( this . config ) ;
94+ projectInstance . setParentProgressManager ( progress ) ;
7795 await projectInstance . import ( ) ;
7896
79- parentProgress ?. tick ( true , 'personalize project' , null , 'Project Import' ) ;
80- log . debug ( 'Personalize project import completed' , this . config . context ) ;
97+ progress . completeProcess ( 'Projects' , true ) ;
8198 }
8299
83- private async importPersonalizeData ( parentProgress : any ) : Promise < void > {
84- log . debug ( 'Personalize data import is enabled' , this . config . context ) ;
85-
100+ private async importModules ( progress : any ) : Promise < void > {
86101 const moduleMapper = {
87102 events : Import . Events ,
88103 audiences : Import . Audiences ,
@@ -92,46 +107,36 @@ export default class ImportPersonalize extends BaseClass {
92107
93108 const order : ( keyof typeof moduleMapper ) [ ] = this . personalizeConfig . importOrder as ( keyof typeof moduleMapper ) [ ] ;
94109
95- log . debug ( `Processing ${ order . length } personalize modules in order: ${ order . join ( ', ' ) } ` , this . config . context ) ;
110+ log . debug ( `Personalize import order: ${ order . join ( ', ' ) } ` , this . config . context ) ;
96111
97112 for ( const module of order ) {
98- log . debug ( `Starting import for personalize module: ${ module } ` , this . config . context ) ;
99- const Module = moduleMapper [ module ] ;
100-
101- if ( ! Module ) {
102- parentProgress ?. tick (
103- false ,
104- `module: ${ module } ` ,
105- 'Module not found in moduleMapper' ,
106- 'Personalize data import' ,
107- ) ;
108- log . debug ( `Module ${ module } not found in moduleMapper` , this . config . context ) ;
109- continue ;
110- }
111-
112- try {
113- log . debug ( `Creating instance of ${ module } module` , this . config . context ) ;
114- const moduleInstance = new Module ( this . config ) ;
115-
116- // Set parent progress manager for sub-module
117- if ( moduleInstance . setParentProgressManager ) {
118- moduleInstance . setParentProgressManager ( parentProgress ) ;
113+ log . debug ( `Processing personalize module: ${ module } ` , this . config . context ) ;
114+ const processName = this . moduleDisplayMapper [ module ] ;
115+ const ModuleClass = moduleMapper [ module ] ;
116+
117+ if ( ModuleClass ) {
118+ progress . startProcess ( processName ) . updateStatus ( `Importing ${ module } ...` , processName ) ;
119+ log . debug ( `Starting import for module: ${ module } ` , this . config . context ) ;
120+
121+ if ( this . personalizeConfig . importData ) {
122+ const importer = new ModuleClass ( this . config ) ;
123+ importer . setParentProgressManager ( progress ) ;
124+ await importer . import ( ) ;
125+
126+ progress . completeProcess ( processName , true ) ;
127+ log . debug ( `Completed import for module: ${ module } ` , this . config . context ) ;
128+ } else {
129+ log . debug ( `Skipping ${ module } - personalization not enabled` , this . config . context ) ;
130+ this . progressManager ?. tick ( true , `${ module } skipped (no project)` , null , processName ) ;
131+ progress . completeProcess ( processName , true ) ;
132+ log . info ( `Skipped ${ module } import - no personalize project found` , this . config . context ) ;
119133 }
120-
121- log . debug ( `Importing ${ module } module` , this . config . context ) ;
122- await moduleInstance . import ( ) ;
123-
124- parentProgress ?. tick ( true , `module: ${ module } ` , null , 'Personalize data import' ) ;
125- log . success ( `Successfully imported personalize module: ${ module } ` , this . config . context ) ;
126- } catch ( error ) {
127- parentProgress ?. tick (
128- false ,
129- `module: ${ module } ` ,
130- ( error as any ) ?. message || 'Import failed' ,
131- 'Personalize data import' ,
132- ) ;
133- log . debug ( `Failed to import personalize module: ${ module } - ${ ( error as any ) ?. message } ` , this . config . context ) ;
134- handleAndLogError ( error , { ...this . config . context , module } ) ;
134+ } else {
135+ log . debug ( `Module not implemented: ${ module } ` , this . config . context ) ;
136+ progress . startProcess ( processName ) . updateStatus ( `Module not implemented: ${ module } ` , processName ) ;
137+ this . progressManager ?. tick ( false , `module: ${ module } ` , 'Module not implemented' , processName ) ;
138+ progress . completeProcess ( processName , false ) ;
139+ log . info ( `Module not implemented: ${ module } ` , this . config . context ) ;
135140 }
136141 }
137142
0 commit comments