@@ -78,27 +78,43 @@ const getCampaignIdByCampaignParticipationId = async function (campaignParticipa
78
78
79
79
const findSkillIds = async function ( { campaignId, filterByStatus = 'operative' } ) {
80
80
if ( filterByStatus === 'all' ) {
81
- return _findSkillIds ( { campaignId } ) ;
81
+ return _findSkillIds ( [ campaignId ] ) ;
82
82
}
83
- const skills = await this . findSkills ( { campaignId, filterByStatus } ) ;
83
+ const skills = await findSkills ( { campaignId, filterByStatus } ) ;
84
84
return skills . map ( ( { id } ) => id ) ;
85
85
} ;
86
86
87
- const findSkills = function ( { campaignId, filterByStatus } ) {
88
- return _findSkills ( { campaignId, filterByStatus } ) ;
87
+ const findSkills = async function ( { campaignId, filterByStatus } ) {
88
+ const skillIds = await _findSkillIds ( [ campaignId ] ) ;
89
+ switch ( filterByStatus ) {
90
+ case 'operative' :
91
+ return skillRepository . findOperativeByIds ( skillIds ) ;
92
+ case 'all' :
93
+ return skillRepository . findByRecordIds ( skillIds ) ;
94
+ default :
95
+ throw new TypeError ( `unknown filterByStatus value "${ filterByStatus } ", use "operative" or "all"` ) ;
96
+ }
89
97
} ;
90
98
91
99
const findSkillsByCampaignParticipationId = async function ( { campaignParticipationId } ) {
92
100
const knexConn = DomainTransaction . getConnection ( ) ;
93
101
const [ campaignId ] = await knexConn ( 'campaign-participations' )
94
102
. where ( { id : campaignParticipationId } )
95
103
. pluck ( 'campaignId' ) ;
96
- return this . findSkills ( { campaignId } ) ;
104
+ return findSkills ( { campaignId } ) ;
105
+ } ;
106
+
107
+ const findSkillIdsByCampaignParticipationIds = async function ( { campaignParticipationIds } ) {
108
+ const knexConn = DomainTransaction . getConnection ( ) ;
109
+ const campaignIds = await knexConn ( 'campaign-participations' )
110
+ . whereIn ( 'id' , campaignParticipationIds )
111
+ . pluck ( 'campaignId' ) ;
112
+ const skillIds = await _findSkillIds ( campaignIds ) ;
113
+ return [ ...new Set ( skillIds ) ] ;
97
114
} ;
98
115
99
116
const findSkillIdsByCampaignParticipationId = async function ( { campaignParticipationId } ) {
100
- const skills = await this . findSkillsByCampaignParticipationId ( { campaignParticipationId } ) ;
101
- return skills . map ( ( { id } ) => id ) ;
117
+ return findSkillIdsByCampaignParticipationIds ( { campaignParticipationIds : [ campaignParticipationId ] } ) ;
102
118
} ;
103
119
104
120
const findTubes = async function ( { campaignId } ) {
@@ -123,6 +139,7 @@ export {
123
139
findAllSkills ,
124
140
findSkillIds ,
125
141
findSkillIdsByCampaignParticipationId ,
142
+ findSkillIdsByCampaignParticipationIds ,
126
143
findSkills ,
127
144
findSkillsByCampaignParticipationId ,
128
145
findTubes ,
@@ -132,19 +149,7 @@ export {
132
149
getCampaignIdByCampaignParticipationId ,
133
150
} ;
134
151
135
- async function _findSkills ( { campaignId, filterByStatus = 'operative' } ) {
136
- const skillIds = await _findSkillIds ( { campaignId } ) ;
137
- switch ( filterByStatus ) {
138
- case 'operative' :
139
- return skillRepository . findOperativeByIds ( skillIds ) ;
140
- case 'all' :
141
- return skillRepository . findByRecordIds ( skillIds ) ;
142
- default :
143
- throw new TypeError ( `unknown filterByStatus value "${ filterByStatus } ", use "operative" or "all"` ) ;
144
- }
145
- }
146
-
147
- async function _findSkillIds ( { campaignId } ) {
152
+ async function _findSkillIds ( campaignIds ) {
148
153
const knexConn = DomainTransaction . getConnection ( ) ;
149
- return knexConn ( 'campaign_skills' ) . where ( { campaignId } ) . pluck ( 'skillId' ) ;
154
+ return knexConn ( 'campaign_skills' ) . whereIn ( ' campaignId' , campaignIds ) . pluck ( 'skillId' ) ;
150
155
}
0 commit comments