1515
1616const AbstractServiceSynchronizer = require ( './AbstractServiceSynchronizer.js' ) ;
1717const Utils = require ( '../utils' ) ;
18- const { ServicesEndpointsFormatter } = require ( './helpers' ) ;
18+ const { ServicesEndpointsFormatter, ServicesDataCommons : { PERIOD_NAME_REGEX } } = require ( './helpers' ) ;
19+ const { findOrCreatePeriod } = require ( '../services/periods/findOrUpdateOrCreatePeriod.js' ) ;
1920
2021const { databaseManager : {
2122 repositories : {
2223 RunRepository,
23- PeriodRepository,
2424 } ,
25- sequelize,
2625} } = require ( '../database/DatabaseManager.js' ) ;
26+ const { extractPeriod } = require ( './helpers/ServicesDataCommons.js' ) ;
2727
2828class MonalisaServiceDetails extends AbstractServiceSynchronizer {
2929 constructor ( ) {
@@ -32,7 +32,7 @@ class MonalisaServiceDetails extends AbstractServiceSynchronizer {
3232
3333 this . ketpFields = {
3434 run_no : 'runNumber' ,
35- raw_partition : 'period ' ,
35+ raw_partition : 'periodName ' ,
3636 } ;
3737 }
3838
@@ -52,59 +52,74 @@ class MonalisaServiceDetails extends AbstractServiceSynchronizer {
5252 }
5353
5454 adjustDataUnit ( dataPassDetails ) {
55- return Utils . filterObject ( dataPassDetails , this . ketpFields ) ;
55+ dataPassDetails = Utils . filterObject ( dataPassDetails , this . ketpFields ) ;
56+ const { periodName } = dataPassDetails ;
57+ dataPassDetails . period = PERIOD_NAME_REGEX . test ( periodName ) ? extractPeriod ( periodName ) : undefined ;
58+ return dataPassDetails ;
5659 }
5760
5861 isDataUnitValid ( ) {
5962 return true ;
6063 }
6164
6265 async executeDbAction ( dataPassDetails , forUrlMetaStore ) {
63- const { parentDataUnit : dataPass } = forUrlMetaStore ;
64- return ( async ( ) => {
65- if ( / L H C [ 0 - 9 ] { 2 } [ a - z ] + / . test ( dataPassDetails . period ) ) {
66- return await PeriodRepository . T . findOrCreate ( {
67- where : {
68- name : dataPassDetails . period ,
69- } ,
70- } ) ;
66+ const { parentDataUnit : dbDataPass } = forUrlMetaStore ;
67+
68+ const getPresumedPeriod = async ( ) => {
69+ if ( dataPassDetails . period ) {
70+ return await findOrCreatePeriod ( dataPassDetails . period ) ;
7171 } else {
72- // eslint-disable-next-line max-len
73- this . logger . warn ( `Incorrect period from monalisa ${ dataPassDetails . period } for run ${ dataPassDetails . runNumber } in data pass ${ dataPass . name } `) ;
72+ this . logger . warn ( `Incorrect period name from monalisa ${ dataPassDetails . periodName }
73+ for run ${ dataPassDetails . runNumber } in details of data pass ${ dbDataPass . name } ` ) ;
7474 return [ undefined , undefined ] ;
7575 }
76- } ) ( )
77- . then ( async ( [ period , _ ] ) => {
78- dataPassDetails . PeriodId = period ?. id ;
79- return await RunRepository . T . findOrCreate ( {
80- where : {
81- runNumber : dataPassDetails . runNumber ,
82- } ,
83- defualt : {
84- runNumber : dataPassDetails . runNumber ,
85- PeriodId : dataPassDetails . PeriodId ,
86- } ,
87- } ) ;
76+ } ;
77+
78+ const findOrCreateRun = async ( [ dbPeriod , _ ] ) => {
79+ dataPassDetails . PeriodId = dbPeriod ?. id ;
80+ return await RunRepository . findOrCreate ( {
81+ where : {
82+ runNumber : dataPassDetails . runNumber ,
83+ } ,
84+ defualt : {
85+ runNumber : dataPassDetails . runNumber ,
86+ PeriodId : dataPassDetails . PeriodId ,
87+ } ,
8888 } )
89- . catch ( async ( e ) => {
90- throw new Error ( 'Find or create run failed' , {
91- cause : {
92- error : e . message ,
93- meta : {
94- actualValueInDB : await RunRepository . findOne ( { where : { runNumber : dataPassDetails . runNumber } } , { raw : true } ) ,
95- inQueryValues : {
96- runNumber : dataPassDetails . runNumber ,
97- PeriodId : dataPassDetails . PeriodId ,
89+ . catch ( async ( e ) => {
90+ throw new Error ( 'Find or create run failed' , {
91+ cause : {
92+ error : {
93+ error : e . message ,
94+ cause : e . cause ,
9895 } ,
99- sourceValues : {
100- runNumber : dataPassDetails . runNumber ,
101- periodName : dataPassDetails . period ,
96+ meta : {
97+ actualValueInDB : await RunRepository . findOne (
98+ { where : { runNumber : dataPassDetails . runNumber } } ,
99+ { raw : true } ,
100+ ) . catch ( ( error ) => `ERROR RETRIVING ADDITIONAL INFO FROM DB: ${ error . message } ` ) ,
101+
102+ inQueryValues : {
103+ runNumber : dataPassDetails . runNumber ,
104+ PeriodId : dataPassDetails . PeriodId ,
105+ } ,
106+ sourceValues : {
107+ runNumber : dataPassDetails . runNumber ,
108+ periodName : dataPassDetails . period ,
109+ } ,
102110 } ,
103111 } ,
104- } ,
112+ } ) ;
105113 } ) ;
106- } )
107- . then ( async ( [ run , _ ] ) => await sequelize . transaction ( ( ) => run . addDataPasses ( dataPass . id , { ignoreDuplicates : true } ) ) ) ;
114+ } ;
115+
116+ const addRunToDataPass = async ( [ dbRun , _ ] ) => await dbRun . addDataPasses ( dbDataPass . id , { ignoreDuplicates : true } ) ;
117+
118+ const pipeline = async ( ) => await getPresumedPeriod ( )
119+ . then ( findOrCreateRun )
120+ . then ( addRunToDataPass ) ;
121+
122+ return await pipeline ( ) ;
108123 }
109124}
110125
0 commit comments