Advertisement
Guest User

Untitled

a guest
May 18th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.49 KB | None | 0 0
  1. (function () {
  2. var exec = require('child_process').execSync,
  3. ENV = process.env.npm_lifecycle_event,
  4. configs = require(`${__dirname}\\AutomacaoPsake.Api\\appsettings.json`),
  5. homeDir = process.env.HOME || process.env.USERPROFILE,
  6. fs = require('fs'),
  7. path = require('path');
  8.  
  9.  
  10. var dataBaseObj = {
  11. connectionString: function () {
  12. return configs.Data.DefaultConnection.Connectionstring;
  13. },
  14.  
  15. connection: function () {
  16. var result = {};
  17.  
  18. configs.Data.DefaultConnection.Connectionstring.split(';').forEach(function (x) {
  19. var arr = x.split("=");
  20. arr[1] && (result[arr[0]] = arr[1]);
  21. });
  22. return result;
  23. },
  24.  
  25. dataBase: function () {
  26. var connection = this.connection();
  27. var database = connection.Database || connection.database || connection['Initial Catalog'];
  28. return database;
  29. },
  30.  
  31. server: function () {
  32. var connection = this.connection();
  33. var server = connection.Server || connection.server || connection['Data Source'];
  34. return server;
  35. },
  36.  
  37. user: function () {
  38. var connection = this.connection();
  39. var user = connection['User Id'] || connection['user id'];
  40. return user;
  41. },
  42.  
  43. password: function () {
  44. var connection = this.connection();
  45. var password = connection.Password || connection.password;
  46. return password;
  47. },
  48.  
  49. isLocalDb: function () {
  50. var user = this.user();
  51. var password = this.password();
  52. return !(user && password);
  53. }
  54. };
  55.  
  56. var runnerCommand = {
  57. executeSQLCmd: function (cmd) {
  58. var sqlcmd;
  59.  
  60. if (dataBaseObj.isLocalDb()) {
  61. sqlcmd = `sqlcmd -S "${dataBaseObj.server()}" -E -Q "${cmd}"`;
  62. } else {
  63. sqlcmd = `sqlcmd -S "${dataBaseObj.server()}" -Q "${cmd}" -U ${dataBaseObj.user()} -P ${dataBaseObj
  64. .password()}`;
  65. }
  66. this.execute(sqlcmd);
  67. },
  68.  
  69. executeStoreProcedure: function (cmd) {
  70. var sqlcmd = null;
  71. if (!dataBaseObj.isLocalDb()) {
  72. sqlcmd = `sqlcmd -S "${dataBaseObj.server()}" -Q "${cmd}" -U ${dataBaseObj.user()} -P ${dataBaseObj
  73. .password()} -d ${dataBaseObj.dataBase()}`;
  74. } else {
  75. sqlcmd = `sqlcmd -S "${dataBaseObj.server()}" -E -Q "${cmd}" -d ${dataBaseObj.dataBase()}`;
  76. }
  77. console.log(cmd);
  78. this.execute(sqlcmd);
  79. },
  80.  
  81. executePromptCmd: function (cmd) {
  82. this.execute(cmd);
  83. },
  84.  
  85. cleanDatabase: function () {
  86. console.log('deleting records from tables...');
  87. this.executeStoreProcedure("exec sp_msforeachtable @command1 = 'ALTER TABLE ? NOCHECK CONSTRAINT all'");
  88. this
  89. .executeStoreProcedure("exec sp_msforeachtable @command1 = 'DELETE ?',@whereand='AND o.id not in (select object_id from sys.tables c where c.name=''VersionInfo'')'");
  90. this
  91. .executeStoreProcedure("EXEC sp_msforeachtable @command1 = 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'");
  92. },
  93.  
  94. execute: function (cmd) {
  95. let child = exec(cmd, { stdio: [process.stdin, process.stdout, process.stderr] });
  96. }
  97. };
  98.  
  99. switch (ENV) {
  100. case 'migrate':
  101. buildMigrateProject();
  102. runMigrate();
  103. break;
  104. case 'configure':
  105. restorePackages();
  106. buildSolutionProjects();
  107. runCreateDataBase();
  108. runMigrate();
  109. break;
  110. }
  111.  
  112. function runCreateDataBase() {
  113. let dbCommand = `\
  114. IF EXISTS(select * from sys.databases where name='${dataBaseObj.dataBase()}') \
  115. BEGIN \
  116. ALTER DATABASE[${dataBaseObj.dataBase()}]SET SINGLE_USER WITH ROLLBACK IMMEDIATE; \
  117. DROP DATABASE[${dataBaseObj.dataBase()}]; \
  118. END \
  119. CREATE DATABASE[${dataBaseObj.dataBase()}]COLLATE SQL_Latin1_General_CP1_CI_AI; `;
  120.  
  121. runnerCommand.executeSQLCmd(dbCommand);
  122. console.log('');
  123. }
  124.  
  125. function runMigrate() {
  126. console.log('-------------------------------------------------------------------------------');
  127. console.log('Migrate database ' + dataBaseObj.dataBase());
  128. console.log('-------------------------------------------------------------------------------');
  129.  
  130. let cmd = `${homeDir}\\.nuget\\packages\\fluentmigrator.tools\\1.6.2\\tools\\AnyCPU\\40\\Migrate.exe /connection "${dataBaseObj.connectionString()}" /db sqlserver2012 /target "${__dirname}\\AutomacaoPsake.Migrations\\bin\\Debug\\net461\\AutomacaoPsake.Migrations.dll"`;
  131.  
  132. runnerCommand.executePromptCmd(cmd);
  133. }
  134.  
  135. function restorePackages() {
  136. console.log('-------------------------------------------------------------------------------');
  137. console.log('Restoring Solution Packages');
  138. console.log('-------------------------------------------------------------------------------');
  139.  
  140. runnerCommand.executePromptCmd(`dotnet restore "${__dirname}"`);
  141. runnerCommand.executePromptCmd(`dotnet restore "${__dirname}"`);
  142. }
  143.  
  144. function buildMigrateProject() {
  145. console.log('-------------------------------------------------------------------------------');
  146. console.log('Build Migrate Project');
  147. console.log('-------------------------------------------------------------------------------');
  148.  
  149. runnerCommand.executePromptCmd(`dotnet build "${__dirname}\\AutomacaoPsake.Migrations"`);
  150. }
  151.  
  152. function buildSolutionProjects() {
  153. console.log('-------------------------------------------------------------------------------');
  154. console.log('Build Solution Project');
  155. console.log('-------------------------------------------------------------------------------');
  156. getDirectories(__dirname)
  157. .map((directory) => {
  158. runnerCommand.executePromptCmd(`dotnet build "${__dirname}\\${directory}"`);
  159. });
  160. }
  161.  
  162. function getDirectories(srcpath) {
  163. const directories = fs.readdirSync(srcpath)
  164. .filter(file => fs.statSync(path.join(srcpath, file)).isDirectory());
  165.  
  166. return directories.filter((directory) => {
  167. return directory !== ".vs" && directory !== ".git";
  168. });
  169. }
  170.  
  171. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement