Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. 'use strict';
  2.  
  3.  
  4. const internals = module.exports = {};
  5. const Boom = require('boom');
  6. const debug = require('debug')('hapi-leasing-models:lease-agreement:methods');
  7.  
  8.  
  9.  
  10. internals.leaseExists = function (id, callback){
  11. const leaseAgreement = this.LeaseAgreement;
  12.  
  13. return leaseAgreement.findById(id)
  14. .then((leaseAgreement) => {
  15. debug('in then handler of promise', id);
  16. if (!leaseAgreement) {
  17. debug('DID NOT FIND LEASE');
  18. return false;
  19. }
  20. return true;
  21. })
  22. .catch(err => {
  23. debug('error caaght %s', id);
  24. return Promise.reject(Boom.wrap(err));
  25. })
  26. .nodeify(callback);
  27. };
  28.  
  29.  
  30. internals.generateId = function (callback){
  31. debug('generating a lease-id...');
  32.  
  33. const model = this.LeaseAgreement;
  34.  
  35. const generateUniqueId = () => {
  36. const id = `${Math.floor(Math.random() * 900000000000) + 100000000000}`;
  37.  
  38. return model.findById(id)
  39. .then(found => {
  40. // If not found then resolve with the id b/c its unique and not in db
  41. if (!found){
  42. return Promise.resolve({ id });
  43. }
  44.  
  45. // If something found, then error out
  46. return Promise.reject(new Error('Id is not unique'));
  47. });
  48. };
  49.  
  50.  
  51. const proms = [];
  52. for (let i = 0; i < 5; i++){
  53. proms.push(generateUniqueId(model));
  54. }
  55.  
  56. return Promise.any(proms)
  57. .then((resp) => {
  58. debug('generated Id: %O', resp);
  59. return resp;
  60. })
  61. .catch(() => Promise.reject(new Error('Unique id cannot be generated in 5 tries')))
  62. .nodeify(callback);
  63. };
  64.  
  65. internals.updateLease = function (leaseId, updateData, callback){
  66. return this.LeaseAgreement.findByIdAndUpdate(leaseId, { $set: updateData })
  67. .then(resp => {
  68. if (!resp){
  69. const error = Boom.notFound(`Provided leaseId ${leaseId} was not found`);
  70. return Promise.reject(error);
  71. }
  72. return { msg: 'Lease Updated' };
  73. })
  74. .catch(err => {
  75. const error = Boom.wrap(err);
  76. return Promise.reject(error);
  77. })
  78. .nodeify(callback);
  79. };
  80.  
  81. internals.deleteLease = function (id, callback){
  82. return this.LeaseAgreement.findByIdAndUpdate(id, {
  83. $set: {
  84. deletedAt: new Date(),
  85. updatedAt: new Date()
  86. }
  87. })
  88. .then((leaseAgreement) => {
  89. if (!leaseAgreement) {
  90. debug('DID NOT FIND LEASE');
  91. return Promise.reject(Boom.notFound(`Provided leaseId (${id}) was not found in db`));
  92. }
  93.  
  94. debug('leaseId %s for %s was deleted', leaseAgreement._id, leaseAgreement.customerId);
  95. return !!leaseAgreement;
  96. })
  97. .catch(err => {
  98. const error = Boom.wrap(err);
  99. return Promise.reject(error);
  100. })
  101. .nodeify(callback);
  102. };
  103.  
  104. internals.findLeaseById = function (id, callback){
  105. return this.LeaseAgreement.findById(id)
  106. .then((leaseAgreement) => {
  107. if (!leaseAgreement) {
  108. debug('DID NOT FIND LEASE');
  109. return Promise.reject(Boom.notFound(`Provided leaseId (${id}) was not found in db`));
  110. }
  111.  
  112. debug('Found lease for customerId %s', leaseAgreement.customerId);
  113. return leaseAgreement;
  114. })
  115. .catch(err => {
  116. const error = Boom.wrap(err);
  117. return Promise.reject(error);
  118. })
  119. .nodeify(callback);
  120. };
  121.  
  122. internals.isLeaseSignable = function (leaseAgreement, reply){
  123. const now = new Date();
  124.  
  125. if (leaseAgreement.expiresAt < now) {
  126. debug('This lease is EXPIRED!!! %s', leaseAgreement._id);
  127. return reply(Boom.resourceGone('The lease expired. Please create a new lease.'));
  128. }
  129.  
  130. if (leaseAgreement.signed === true) {
  131. debug('This lease is already signed %s', leaseAgreement._id);
  132. return reply(Boom.resourceGone('The lease was already signed. Please create a new lease.'));
  133. }
  134.  
  135. return reply(null, true);
  136. };
  137.  
  138. internals.findLeases = function (query, callback){
  139.  
  140. debug('[server-method: findLease]: executing..');
  141.  
  142. const leaseAgreement = this.LeaseAgreement;
  143.  
  144. let {
  145. sort = 'createdAt',
  146. limit = 20,
  147. page = 1,
  148. filter = {},
  149. fields = {}
  150. } = query;
  151.  
  152. if (_.isString(filter)){
  153. try {
  154. filter = JSON.parse(filter, (key, value) => {
  155. const d = moment(value, [moment.ISO_8601], false);
  156. return (d.isValid()) ? moment(value).toDate() : value;
  157. });
  158. } catch (err){
  159. filter = {};
  160. }
  161. }
  162.  
  163. if (_.isString(fields)){
  164. try {
  165. fields = JSON.parse(fields);
  166. } catch (err){
  167. fields = {};
  168. }
  169. }
  170.  
  171. debug('sort: %o', sort);
  172. debug('limit: %o', limit);
  173. debug('page: %o', page);
  174. debug('filter: %o', filter);
  175. debug('fields: %o', fields);
  176.  
  177. return leaseAgreement.pagedFind(filter, fields, sort, limit, page)
  178. .then(resp => {
  179. debug('[server-method: findLease]: resp = %O', resp);
  180. return resp;
  181. })
  182. .catch((err) => {
  183. debug('There was an error getting leases %O', err);
  184. return Promise.reject(Boom.wrap(err));
  185. })
  186. .nodeify(callback);
  187.  
  188. };
  189.  
  190. internals.updateLease = function (leaseId, updateData, callback){
  191. return this.LeaseAgreement.findByIdAndUpdate(leaseId, { $set: updateData })
  192. .then(resp => {
  193. if (!resp){
  194. const error = Boom.notFound(`Provided leaseId ${leaseId} was not found`);
  195. return Promise.reject(error);
  196. }
  197. return { msg: 'Lease Updated' };
  198. })
  199. .catch(err => {
  200. const error = Boom.wrap(err);
  201. return Promise.reject(error);
  202. })
  203. .nodeify(callback);
  204. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement