|
|
|
@ -33,10 +33,7 @@ export class TransactionController { |
|
|
|
|
@Body() transactionInput: TransactionInput, |
|
|
|
|
): Promise<string> { |
|
|
|
|
return JSON.stringify({ |
|
|
|
|
amount: |
|
|
|
|
transactionInput.currency !== Currency.EUR |
|
|
|
|
? (await this.getAmountWithExchange(transactionInput)).toFixed(2) |
|
|
|
|
: (await this.getAmountWithoutExchange(transactionInput)).toFixed(2), |
|
|
|
|
amount: (await this.getCommissionAmount(transactionInput)).toFixed(2), |
|
|
|
|
currency: Currency.EUR, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
@ -97,7 +94,7 @@ export class TransactionController { |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
getExchangeRate(exchangeRateInput: ExchangeRateInput) { |
|
|
|
|
getExchangeRateResponse(exchangeRateInput: ExchangeRateInput) { |
|
|
|
|
return new Promise<ExchangeRateResponse>((resolve, reject) => { |
|
|
|
|
try { |
|
|
|
|
this.exchangeRateService.convertCurrency(exchangeRateInput).subscribe({ |
|
|
|
@ -110,11 +107,21 @@ export class TransactionController { |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async getAmountWithExchange(transactionInput: TransactionInput) { |
|
|
|
|
const exchangeRateResponse = await this.getExchangeRate({ |
|
|
|
|
async getExchangeRateIfNeeded(transactionInput: TransactionInput) { |
|
|
|
|
if (transactionInput.currency === Currency.EUR) { |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const exchangeRateResponse = await this.getExchangeRateResponse({ |
|
|
|
|
date: transactionInput.date, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
return exchangeRateResponse[transactionInput.currency]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async getCommissionAmount(transactionInput: TransactionInput) { |
|
|
|
|
const exchangeRate = await this.getExchangeRateIfNeeded(transactionInput); |
|
|
|
|
|
|
|
|
|
const transactionAmount = parseInt(transactionInput.amount); |
|
|
|
|
const transactionData = { |
|
|
|
|
date: transactionInput.date, |
|
|
|
@ -122,47 +129,18 @@ export class TransactionController { |
|
|
|
|
currency: transactionInput.currency, |
|
|
|
|
client_id: transactionInput.client_id, |
|
|
|
|
base_currency: Currency.EUR, |
|
|
|
|
base_amount: |
|
|
|
|
transactionAmount / exchangeRateResponse[transactionInput.currency], |
|
|
|
|
base_amount: transactionAmount / exchangeRate, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const commissionAmount = this.applyRules(transactionData); |
|
|
|
|
const commission = await this.applyRules(transactionData); |
|
|
|
|
|
|
|
|
|
commissionAmount |
|
|
|
|
.then((commission) => |
|
|
|
|
this.transactionService.insertOne({ |
|
|
|
|
...transactionData, |
|
|
|
|
commission, |
|
|
|
|
}), |
|
|
|
|
) |
|
|
|
|
this.transactionService |
|
|
|
|
.insertOne({ |
|
|
|
|
...transactionData, |
|
|
|
|
commission, |
|
|
|
|
}) |
|
|
|
|
.catch((error) => console.log(error)); |
|
|
|
|
|
|
|
|
|
return commissionAmount; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async getAmountWithoutExchange(transactionInput: TransactionInput) { |
|
|
|
|
const transactionData = { |
|
|
|
|
date: transactionInput.date, |
|
|
|
|
amount: parseInt(transactionInput.amount), |
|
|
|
|
currency: transactionInput.currency, |
|
|
|
|
client_id: transactionInput.client_id, |
|
|
|
|
base_currency: Currency.EUR, |
|
|
|
|
base_amount: parseInt(transactionInput.amount), |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const commissionAmount = await this.applyRules(transactionData); |
|
|
|
|
try { |
|
|
|
|
this.transactionService |
|
|
|
|
.insertOne({ |
|
|
|
|
...transactionData, |
|
|
|
|
commission: commissionAmount, |
|
|
|
|
}) |
|
|
|
|
.catch((error) => console.log(error)); |
|
|
|
|
} catch (error) { |
|
|
|
|
console.log(error); |
|
|
|
|
throw error; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return commissionAmount; |
|
|
|
|
return commission; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|