@@ -6,6 +6,7 @@ import config from 'config';
66import Promise from 'bluebird' ;
77import models from '../src/models' ;
88import RabbitMQService from '../src/services/rabbitmq' ;
9+ import { TIMELINE_REFERENCES } from '../src/constants' ;
910
1011const logger = bunyan . createLogger ( { name : 'init-es' , level : config . get ( 'logLevel' ) } ) ;
1112
@@ -23,6 +24,19 @@ function getProjectIds() {
2324 return [ ] ;
2425}
2526
27+ /**
28+ * Retrieve timeline ids from cli if provided
29+ * @return {Array } list of timelineIds
30+ */
31+ function getTimelineIds ( ) {
32+ let timelineIdArg = _ . find ( process . argv , a => a . indexOf ( 'timelineIds' ) > - 1 ) ;
33+ if ( timelineIdArg ) {
34+ timelineIdArg = timelineIdArg . split ( '=' ) ;
35+ return timelineIdArg [ 1 ] . split ( ',' ) . map ( i => parseInt ( i , 10 ) ) ;
36+ }
37+ return [ ] ;
38+ }
39+
2640Promise . coroutine ( function * wrapped ( ) {
2741 try {
2842 const rabbit = new RabbitMQService ( logger ) ;
@@ -58,12 +72,48 @@ Promise.coroutine(function* wrapped() {
5872 logger . info ( `Retrieved #${ members . length } members` ) ;
5973 members = _ . groupBy ( members , 'projectId' ) ;
6074
75+ // Get timelines
76+ const timelineIds = getTimelineIds ( ) ;
77+ const timelineWhereClause = ( timelineIds . length > 0 ) ? { id : { $in : timelineIds } } : { } ;
78+ let timelines = yield models . Timeline . findAll ( {
79+ where : timelineWhereClause ,
80+ include : [ { model : models . Milestone , as : 'milestones' } ] ,
81+ } ) ;
82+ logger . info ( `Retrieved #${ projects . length } timelines` ) ;
83+
84+ // Convert to raw json and remove unnecessary fields
85+ timelines = _ . map ( timelines , ( timeline ) => {
86+ const entity = _ . omit ( timeline . toJSON ( ) , [ 'deletedBy' , 'deletedAt' ] ) ;
87+ entity . milestones = _ . map ( entity . milestones , milestone => _ . omit ( milestone , [ 'deletedBy' , 'deletedAt' ] ) ) ;
88+ return entity ;
89+ } ) ;
90+
91+ // Get projectId for each timeline
92+ yield Promise . all (
93+ _ . map ( timelines , ( timeline ) => {
94+ if ( timeline . reference === TIMELINE_REFERENCES . PROJECT ) {
95+ timeline . projectId = timeline . referenceId ;
96+ return Promise . resolve ( timeline ) ;
97+ }
98+
99+ return models . ProjectPhase . findById ( timeline . referenceId )
100+ . then ( ( phase ) => {
101+ timeline . projectId = phase . projectId ;
102+ return Promise . resolve ( timeline ) ;
103+ } ) ;
104+ } ) ,
105+ ) ;
106+
61107 const promises = [ ] ;
62108 _ . forEach ( projects , ( p ) => {
63109 p . members = members [ p . id ] ;
64110 logger . debug ( `Processing Project #${ p . id } ` ) ;
65111 promises . push ( rabbit . publish ( 'project.initial' , p , { } ) ) ;
66112 } ) ;
113+ _ . forEach ( timelines , ( t ) => {
114+ logger . debug ( `Processing Timeline #${ t . id } ` ) ;
115+ promises . push ( rabbit . publish ( 'timeline.initial' , t , { } ) ) ;
116+ } ) ;
67117 Promise . all ( promises )
68118 . then ( ( ) => {
69119 logger . info ( `Published ${ promises . length } msgs` ) ;
0 commit comments