fix(exchange): prefer entered wallet card number

chore/issuance-comments-zh
chenyuan 1 month ago
parent b21d70f311
commit 74a649ca22

@ -91,9 +91,12 @@ public class WalletPrerequisiteProjectionService {
Activation activation = activations.get(0); Activation activation = activations.get(0);
List<Application> applications = jdbc.query( List<Application> applications = jdbc.query(
"SELECT COALESCE(account_bank,selected_bank) bank_name,bank_card_number,account_balance,wallet_type " + "SELECT COALESCE(account_bank,selected_bank) bank_name," +
"COALESCE(NULLIF(TRIM(input_bank_card_number),''),bank_card_number) bank_card_number," +
"account_balance,wallet_type " +
"FROM wallet_application WHERE user_id=? AND school_id=? AND class_id=? " + "FROM wallet_application WHERE user_id=? AND school_id=? AND class_id=? " +
"AND status='SUBMITTED' AND deleted=FALSE AND bank_card_number IS NOT NULL " + "AND status='SUBMITTED' AND deleted=FALSE " +
"AND COALESCE(NULLIF(TRIM(input_bank_card_number),''),bank_card_number) IS NOT NULL " +
"AND account_balance IS NOT NULL AND COALESCE(account_bank,selected_bank) IS NOT NULL " + "AND account_balance IS NOT NULL AND COALESCE(account_bank,selected_bank) IS NOT NULL " +
"ORDER BY created_at DESC LIMIT 1", "ORDER BY created_at DESC LIMIT 1",
(rs, row) -> new Application(rs.getString("bank_name"), rs.getString("bank_card_number"), (rs, row) -> new Application(rs.getString("bank_name"), rs.getString("bank_card_number"),

@ -78,6 +78,31 @@ class WalletPrerequisiteProjectionServiceTest {
assertThat(encrypted).isNotEqualTo(keyPair.getPrivateKey()); assertThat(encrypted).isNotEqualTo(keyPair.getPrivateKey());
} }
@Test
void userEnteredCardNumberTakesPrecedenceOverInvalidProfileCardNumber() {
seedCompleted();
String enteredCardNumber = "6216610100007654321";
jdbc.update("UPDATE wallet_application SET input_bank_card_number=?,bank_card_number=NULL WHERE user_id=?",
enteredCardNumber, SUBJECT_USER);
service.ensureForSubject(subject());
assertThat(jdbc.queryForObject("SELECT card_number FROM simulated_bank_account WHERE user_id=?",
String.class, SUBJECT_USER)).isEqualTo(enteredCardNumber);
}
@Test
void invalidEnteredAndProfileCardNumbersAreRejected() {
seedCompleted();
jdbc.update("UPDATE wallet_application SET input_bank_card_number='',bank_card_number='123' WHERE user_id=?",
SUBJECT_USER);
assertThatThrownBy(() -> service.ensureForSubject(subject()))
.isInstanceOf(BusinessException.class)
.hasMessageContaining("个人数字钱包开通");
assertThat(count("simulated_bank_account", "user_id", SUBJECT_USER)).isZero();
}
@Test @Test
void repeatedProjectionDoesNotOverwriteMutableRuntimeStateOrModuleThreeFacts() { void repeatedProjectionDoesNotOverwriteMutableRuntimeStateOrModuleThreeFacts() {
seedCompleted(); seedCompleted();

@ -536,6 +536,7 @@ CREATE TABLE IF NOT EXISTS wallet_application (
phone VARCHAR(20), phone VARCHAR(20),
input_phone VARCHAR(20), input_phone VARCHAR(20),
input_id_number VARCHAR(20), input_id_number VARCHAR(20),
input_bank_card_number VARCHAR(30),
account_bank VARCHAR(100), account_bank VARCHAR(100),
bank_card_number VARCHAR(30), bank_card_number VARCHAR(30),
account_balance DECIMAL(20,2), account_balance DECIMAL(20,2),

Loading…
Cancel
Save