@@ -51,6 +51,7 @@ class GetAllRunsUseCase {
5151 epn,
5252 fillNumbers,
5353 lhcPeriods,
54+ lhcPeriodIds,
5455 dataPassIds,
5556 simulationPassIds,
5657 nDetectors,
@@ -340,6 +341,19 @@ class GetAllRunsUseCase {
340341 } ) ;
341342 }
342343
344+ if ( lhcPeriodIds ) {
345+ const runNumbers = ( await RunRepository . findAll ( {
346+ attributes : [ 'runNumber' ] ,
347+ raw : true ,
348+ include : {
349+ association : 'lhcPeriod' ,
350+ attributes : [ ] ,
351+ where : { id : { [ Op . in ] : lhcPeriodIds } } ,
352+ } ,
353+ } ) ) . map ( ( { runNumber } ) => runNumber ) ;
354+ filteringQueryBuilder . where ( 'runNumber' ) . oneOf ( ...runNumbers ) ;
355+ }
356+
343357 if ( dataPassIds ) {
344358 const runNumbers = ( await RunRepository . findAll ( {
345359 attributes : [ 'runNumber' ] ,
@@ -460,6 +474,71 @@ class GetAllRunsUseCase {
460474 fetchQueryBuilder . orderBy ( property , sort [ property ] ) ;
461475 }
462476
477+ if ( filter ?. include ?. effectiveQcFlags ) {
478+ const [ dataPassId ] = filter ?. dataPassIds ?? [ ] ;
479+ const [ simulationPassId ] = filter ?. simulationPassIds ?? [ ] ;
480+ const [ lhcPeriodId ] = filter ?. lhcPeriodIds ?? [ ] ;
481+
482+ if ( Boolean ( dataPassId ) + Boolean ( simulationPassId ) + Boolean ( lhcPeriodId ) > 1 ) {
483+ throw new BadParameterError ( 'If including QC flags, one and exactly one'
484+ + 'of `dataPassId`, `simulationPassId` and `lhcPeriodId` is required' ) ;
485+ }
486+
487+ if ( dataPassId ) {
488+ fetchQueryBuilder . include ( {
489+ association : 'qcFlags' ,
490+ required : false ,
491+ include : [
492+ {
493+ association : 'dataPasses' ,
494+ required : true ,
495+ where : { id : dataPassId } ,
496+ } ,
497+ {
498+ association : 'effectivePeriods' ,
499+ required : true ,
500+ } ,
501+ ] ,
502+ } ) ;
503+ } else if ( simulationPassId ) {
504+ fetchQueryBuilder . include ( {
505+ association : 'qcFlags' ,
506+ required : false ,
507+ include : [
508+ {
509+ association : 'simulationPasses' ,
510+ required : true ,
511+ where : { id : simulationPassId } ,
512+ } ,
513+ {
514+ association : 'effectivePeriods' ,
515+ required : true ,
516+ } ,
517+ ] ,
518+ } ) ;
519+ } else {
520+ fetchQueryBuilder . include ( {
521+ association : 'qcFlags' ,
522+ required : false ,
523+ include : [
524+ {
525+ association : 'simulationPasses' ,
526+ required : false ,
527+ } ,
528+ {
529+ association : 'dataPasses' ,
530+ required : false ,
531+ } ,
532+ {
533+ association : 'effectivePeriods' ,
534+ required : true ,
535+ } ,
536+ ] ,
537+ } ) . where ( '$qcFlags.dataPasses.id$' ) . is ( null )
538+ . where ( '$qcFlags.simulationPasses.id$' ) . is ( null ) ;
539+ }
540+ }
541+
463542 const runs = ( await RunRepository . findAll ( fetchQueryBuilder ) ) . map ( runAdapter . toEntity ) ;
464543
465544 return { count, runs } ;
0 commit comments