fix: [card] 카드 수정 시 데이터 유실 문제 해결
- || undefined → || null 변환으로 nullable 필드 정상 전송 - 숫자 필드(total_limit, used_amount, remaining_limit) 0 값 전송 보장 - assigned_user_id 항상 전송 (사용자 할당 해제 가능) - paymentDay 타입 변환 수정 (number → string, Select 매칭)
This commit is contained in:
@@ -70,7 +70,7 @@ function transformApiToFrontend(apiData: CardApiData): Card {
|
||||
alias: (raw.alias as string) || '',
|
||||
expiryDate: apiData.expiry_date ? apiData.expiry_date.replace('/', '') : '',
|
||||
csv: (raw.csv as string) || '',
|
||||
paymentDay: (raw.payment_day as string) || '',
|
||||
paymentDay: raw.payment_day != null ? String(raw.payment_day) : '',
|
||||
pinPrefix: '**',
|
||||
totalLimit: Number(raw.total_limit) || 0,
|
||||
usedAmount: Number(raw.used_amount) || 0,
|
||||
@@ -94,36 +94,42 @@ function transformApiToFrontend(apiData: CardApiData): Card {
|
||||
|
||||
// Frontend → API 변환
|
||||
function transformFrontendToApi(data: CardFormData): Record<string, unknown> {
|
||||
// 유효기간: 4자리면 MM/YY 포맷으로 변환, 비어있으면 전송하지 않음
|
||||
const formattedExpiry = data.expiryDate.length === 4
|
||||
? `${data.expiryDate.slice(0, 2)}/${data.expiryDate.slice(2)}`
|
||||
: data.expiryDate;
|
||||
|
||||
const apiData: Record<string, unknown> = {
|
||||
card_company: data.cardCompany,
|
||||
card_type: data.cardType || undefined,
|
||||
card_type: data.cardType || null,
|
||||
card_name: data.cardName,
|
||||
alias: data.alias || undefined,
|
||||
expiry_date: data.expiryDate.length === 4
|
||||
? `${data.expiryDate.slice(0, 2)}/${data.expiryDate.slice(2)}`
|
||||
: data.expiryDate,
|
||||
csv: data.csv || undefined,
|
||||
payment_day: data.paymentDay || undefined,
|
||||
total_limit: data.totalLimit || undefined,
|
||||
used_amount: data.usedAmount || undefined,
|
||||
remaining_limit: data.remainingLimit || undefined,
|
||||
alias: data.alias || null,
|
||||
csv: data.csv || null,
|
||||
payment_day: data.paymentDay ? parseInt(data.paymentDay, 10) : null,
|
||||
total_limit: data.totalLimit,
|
||||
used_amount: data.usedAmount,
|
||||
remaining_limit: data.remainingLimit,
|
||||
status: mapFrontendStatusToApi(data.status),
|
||||
memo: data.memo || undefined,
|
||||
memo: data.memo || null,
|
||||
assigned_user_id: data.userId ? parseInt(data.userId, 10) : null,
|
||||
};
|
||||
|
||||
// 유효기간: 값이 있을 때만 전송 (비어있으면 기존 값 유지)
|
||||
if (formattedExpiry) {
|
||||
apiData.expiry_date = formattedExpiry;
|
||||
}
|
||||
|
||||
// 카드번호: 마스킹(*)이 포함되면 전송하지 않음 (기존 값 유지)
|
||||
const cardNumberDigits = data.cardNumber.replace(/-/g, '');
|
||||
if (cardNumberDigits && !cardNumberDigits.includes('*')) {
|
||||
apiData.card_number = cardNumberDigits;
|
||||
}
|
||||
|
||||
// 비밀번호: 변경된 경우만 전송
|
||||
if (data.pinPrefix && data.pinPrefix !== '**') {
|
||||
apiData.card_password = data.pinPrefix;
|
||||
}
|
||||
|
||||
if (data.userId) {
|
||||
apiData.assigned_user_id = parseInt(data.userId, 10);
|
||||
}
|
||||
|
||||
return apiData;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user