Advertisement
Guest User

Untitled

a guest
Feb 7th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.20 KB | None | 0 0
  1. 'use strict';
  2.  
  3. const Boom = require('boom');
  4. const conn = require('../dal/pgConnection');
  5. const config = require('config');
  6. const accountDal = require('../dal/accounts');
  7. const userDal = require('../dal/users');
  8. const householdDal = require('../dal/households');
  9. const deviceDal = require('../dal/devices');
  10. const shineCoinsDal = require('../dal/shineCoins');
  11. // const productsDal = require('../dal/products');
  12. const disposableEmail = require('../helpers/disposableEmailHelper');
  13. const KCAdminClient = require('../services/keyCloakAdminClientService');
  14. const Hubspot = require('../services/hubspotService.js');
  15. module.exports = {
  16. /**
  17. * Add account action
  18. * @param params The request params
  19. * @param res The response object
  20. * @param next Function that can be called in case of an error
  21. */
  22. createAccount: function (params, res, next) {
  23. let client,
  24. done;
  25. let kcAdminClient = KCAdminClient.getInstance();
  26. let account = params.account.value;
  27. let userId,
  28. accountId;
  29. let email = account.email.trim().toLowerCase();
  30. return new Promise(function (resolve, reject) {
  31. conn.execute().then((connection) => {
  32. client = connection.client;
  33. done = connection.done;
  34. return disposableEmail.checkAddress(config.disposableEmailUrl, email);
  35. }).then(() => {
  36. return accountDal.createAccount(client);
  37. }).then((newAccountId) => {
  38. accountId = newAccountId;
  39. return userDal.createUser(client, accountId, account, true);
  40. }).then((newUserId) => {
  41. userId = newUserId;
  42. return userDal.createUserPreferences(client, userId, account);
  43. }).then(() => {
  44. return kcAdminClient.createUser({
  45. email: email,
  46. username: email,
  47. firstName: account.firstName,
  48. lastName: account.lastName,
  49. accountId: accountId,
  50. userId: userId,
  51. password: account.password
  52. });
  53. }).then(() => {
  54. return conn.commit(client, done).then(() => {
  55. resolve({
  56. accountId: accountId,
  57. userId: userId
  58. });
  59. return Hubspot.create({
  60. email: email,
  61. green: account.green,
  62. flex: account.flex,
  63. bonus: account.bonus
  64. }).then(() => {
  65. return true;
  66. }).catch((err) => {
  67. if (err.statusCode === 409) {
  68. return Hubspot.update(email, {
  69. green: account.green,
  70. flex: account.flex,
  71. bonus: account.bonus
  72. });
  73. }
  74. });
  75. });
  76. }).catch((err) => {
  77. return conn.rollback(client, done).then(() => {
  78. if (Boom.isBoom(err)) {
  79. return reject(err);
  80. } else {
  81. return reject(Boom.badImplementation());
  82. }
  83. });
  84. });
  85. });
  86. },
  87.  
  88. /**
  89. * Get everything related to a Account
  90. * @param params The request params
  91. * @param res The response object
  92. * @param next Function that can be called in case of an error
  93. */
  94. readAccount: function (params, res, next) {
  95. let client, done;
  96. let accountId = params.accountId.value;
  97. let householdResponseDev;
  98. let users = [];
  99. let households = [];
  100. let devices = [];
  101. let redoutDevices = {};
  102. let balance;
  103. let idHousehold = 0;
  104.  
  105. return new Promise(function (resolve, reject) {
  106. conn.execute().then((connection) => {
  107. client = connection.client;
  108. done = connection.done;
  109.  
  110. const userPromise = userDal.readUsers(client, accountId)
  111. .then((userResponse) => {
  112. userResponse.forEach((valueUser) => {
  113. const redoutUser = {
  114. userId: valueUser.id,
  115. accountId: accountId,
  116. email: valueUser.email,
  117. green: valueUser.green,
  118. flex: valueUser.flex,
  119. bonus: valueUser.bonus,
  120. firstName: valueUser.first_name,
  121. lastName: valueUser.last_name,
  122. accountAdmin: valueUser.account_admin
  123. };
  124. users.push(redoutUser);
  125. });
  126. });
  127.  
  128. const householdPromise = householdDal.readHouseholds(client, accountId)
  129. .then((householdResponse) => {
  130. householdResponseDev = householdResponse;
  131.  
  132. householdResponse.forEach((value) => {
  133. idHousehold = value.id;
  134. return idHousehold;
  135. });
  136. return idHousehold;
  137. });
  138.  
  139. const coinsPromise = shineCoinsDal.readCoinBalance(client, accountId)
  140. .then((amountShineCoins) => {
  141. balance = amountShineCoins.amount;
  142. });
  143.  
  144. Promise.all([userPromise, householdPromise, coinsPromise]).then((readPromises) => {
  145. let devicePromise = [];
  146. if (readPromises[1]) {
  147. devicePromise.push(deviceDal.readDevicesForHousehold(client, idHousehold)
  148. .then((deviceResult) => {
  149. deviceResult.forEach((deviceTypeValue) => {
  150. redoutDevices = {
  151. deviceAlias: deviceTypeValue.device_alias,
  152. deviceType: deviceTypeValue.device_type,
  153. manufacturer: deviceTypeValue.manufacturer,
  154. model: deviceTypeValue.model
  155. };
  156. devices.push(redoutDevices);
  157. })
  158. householdResponseDev.forEach((valueHousehold) => {
  159. const redoutHouseholds = {
  160. address: valueHousehold.address,
  161. zipcode: valueHousehold.zipcode,
  162. city: valueHousehold.city,
  163. country: valueHousehold.country,
  164. latitude: valueHousehold.latitude,
  165. longitude: valueHousehold.longitude,
  166. consumptionInKwh: valueHousehold.consumption_in_kwh,
  167. peopleInHousehold: valueHousehold.people_in_household,
  168. propertyOwnership: valueHousehold.property_ownership,
  169. buildingType: valueHousehold.building_type,
  170. supplierName: valueHousehold.supplier,
  171. tariffName: valueHousehold.tariff,
  172. electricityImport: valueHousehold.electricity_import,
  173. electricityExport: valueHousehold.electricity_export,
  174. gasImport: valueHousehold.gas_import,
  175. devices: devices
  176. }
  177. households.push(redoutHouseholds);
  178. });
  179. })
  180. );
  181. }
  182. })
  183.  
  184. .then(() => {
  185. return conn.commit(client, done).then(() => {
  186. return res.sendJSON({
  187. users: users,
  188. households: households,
  189. balance: balance
  190. });
  191. });
  192. }).catch((err) => {
  193. return conn.rollback(client, done).then(() => {
  194. if (Boom.isBoom(err)) {
  195. return reject(err);
  196. } else {
  197. return reject(Boom.badImplementation());
  198. }
  199. });
  200. });
  201. });
  202. });
  203. }
  204.  
  205. /*
  206. updateAdminRights: function (params, res, next) {
  207. conn.execute(function (err, client, done) {
  208. if (err) {
  209. res.sendJSON(err, 500);
  210. }
  211. let users = params.rights.value.users;
  212. for (let i = 0; i < users.length; i++) {
  213. userDal.updateUser(client, {
  214. admin: users[i].is_account_admin,
  215. id: users[i].user_id
  216. }, function (err, success) {
  217. if (err) {
  218. return conn.rollback(client, done, function () {
  219. Boom.boomify(err, {statusCode: 500});
  220. });
  221. }
  222. conn.commit(client, done, function (err) {
  223. if (err) {
  224. return Boom.boomify(err, {statusCode: 500});
  225. }
  226. return res.sendJSON('Admin rights updated', 204);
  227. });
  228. });
  229. }
  230. });
  231. }
  232. */
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement