@@ -94,13 +94,20 @@ export class RoadmapModel {
9494 this . coreUnitModel = coreUnitModel ;
9595 }
9696
97+ private validateColumn ( paramName : string , allowedColumns : string [ ] ) : void {
98+ if ( ! allowedColumns . includes ( paramName ) ) {
99+ throw new Error ( `Invalid column name: ${ paramName } ` ) ;
100+ }
101+ }
102+
97103 async getRoadmaps (
98104 paramName ?: string | undefined ,
99105 paramValue ?: string | number | boolean | undefined ,
100106 ) : Promise < Roadmap [ ] > {
101107 const baseQuery = this . knex . select ( "*" ) . from ( "Roadmap" ) . orderBy ( "id" ) ;
102108 if ( paramName !== undefined && paramValue !== undefined ) {
103- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
109+ this . validateColumn ( paramName , [ 'id' , 'ownerCuId' , 'roadmapCode' , 'roadmapName' , 'comments' , 'roadmapStatus' , 'strategicInitiative' , 'roadmapSummary' ] ) ;
110+ return baseQuery . where ( paramName , paramValue ) ;
104111 } else {
105112 return baseQuery ;
106113 }
@@ -115,7 +122,8 @@ export class RoadmapModel {
115122 . from ( "RoadmapStakeholder" )
116123 . orderBy ( "id" ) ;
117124 if ( paramName !== undefined && paramValue !== undefined ) {
118- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
125+ this . validateColumn ( paramName , [ 'id' , 'stakeholderId' , 'roadmapId' , 'stakeholderRoleId' ] ) ;
126+ return baseQuery . where ( paramName , paramValue ) ;
119127 } else {
120128 return baseQuery ;
121129 }
@@ -130,7 +138,8 @@ export class RoadmapModel {
130138 . from ( "StakeholderRole" )
131139 . orderBy ( "id" ) ;
132140 if ( paramName !== undefined && paramValue !== undefined ) {
133- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
141+ this . validateColumn ( paramName , [ 'id' , 'stakeholderRoleName' ] ) ;
142+ return baseQuery . where ( paramName , paramValue ) ;
134143 } else {
135144 return baseQuery ;
136145 }
@@ -142,7 +151,8 @@ export class RoadmapModel {
142151 ) : Promise < Stakeholder [ ] > {
143152 const baseQuery = this . knex . select ( "*" ) . from ( "Stakeholder" ) . orderBy ( "id" ) ;
144153 if ( paramName !== undefined && paramValue !== undefined ) {
145- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
154+ this . validateColumn ( paramName , [ 'id' , 'name' , 'stakeholderContributorId' , 'stakeholderCuCode' ] ) ;
155+ return baseQuery . where ( paramName , paramValue ) ;
146156 } else {
147157 return baseQuery ;
148158 }
@@ -154,7 +164,8 @@ export class RoadmapModel {
154164 ) : Promise < RoadmapOutput [ ] > {
155165 const baseQuery = this . knex . select ( "*" ) . from ( "RoadmapOutput" ) . orderBy ( "id" ) ;
156166 if ( paramName !== undefined && paramValue !== undefined ) {
157- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
167+ this . validateColumn ( paramName , [ 'id' , 'outputId' , 'roadmapId' , 'outputTypeId' ] ) ;
168+ return baseQuery . where ( paramName , paramValue ) ;
158169 } else {
159170 return baseQuery ;
160171 }
@@ -166,7 +177,8 @@ export class RoadmapModel {
166177 ) : Promise < Output [ ] > {
167178 const baseQuery = this . knex . select ( "*" ) . from ( "Output" ) . orderBy ( "id" ) ;
168179 if ( paramName !== undefined && paramValue !== undefined ) {
169- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
180+ this . validateColumn ( paramName , [ 'id' , 'name' , 'outputUrl' , 'outputDate' ] ) ;
181+ return baseQuery . where ( paramName , paramValue ) ;
170182 } else {
171183 return baseQuery ;
172184 }
@@ -178,7 +190,8 @@ export class RoadmapModel {
178190 ) : Promise < OutputType [ ] > {
179191 const baseQuery = this . knex . select ( "*" ) . from ( "OutputType" ) . orderBy ( "id" ) ;
180192 if ( paramName !== undefined && paramValue !== undefined ) {
181- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
193+ this . validateColumn ( paramName , [ 'id' , 'outputType' ] ) ;
194+ return baseQuery . where ( paramName , paramValue ) ;
182195 } else {
183196 return baseQuery ;
184197 }
@@ -190,7 +203,8 @@ export class RoadmapModel {
190203 ) : Promise < Milestone [ ] > {
191204 const baseQuery = this . knex . select ( "*" ) . from ( "Milestone" ) . orderBy ( "id" ) ;
192205 if ( paramName !== undefined && paramValue !== undefined ) {
193- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
206+ this . validateColumn ( paramName , [ 'id' , 'roadmapId' , 'taskId' ] ) ;
207+ return baseQuery . where ( paramName , paramValue ) ;
194208 } else {
195209 return baseQuery ;
196210 }
@@ -202,7 +216,8 @@ export class RoadmapModel {
202216 ) : Promise < Task [ ] > {
203217 const baseQuery = this . knex . select ( "*" ) . from ( "Task" ) . orderBy ( "id" ) ;
204218 if ( paramName !== undefined && paramValue !== undefined ) {
205- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
219+ this . validateColumn ( paramName , [ 'id' , 'parentId' , 'taskName' , 'taskStatus' , 'ownerStakeholderId' , 'startDate' , 'target' , 'completedPercentage' , 'confidenceLevel' , 'comments' ] ) ;
220+ return baseQuery . where ( paramName , paramValue ) ;
206221 } else {
207222 return baseQuery ;
208223 }
@@ -214,7 +229,8 @@ export class RoadmapModel {
214229 ) : Promise < Review [ ] > {
215230 const baseQuery = this . knex . select ( "*" ) . from ( "Review" ) . orderBy ( "id" ) ;
216231 if ( paramName !== undefined && paramValue !== undefined ) {
217- return baseQuery . where ( `${ paramName } ` , paramValue ) ;
232+ this . validateColumn ( paramName , [ 'id' , 'taskId' , 'reviewDate' , 'reviewOutcome' ] ) ;
233+ return baseQuery . where ( paramName , paramValue ) ;
218234 } else {
219235 return baseQuery ;
220236 }
0 commit comments