@@ -134,6 +134,23 @@ export abstract class CommandBase {
134134 return 'There are no projects registered.' ;
135135 }
136136 }
137+ /**
138+ * Returns the default queue or the queue identified for the given initiative context.
139+ *
140+ * @param initiative - This is the initiative for which to get the named queue.
141+ * @param project - This is the project for which to get the queue on.
142+ * @todo Throw errors instead of returning error string.
143+ * @returns Queue model or error string for the given initiative context.
144+ */
145+ public static async getQueue ( initiative : IInitiative , project : IProject ) : Promise < IQueue | string > {
146+ const queueName = initiative . data . queue ?. toUpperCase ( ) || project . currentQueue ;
147+ const queueObject = project . queues . filter ( i => i . name === queueName ) ;
148+ if ( queueObject . length > 0 ) {
149+ return queueObject [ 0 ] ;
150+ } else {
151+ return `A queue with name "${ initiative . data . queue ?. toUpperCase ( ) } " does not exist.` ;
152+ }
153+ }
137154
138155 /**
139156 * Adds the invoking user to the database.
@@ -179,28 +196,25 @@ export abstract class CommandBase {
179196 *
180197 * @access public
181198 * @static
182- * @param queues - A list of all queues to search through.
183199 * @param queue - The name of the queue to which to add the user.
184200 * @param user - The user to add to the queue.
185201 * @returns The queue that was updated.
186202 */
187- public static addToQueue ( queues : IQueue [ ] , queue : string , user : IPerson ) : IQueue {
188- LOGGER . verbose ( `Queue Name: ${ queue } ` ) ;
189- LOGGER . verbose ( `Queues: ${ queues } ` ) ;
190- const queueObject = queues . filter ( i => i . name === queue . toUpperCase ( ) ) [ 0 ] ;
203+ public static addToQueue ( queue : IQueue , user : IPerson ) : IQueue {
204+ LOGGER . verbose ( `Queue Name: ${ queue . name } ` ) ;
191205 const now = new Date ( ) ;
192- const atHeadTime = queueObject . members . length === 0 ? now : null ;
193- queueObject . members . push ( {
206+ const atHeadTime = queue . members . length === 0 ? now : null ;
207+ queue . members . push ( {
194208 person : user ,
195209 enqueuedAt : now ,
196210 atHeadTime : atHeadTime
197211 } ) ;
198- queueObject . history . push ( {
199- name : queueObject . name ,
200- members : queueObject . members ,
212+ queue . history . push ( {
213+ name : queue . name ,
214+ members : queue . members ,
201215 time : new Date ( )
202216 } ) ;
203- return queueObject ;
217+ return queue ;
204218 }
205219
206220 /**
@@ -232,31 +246,29 @@ export abstract class CommandBase {
232246 * @access public
233247 * @static
234248 * @async
235- * @param queues - A list of all queues to search through.
236249 * @param queue - The name of the queue to which to remove the user.
237250 * @param user - The user to remove from the queue.
238251 * @param user.id - The user ID for the user to remove from the queue.
239252 * @param user.displayName - The display name for the user to remove from the queue.
240253 * @returns The queue that was updated.
241254 */
242- public static async removeFromQueue ( queues : IQueue [ ] , queue : string , user : IRemoveFromQueueUser ) : Promise < IQueue | string > {
243- const queueObject = queues . filter ( i => i . name === queue ) [ 0 ] ;
244- const idx = queueObject . members . findIndex ( p => p . person . displayName === user . displayName ) ;
255+ public static async removeFromQueue ( queue : IQueue , user : IRemoveFromQueueUser ) : Promise < IQueue | string > {
256+ const idx = queue . members . findIndex ( p => p . person . displayName === user . displayName ) ;
245257 if ( idx === - 1 ) {
246- return `User "${ user . displayName } " was not found in queue "${ queueObject . name } "` ;
258+ return `User "${ user . displayName } " was not found in queue "${ queue . name } "` ;
247259 } else {
248- const removed = queueObject . members . splice ( idx , 1 ) [ 0 ] ;
249- queueObject . history . push ( {
250- name : queueObject . name ,
251- members : queueObject . members ,
260+ const removed = queue . members . splice ( idx , 1 ) [ 0 ] ;
261+ queue . history . push ( {
262+ name : queue . name ,
263+ members : queue . members ,
252264 time : new Date ( )
253265 } ) ;
254266 const now = new Date ( ) . getTime ( ) ;
255267
256268 // If we removed the person at the head of the queue and
257269 // there are more people in the queue
258- if ( queueObject . members . length > 0 && idx === 0 ) {
259- const head = queueObject . members [ 0 ] ;
270+ if ( queue . members . length > 0 && idx === 0 ) {
271+ const head = queue . members [ 0 ] ;
260272 head . atHeadTime = new Date ( ) ;
261273 }
262274 // Update person object
@@ -283,7 +295,7 @@ export abstract class CommandBase {
283295 LOGGER . verbose ( await PERSON_MODEL . find ( { id : removed . person . id } ) . exec ( ) ) ;
284296
285297 await PERSON_MODEL . updateOne ( { id : removed . person . id } , updateData ) . exec ( ) ;
286- return queueObject ;
298+ return queue ;
287299 }
288300 }
289301
0 commit comments