@@ -1207,44 +1207,47 @@ export default class PostgresFapDataSource implements FapDataSource {
12071207 }
12081208
12091209 async getRelatedUsersOnFap ( id : number ) : Promise < number [ ] > {
1210- const relatedFapMembers = await database
1211- . select ( 'fr.user_id ' )
1210+ const relatedFaps = await database
1211+ . select ( 'f.fap_id ' )
12121212 . distinct ( )
1213- . from ( 'faps as s' )
1214- . leftJoin ( 'fap_secretaries as fs' , 'fs.fap_id' , 's.fap_id' )
1215- . leftJoin ( 'fap_chairs as fc' , 'fc.fap_id' , 's.fap_id' )
1216- . leftJoin ( 'fap_reviewers as r' , function ( ) {
1217- this . on ( 's.fap_id' , 'r.fap_id' ) ;
1218- this . andOn ( function ( ) {
1219- this . onVal ( 'r.user_id' , id ) ; // where the user is part of the visit
1220- this . orOnVal ( 'fc.user_id' , id ) ; // where the user is a chair
1221- this . orOnVal ( 'fs.user_id' , id ) ; // where the user is the secretary
1222- } ) ;
1223- } ) // this gives a list of proposals that a user is related to
1224- . join ( 'fap_reviewers as fr' , { 'fr.fap_id' : 's.fap_id' } ) ; // this gives us all of the associated reviewers
1213+ . from ( 'faps as f' )
1214+ . leftJoin ( 'fap_secretaries as fs' , 'fs.fap_id' , 'f.fap_id' )
1215+ . leftJoin ( 'fap_chairs as fc' , 'fc.fap_id' , 'f.fap_id' )
1216+ . leftJoin ( 'fap_reviewers as fr' , 'fr.fap_id' , 'f.fap_id' )
1217+ . where ( function ( ) {
1218+ this . where ( 'fs.user_id' , id )
1219+ . orWhere ( 'fc.user_id' , id )
1220+ . orWhere ( 'fr.user_id' , id ) ;
1221+ } ) ;
12251222
1226- const relatedFapChairsAndSecs = await database
1227- . select (
1228- 'fc.user_id as fap_chair_user_id' ,
1229- 'fs.user_id as fap_secretary_user_id'
1230- )
1223+ if ( relatedFaps . length === 0 ) {
1224+ return [ ] ;
1225+ }
1226+
1227+ const relatedFapIds = relatedFaps . map ( ( fap ) => fap . fap_id ) ;
1228+
1229+ const secretaries = await database
1230+ . select ( 'user_id' )
12311231 . distinct ( )
1232- . from ( 'faps as s' )
1233- . leftJoin ( 'fap_secretaries as fs' , 'fs.fap_id' , 's.fap_id' )
1234- . leftJoin ( 'fap_chairs as fc' , 'fc.fap_id' , 's.fap_id' )
1235- . leftJoin ( 'fap_reviewers as r' , function ( ) {
1236- this . on ( 's.fap_id' , 'r.fap_id' ) ;
1237- this . andOn ( function ( ) {
1238- this . onVal ( 'r.user_id' , id ) ; // where the user is part of the visit
1239- this . orOnVal ( 'fc.user_id' , id ) ; // where the user is a chair
1240- this . orOnVal ( 'fs.user_id' , id ) ; // where the user is the secretary
1241- } ) ;
1242- } ) ;
1232+ . from ( 'fap_secretaries' )
1233+ . whereIn ( 'fap_id' , relatedFapIds ) ;
1234+
1235+ const chairs = await database
1236+ . select ( 'user_id' )
1237+ . distinct ( )
1238+ . from ( 'fap_chairs' )
1239+ . whereIn ( 'fap_id' , relatedFapIds ) ;
1240+
1241+ const reviewers = await database
1242+ . select ( 'user_id' )
1243+ . distinct ( )
1244+ . from ( 'fap_reviewers' )
1245+ . whereIn ( 'fap_id' , relatedFapIds ) ;
12431246
12441247 const relatedUsers = [
1245- ...relatedFapMembers . map ( ( r ) => r . user_id ) ,
1246- ...relatedFapChairsAndSecs . map ( ( r ) => r . fap_chair_user_id ) ,
1247- ...relatedFapChairsAndSecs . map ( ( r ) => r . fap_secretary_user_id ) ,
1248+ ...chairs . map ( ( r ) => r . user_id ) ,
1249+ ...secretaries . map ( ( r ) => r . user_id ) ,
1250+ ...reviewers . map ( ( r ) => r . user_id ) ,
12481251 ] ;
12491252
12501253 return relatedUsers ;
0 commit comments