TP-59593 | Narayan | Payee Entity Cleanup (#10038)

This commit is contained in:
Aditya Narayan Malik
2024-03-07 14:21:21 +05:30
committed by GitHub
parent 17cea0d3a3
commit 115ab64642
2 changed files with 60 additions and 77 deletions

View File

@@ -72,7 +72,6 @@ import com.navi.pay.management.common.sendmoney.model.network.TransactionRespons
import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState
import com.navi.pay.management.common.sendmoney.model.view.CollectRequestAction
import com.navi.pay.management.common.sendmoney.model.view.LinkedAccountEntityState
import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity
import com.navi.pay.management.common.sendmoney.model.view.PayeeSeverity
import com.navi.pay.management.common.sendmoney.model.view.SendMoneyBackPressAction
import com.navi.pay.management.common.sendmoney.model.view.SendMoneyMainCtaState
@@ -143,6 +142,7 @@ import com.navi.pay.utils.ZERO_STRING
import com.navi.pay.utils.getDisplayableAmount
import com.navi.pay.utils.getFormattedAmountWithDecimal
import com.navi.pay.utils.getIfscForBankUptime
import com.navi.pay.utils.getTrimmedValue
import com.navi.pay.utils.isAccountIdOfTypeUpiLite
import com.navi.pay.utils.isAmountValidForSendMoney
import com.navi.pay.utils.toUpiMapperVpa
@@ -1174,15 +1174,9 @@ constructor(
rewardNudgeShown = if (rewardsNudgeDetailEntity.value != null) "Y" else "N"
)
// TODO: Try directly updating payeeEntity & check the flow
val payeeEntity =
payeeEntity.value.copy(
amount = String.format("%.2f", paymentAmount.value.toDouble()),
note =
note.value.trim().ifBlank {
naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks
}
)
_payeeEntity.update {
it.copy(amount = getFormattedPaymentAmount(), note = getNoteValue())
}
val txnTimeStamp =
NaviPayCommonUtils.getDateTimeObjectFromDateTimeString(
@@ -1198,8 +1192,8 @@ constructor(
credDataProvider.upiLiteSendMoneyCred(
linkedAccountEntity = selectedBankAccount,
payerLiteAccountNumber = lrn,
payeeEntity = payeeEntity,
upiRequestId = upiRequestId,
payeeEntity = payeeEntity.value,
txnTimeStamp = txnTimeStamp.toString()
)
upiLiteAnalytics.onDevGenericEvent(
@@ -1210,7 +1204,7 @@ constructor(
npciCredData =
credDataProvider.payCred(
accountEntity = selectedBankAccount,
payeeEntity = payeeEntity,
payeeEntity = payeeEntity.value,
upiRequestId = upiRequestId
)
}
@@ -1229,7 +1223,6 @@ constructor(
if (isPaymentFromLiteAccount)
modifyCredBlockForLiteTxn(npciResult.data)
else npciResult.data,
payeeEntity = payeeEntity,
selectedBankAccountEntity = selectedBankAccount,
txnTimeStamp = txnTimeStamp.toString(),
clService = npciClService,
@@ -1246,7 +1239,6 @@ constructor(
isExternalUpiRequestIdAvailable: Boolean,
upiRequestId: String,
credBlock: String,
payeeEntity: PayeeEntity,
selectedBankAccountEntity: LinkedAccountEntity,
txnTimeStamp: String,
clService: NpciClService,
@@ -1274,7 +1266,6 @@ constructor(
isExternalUpiRequestIdAvailable = isExternalUpiRequestIdAvailable,
upiRequestId = upiRequestId,
credBlock = credBlock,
payeeEntity = payeeEntity,
selectedBankAccount = selectedBankAccountEntity,
txnTimeStamp = txnTimeStamp,
clService = clService,
@@ -1288,7 +1279,6 @@ constructor(
isExternalUpiRequestIdAvailable = isExternalUpiRequestIdAvailable,
upiRequestId = upiRequestId,
credBlock = credBlock,
payeeEntity = payeeEntity,
selectedBankAccount = selectedBankAccountEntity,
txnTimeStamp = txnTimeStamp,
clService = clService,
@@ -1411,7 +1401,7 @@ constructor(
bankCode = validateVpaAPIResponse.data!!.bankCode
)
}
val severity = _payeeEntity.value.severity
val severity = payeeEntity.value.severity
if (shouldWarnUserOrBlockTransaction(severity = severity)) {
naviPayAnalytics.onPotentialFraudLanded(
source = source,
@@ -1516,7 +1506,6 @@ constructor(
isExternalUpiRequestIdAvailable: Boolean,
upiRequestId: String,
credBlock: String,
payeeEntity: PayeeEntity,
selectedBankAccount: LinkedAccountEntity,
txnTimeStamp: String,
clService: NpciClService,
@@ -1536,16 +1525,16 @@ constructor(
SendMoneyRequest(
gatewayPayeeInfo =
GatewayPayeeInfo(
vpa = payeeEntity.vpa,
name = payeeEntity.name,
bankIfsc = payeeEntity.bankIfsc,
bankAccountUniqueId = payeeEntity.bankAccountUniqueId,
bankAccountNumber = payeeEntity.maskedAccountNumber,
bankName = payeeEntity.bankName,
bankCode = payeeEntity.bankCode,
mobileNumber = payeeEntity.phoneNumber,
upiNumber = payeeEntity.upiNumber,
mcc = payeeEntity.mcc,
vpa = payeeEntity.value.vpa,
name = payeeEntity.value.name,
bankIfsc = payeeEntity.value.bankIfsc,
bankAccountUniqueId = payeeEntity.value.bankAccountUniqueId,
bankAccountNumber = payeeEntity.value.maskedAccountNumber,
bankName = payeeEntity.value.bankName,
bankCode = payeeEntity.value.bankCode,
mobileNumber = payeeEntity.value.phoneNumber,
upiNumber = payeeEntity.value.upiNumber,
mcc = payeeEntity.value.mcc,
),
gatewayPayerInfo =
GatewayPayerInfo(
@@ -1559,20 +1548,20 @@ constructor(
),
gatewayTxnInfo =
GatewayTxnInfo(
amount = payeeEntity.amount,
amount = payeeEntity.value.amount,
upiRequestId = upiRequestId,
currency = payeeEntity.currency,
initiationMode = payeeEntity.mode,
currency = payeeEntity.value.currency,
initiationMode = payeeEntity.value.mode,
purpose =
if (isPaymentFromLiteAccount) UPILitePurposeCodes.SEND_MONEY.purposeCode
else payeeEntity.purpose,
remarks = payeeEntity.note,
else payeeEntity.value.purpose,
remarks = payeeEntity.value.note,
timeStamp = txnTimeStamp,
credBlock = credBlock,
refCategory = payeeEntity.refCategory,
refUrl = payeeEntity.refUrl,
refCategory = payeeEntity.value.refCategory,
refUrl = payeeEntity.value.refUrl,
transactionType = transactionType.name,
transactionReference = payeeEntity.transactionReference,
transactionReference = payeeEntity.value.transactionReference,
paymentMode =
getTransactionInitiationTypeFromSendMoneyScreenSource(
sendMoneyScreenSource = source
@@ -1981,19 +1970,14 @@ constructor(
val upiRequestId = payeeEntity.value.transactionId ?: ""
val payeeEntity =
payeeEntity.value.copy(
amount = String.format("%.2f", paymentAmount.value.toDouble()),
note =
note.value.trim().ifBlank {
naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks
}
)
_payeeEntity.update {
it.copy(amount = getFormattedPaymentAmount(), note = getNoteValue())
}
val npciCredData =
credDataProvider.collectCred(
accountEntity = updatedBankAccount,
payeeEntity = payeeEntity,
payeeEntity = payeeEntity.value,
upiRequestId = upiRequestId
)
@@ -2010,7 +1994,6 @@ constructor(
collectRequestAction = CollectRequestAction.APPROVE,
upiRequestId = upiRequestId,
credBlock = npciResult.data,
payeeEntity = payeeEntity,
selectedBankAccount = updatedBankAccount
)
is NpciResult.Error -> handleNpciError(npciError = npciResult)
@@ -2024,20 +2007,12 @@ constructor(
val selectedBankAccount = _selectedBankAccount.value ?: return
val upiRequestId = payeeEntity.value.transactionId ?: ""
val payeeEntity =
payeeEntity.value.copy(
amount = String.format("%.2f", paymentAmount.value.toDouble()),
note =
note.value.trim().ifBlank {
naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks
}
)
_payeeEntity.update { it.copy(amount = getFormattedPaymentAmount(), note = getNoteValue()) }
processCollectRequest(
collectRequestAction = CollectRequestAction.DECLINE,
upiRequestId = upiRequestId,
credBlock = null,
payeeEntity = payeeEntity,
selectedBankAccount = selectedBankAccount
)
}
@@ -2046,7 +2021,6 @@ constructor(
collectRequestAction: CollectRequestAction,
upiRequestId: String,
credBlock: String?,
payeeEntity: PayeeEntity,
selectedBankAccount: LinkedAccountEntity
) {
if (source !is SendMoneyScreenSource.CollectRequest) return
@@ -2078,16 +2052,16 @@ constructor(
CollectRequestActionRequest(
gatewayPayeeInfo =
GatewayPayeeInfo(
vpa = payeeEntity.vpa,
name = payeeEntity.name,
bankIfsc = payeeEntity.bankIfsc,
bankAccountUniqueId = payeeEntity.bankAccountUniqueId,
bankAccountNumber = payeeEntity.maskedAccountNumber,
bankName = payeeEntity.bankName,
bankCode = payeeEntity.bankCode,
vpa = payeeEntity.value.vpa,
name = payeeEntity.value.name,
bankIfsc = payeeEntity.value.bankIfsc,
bankAccountUniqueId = payeeEntity.value.bankAccountUniqueId,
bankAccountNumber = payeeEntity.value.maskedAccountNumber,
bankName = payeeEntity.value.bankName,
bankCode = payeeEntity.value.bankCode,
mobileNumber = null,
upiNumber = null,
mcc = payeeEntity.mcc,
mcc = payeeEntity.value.mcc,
),
gatewayPayerInfo =
GatewayPayerInfo(
@@ -2101,18 +2075,18 @@ constructor(
),
gatewayTxnInfo =
GatewayTxnInfo(
amount = payeeEntity.amount,
amount = payeeEntity.value.amount,
upiRequestId = upiRequestId,
currency = payeeEntity.currency,
initiationMode = payeeEntity.mode,
purpose = payeeEntity.purpose,
remarks = payeeEntity.note,
currency = payeeEntity.value.currency,
initiationMode = payeeEntity.value.mode,
purpose = payeeEntity.value.purpose,
remarks = payeeEntity.value.note,
timeStamp = null,
credBlock = credBlock,
refCategory = payeeEntity.refCategory,
refUrl = payeeEntity.refUrl,
refCategory = payeeEntity.value.refCategory,
refUrl = payeeEntity.value.refUrl,
transactionType = transactionType.name,
transactionReference = payeeEntity.transactionReference,
transactionReference = payeeEntity.value.transactionReference,
paymentMode =
getTransactionInitiationTypeFromSendMoneyScreenSource(
sendMoneyScreenSource = source
@@ -2333,12 +2307,9 @@ constructor(
txnStatus = sendMoneyResponse.status,
txnType = transactionType.name,
txnReqType = sendMoneyResponse.txnRequestType,
amount = String.format("%.2f", (paymentAmount.value.toDoubleOrNull() ?: 0.0)),
amount = getFormattedPaymentAmount(),
currency = DEFAULT_UPI_CURRENCY,
remarks =
note.value.trim().ifBlank {
naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks
},
remarks = getNoteValue(),
txnTimestamp =
sendMoneyResponse.transactionTimestamp
?: DateTime.now(DateTimeZone.UTC), // DB always stores in UTC
@@ -2480,4 +2451,12 @@ constructor(
_rewardsNudgeDetailEntity.update { rewardsNudgeDetail }
}
}
private fun getNoteValue() =
note.value.getTrimmedValue(
defaultValue = naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks
)
private fun getFormattedPaymentAmount() =
String.format("%.2f", paymentAmount.value.toDoubleOrNull() ?: 0.0)
}

View File

@@ -230,6 +230,10 @@ fun String.getFormattedAmountWithDecimal(): String {
return amount
}
fun String.getTrimmedValue(defaultValue: String = EMPTY): String {
return this.trim().ifBlank { defaultValue }
}
fun String.isAccountIdOfTypeUpiLite(): Boolean {
return this.contains(UNDERSCORE)
}