Advertisement
Guest User

actions

a guest
Jun 19th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export default function transactionServiceActions(kube) {
  2.     const transactionNamespace = kube.namespace("transaction")
  3.     const mongoNamespace = kube.namespace("mongo")
  4.     const ibanNamespace = kube.namespace("iban")
  5.     const transactionModel =  mongoNamespace.baseModel('transaction')
  6.     const accountModel = mongoNamespace.baseModel('account')
  7.  
  8.  
  9.     transactionNamespace.def(function fetchTransaction(_id) {
  10.         return transactionModel.findOne({_id})
  11.             .catch(function handleTransactionLookupError(error) {
  12.                 throw kube.errors.transactionFetchError
  13.             })
  14.     })
  15.  
  16.     transactionNamespace.def(function createTransaction(
  17.         from,
  18.         to,
  19.         amount,
  20.         description,
  21.         recurring
  22.     ) {
  23.         kube.logger.info({from, to, amount, description, recurring}, "starting transaction creation")
  24.  
  25.         //check if the sender or receiver is in our bank
  26.         //this prevents people trying to make rogue transactions
  27.         //that does not involve our bank
  28.         //from and to are both ibans
  29.         if(!ibanNamespace.isGazpromIban(from) && !ibanNamespace.isGazpromIban(to)) {
  30.             kube.logger.error("Trying to create transaction between two non gazprom banks")
  31.             throw kube.errors.noGazpromTransaction
  32.         }
  33.  
  34.         //check if both ibans are valid
  35.         if(!ibanNamespace.isValidAccountNumber(from)) {
  36.             kube.logger.error("Trying to create transaction with invalid sender")
  37.             throw kube.errors.invalidTransactionSenderIban
  38.         }
  39.  
  40.         //check if the from iban is one of the users
  41.  
  42.         if(!ibanNamespace.isValidAccountNumber(to)) {
  43.             kube.logger.error("Trying to create transaction with invalid receiver")
  44.             throw kube.errors.invalidTransactionReceiverIban
  45.         }
  46.  
  47.         //at this point, the transaction is valid
  48.         return mongoNamespace.createModel('transaction', {
  49.             from,
  50.             to,
  51.             amount,
  52.             senderBank: from.substring(4,8),
  53.             receiverBank: to.substring(4,8),
  54.             description,
  55.             recurring
  56.         })
  57.         .save()
  58.         .then((transact) => transactionNamespace.executeTransaction(transact))
  59.     })
  60.  
  61.     transactionNamespace.def(function executeTransaction(transaction) {
  62.         kube.logger.info({transaction}, "executing transaction")
  63.  
  64.         return accountModel.findOneAndUpdate({accountNumber: transaction.from}, {$inc: {balance: transaction.amount * -1}})
  65.             .then(() => accountModel.findOneAndUpdate({accountNumber: transaction.to}, {$inc: {balance: transaction.amount}}))
  66.             .then(() => transaction)
  67.     })
  68.  
  69.     transactionNamespace.def(function getOutgoingTransactions(accountNumber) {
  70.         return transactionModel.find({from: accountNumber})
  71.             .limit(20)
  72.             .sort({createdAt: "desc"})
  73.             .catch(function handleGetOutgoingTransactionsError(error) {
  74.                 kube.logger.error({ error }, "Error getting outgoing transactions")
  75.                 throw kube.errors.outgoingTransactionFetchFailure
  76.             })
  77.     })
  78.  
  79.     transactionNamespace.def(function getIncomingTransactions(accountNumber) {
  80.         return transactionModel.find({to: accountNumber})
  81.             .limit(20)    
  82.             .sort({createdAt: "desc"})
  83.             .catch(function handleGetOutgoingTransactionsError(error) {
  84.                 kube.logger.error({ error }, "Error getting incoming transactions")
  85.                 throw kube.errors.incomingTransactionFetchFailure
  86.             })
  87.     })
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement