@@ -57,6 +57,61 @@ var Installer = function(_db, _config, _log) {
57
57
* ******************** Public Methods
58
58
* ************************************************** */
59
59
60
+ /**
61
+ * Check if the server's database has already been initialized
62
+ * with data on a previous server install.
63
+ * @param db is the mongoose database object.
64
+ * @param cb is a callback method where the results or errors are returned.
65
+ */
66
+ var isInstalled = function ( db , cb ) {
67
+ db . model ( "ServerEvent" ) . findOne ( { "what" : "install" } ) . exec ( function ( err , event ) {
68
+ if ( err ) {
69
+ return cb ( err ) ;
70
+ }
71
+
72
+ cb ( undefined , ( event ) ) ;
73
+ } ) ;
74
+ } ;
75
+
76
+ /**
77
+ * Save an install event to the server's current database. This should be
78
+ * called after a successful install.
79
+ * @param db is the mongoose database object.
80
+ * @param cb is a callback method where the results or errors are returned.
81
+ */
82
+ var saveInstallEvent = function ( db , cb ) {
83
+ var Event = db . model ( "ServerEvent" ) ;
84
+ var event = new Event ( {
85
+ "what" :"install"
86
+ } ) ;
87
+
88
+ event . save ( cb ) ;
89
+ } ;
90
+
91
+ /**
92
+ * Remove all install events from the server's current database. This should
93
+ * be called after a successful uninstall.
94
+ * @param db is the mongoose database object.
95
+ * @param cb is a callback method where the results or errors are returned.
96
+ */
97
+ var removeInstallEvents = function ( db , cb ) {
98
+ cb = ( cb ) ? cb : function ( err ) { if ( err ) { console . log ( err ) ; } } ;
99
+
100
+ db . model ( "ServerEvent" ) . find ( ) . exec ( function ( err , events ) {
101
+ if ( err ) {
102
+ return cb ( err ) ;
103
+ }
104
+
105
+ if ( events ) {
106
+ for ( var i = events . length - 1 ; i >= 0 ; -- i ) {
107
+ events [ i ] . remove ( ) ;
108
+ }
109
+ }
110
+
111
+ cb ( undefined , "Removed all saved install events." ) ;
112
+ } ) ;
113
+ } ;
114
+
60
115
/**
61
116
* Setup the server to run by adding any initalization
62
117
* data to the data store, creating files or folder, and/or
@@ -67,22 +122,39 @@ var install = function(cb) {
67
122
var db = this . db ;
68
123
var config = this . config ;
69
124
var log = this . log ;
125
+ var saveInstallEvent = this . saveInstallEvent ;
70
126
71
- async . series ( [
72
- createDirectories ( config , [ config . paths . clientAssetsImgUploadsFolder ] , log ) ,
73
- updateLanguages ( db , config , log ) ,
74
- updateCountries ( db , config , log ) ,
75
- installData ( db , config , "AndroidCategory" , "name" , undefined , undefined , log ) ,
76
- installData ( db , config , "IosCategory" , "name" , undefined , undefined , log ) ,
77
- installData ( db , config , "SdlVersion" , "version" , undefined , undefined , log ) ,
78
- installData ( db , config , "UserRole" , "name" , undefined , undefined , log ) ,
79
- installData ( db , config , "User" , "name" , undefined , { "password" : config . installKey , "securityAnswer" : config . installKey } , log ) ,
80
- generateAccessTokens ( db , config , log ) ,
81
- installData ( db , config , "Category" , "name" , undefined , undefined , log ) ,
82
- installData ( db , config , "HmiLevel" , "name" , undefined , undefined , log ) ,
83
- installData ( db , config , "Language" , "language" , "languages.js" , undefined , log ) ,
84
- installData ( db , config , "Country" , "country" , "countries.js" , undefined , log )
85
- ] , cb ) ;
127
+ this . isInstalled ( db , function ( err , isServerInstalled ) {
128
+ if ( err ) {
129
+ return cb ( err ) ;
130
+ }
131
+
132
+ if ( isServerInstalled ) {
133
+ return cb ( ) ;
134
+ }
135
+
136
+ async . series ( [
137
+ createDirectories ( config , [ config . paths . clientAssetsImgUploadsFolder ] , log ) ,
138
+ updateLanguages ( db , config , log ) ,
139
+ updateCountries ( db , config , log ) ,
140
+ installData ( db , config , "AndroidCategory" , "name" , undefined , undefined , log ) ,
141
+ installData ( db , config , "IosCategory" , "name" , undefined , undefined , log ) ,
142
+ installData ( db , config , "SdlVersion" , "version" , undefined , undefined , log ) ,
143
+ installData ( db , config , "UserRole" , "name" , undefined , undefined , log ) ,
144
+ installData ( db , config , "User" , "name" , undefined , { "password" : config . installKey , "securityAnswer" : config . installKey } , log ) ,
145
+ generateAccessTokens ( db , config , log ) ,
146
+ installData ( db , config , "Category" , "name" , undefined , undefined , log ) ,
147
+ installData ( db , config , "HmiLevel" , "name" , undefined , undefined , log ) ,
148
+ installData ( db , config , "Language" , "language" , "languages.js" , undefined , log ) ,
149
+ installData ( db , config , "Country" , "country" , "countries.js" , undefined , log )
150
+ ] , function ( err , results ) {
151
+ cb ( err , results ) ;
152
+
153
+ if ( ! err ) {
154
+ saveInstallEvent ( db ) ;
155
+ }
156
+ } ) ;
157
+ } ) ;
86
158
} ;
87
159
88
160
/**
@@ -95,19 +167,36 @@ var uninstall = function(cb) {
95
167
var db = this . db ;
96
168
var config = this . config ;
97
169
var log = this . log ;
170
+ var removeInstallEvents = this . removeInstallEvents ;
98
171
99
- async . series ( [
100
- uninstallData ( db , config , "AndroidCategory" , "name" , undefined , log ) ,
101
- uninstallData ( db , config , "IosCategory" , "name" , undefined , log ) ,
102
- uninstallData ( db , config , "SdlVersion" , "version" , undefined , log ) ,
103
- uninstallData ( db , config , "UserRole" , "name" , undefined , log ) ,
104
- removeAccessTokens ( db , config , log ) ,
105
- uninstallData ( db , config , "User" , "name" , undefined , log ) ,
106
- uninstallData ( db , config , "Category" , "name" , undefined , log ) ,
107
- uninstallData ( db , config , "HmiLevel" , "name" , undefined , log ) ,
108
- uninstallData ( db , config , "Language" , "language" , "languages.js" , log ) ,
109
- uninstallData ( db , config , "Country" , "country" , "countries.js" , log )
110
- ] , cb ) ;
172
+ this . isInstalled ( db , function ( err , isServerInstalled ) {
173
+ if ( err ) {
174
+ return cb ( err ) ;
175
+ }
176
+
177
+ if ( ! isServerInstalled ) {
178
+ return cb ( ) ;
179
+ }
180
+
181
+ async . series ( [
182
+ uninstallData ( db , config , "AndroidCategory" , "name" , undefined , log ) ,
183
+ uninstallData ( db , config , "IosCategory" , "name" , undefined , log ) ,
184
+ uninstallData ( db , config , "SdlVersion" , "version" , undefined , log ) ,
185
+ uninstallData ( db , config , "UserRole" , "name" , undefined , log ) ,
186
+ removeAccessTokens ( db , config , log ) ,
187
+ uninstallData ( db , config , "User" , "name" , undefined , log ) ,
188
+ uninstallData ( db , config , "Category" , "name" , undefined , log ) ,
189
+ uninstallData ( db , config , "HmiLevel" , "name" , undefined , log ) ,
190
+ uninstallData ( db , config , "Language" , "language" , "languages.js" , log ) ,
191
+ uninstallData ( db , config , "Country" , "country" , "countries.js" , log )
192
+ ] , function ( err , results ) {
193
+ cb ( err , results ) ;
194
+
195
+ if ( ! err ) {
196
+ removeInstallEvents ( db ) ;
197
+ }
198
+ } ) ;
199
+ } ) ;
111
200
} ;
112
201
113
202
/**
@@ -1042,6 +1131,9 @@ Installer.prototype.installDemo = installDemo;
1042
1131
Installer . prototype . uninstallDemo = uninstallDemo ;
1043
1132
Installer . prototype . purgeDemoInstall = purgeDemoInstall ;
1044
1133
1134
+ Installer . prototype . isInstalled = isInstalled ;
1135
+ Installer . prototype . saveInstallEvent = saveInstallEvent ;
1136
+ Installer . prototype . removeInstallEvents = removeInstallEvents ;
1045
1137
1046
1138
/* ************************************************** *
1047
1139
* ******************** Export the Public API
0 commit comments