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 7.83 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({accountId: accountId, userId: userId});
  56. return Hubspot.create({email: email, green: account.green, flex: account.flex, bonus: account.bonus}).then(() => {
  57. return true;
  58. }).catch((err) => {
  59. if (err.statusCode === 409) {
  60. return Hubspot.update(email, {
  61. green: account.green,
  62. flex: account.flex,
  63. bonus: account.bonus
  64. });
  65. }
  66. });
  67. });
  68. }).catch((err) => {
  69. return conn.rollback(client, done).then(() => {
  70. if (Boom.isBoom(err)) {
  71. return reject(err);
  72. } else {
  73. return reject(Boom.badImplementation());
  74. }
  75. });
  76. });
  77. });
  78. },
  79.  
  80. /**
  81. * Get everything related to a Account
  82. * @param params The request params
  83. * @param res The response object
  84. * @param next Function that can be called in case of an error
  85. */
  86. readAccount: function (params, res, next) {
  87. let client,
  88. done;
  89. let accountId = params.accountId.value;
  90. let householdResponseDev;
  91. let users = [];
  92. let households = [];
  93. let devices = [];
  94. let redoutDevices = {};
  95. let balance;
  96. let idHousehold = 0;
  97.  
  98. return new Promise(function (resolve, reject) {
  99. conn.execute().then((connection) => {
  100. client = connection.client;
  101. done = connection.done;
  102.  
  103. const userPromise = userDal.readUsers(client, accountId).then((userResponse) => {
  104. userResponse.forEach((valueUser) => {
  105. const redoutUser = {
  106. userId: valueUser.id,
  107. accountId: accountId,
  108. email: valueUser.email,
  109. green: valueUser.green,
  110. flex: valueUser.flex,
  111. bonus: valueUser.bonus,
  112. firstName: valueUser.first_name,
  113. lastName: valueUser.last_name,
  114. accountAdmin: valueUser.account_admin
  115. };
  116. users.push(redoutUser);
  117. });
  118. });
  119.  
  120. const householdPromise = householdDal.readHouseholds(client, accountId).then((householdResponse) => {
  121. householdResponseDev = householdResponse;
  122.  
  123. householdResponse.forEach((value) => {
  124. idHousehold = value.id;
  125. return idHousehold;
  126. });
  127. return idHousehold;
  128. });
  129.  
  130. const coinsPromise = shineCoinsDal.readCoinBalance(client, accountId).then((amountShineCoins) => {
  131. balance = amountShineCoins.amount;
  132. });
  133.  
  134. Promise.all([userPromise, householdPromise, coinsPromise]).then((readPromises) => {
  135. let devicePromise = [];
  136. if (readPromises[1]) {
  137. devicePromise.push(deviceDal.readDevicesForHousehold(client, idHousehold).then((deviceResult) => {
  138. deviceResult.forEach((deviceTypeValue) => {
  139. redoutDevices = {
  140. deviceAlias: deviceTypeValue.device_alias,
  141. deviceType: deviceTypeValue.device_type,
  142. manufacturer: deviceTypeValue.manufacturer,
  143. model: deviceTypeValue.model
  144. };
  145. devices.push(redoutDevices);
  146. });
  147. householdResponseDev.forEach((valueHousehold) => {
  148. const redoutHouseholds = {
  149. address: valueHousehold.address,
  150. zipcode: valueHousehold.zipcode,
  151. city: valueHousehold.city,
  152. country: valueHousehold.country,
  153. latitude: valueHousehold.latitude,
  154. longitude: valueHousehold.longitude,
  155. consumptionInKwh: valueHousehold.consumption_in_kwh,
  156. peopleInHousehold: valueHousehold.people_in_household,
  157. propertyOwnership: valueHousehold.property_ownership,
  158. buildingType: valueHousehold.building_type,
  159. supplierName: valueHousehold.supplier,
  160. tariffName: valueHousehold.tariff,
  161. electricityImport: valueHousehold.electricity_import,
  162. electricityExport: valueHousehold.electricity_export,
  163. gasImport: valueHousehold.gas_import,
  164. devices: devices
  165. };
  166. households.push(redoutHouseholds);
  167. });
  168. }));
  169. }
  170. }).then(() => {
  171. return conn.commit(client, done).then(() => {
  172. return res.sendJSON({users: users, households: households, balance: balance});
  173. });
  174. }).catch((err) => {
  175. return conn.rollback(client, done).then(() => {
  176. if (Boom.isBoom(err)) {
  177. return reject(err);
  178. } else {
  179. return reject(Boom.badImplementation());
  180. }
  181. });
  182. });
  183. });
  184. });
  185. }
  186.  
  187. /*
  188. updateAdminRights: function (params, res, next) {
  189. conn.execute(function (err, client, done) {
  190. if (err) {
  191. res.sendJSON(err, 500);
  192. }
  193. let users = params.rights.value.users;
  194. for (let i = 0; i < users.length; i++) {
  195. userDal.updateUser(client, {
  196. admin: users[i].is_account_admin,
  197. id: users[i].user_id
  198. }, function (err, success) {
  199. if (err) {
  200. return conn.rollback(client, done, function () {
  201. Boom.boomify(err, {statusCode: 500});
  202. });
  203. }
  204. conn.commit(client, done, function (err) {
  205. if (err) {
  206. return Boom.boomify(err, {statusCode: 500});
  207. }
  208. return res.sendJSON('Admin rights updated', 204);
  209. });
  210. });
  211. }
  212. });
  213. }
  214. */
  215. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement