현재 상태
Deposit.state와 Withdrawal.state가 str 타입으로 정의되어 있어, 유효한 값이 무엇인지 코드만으로 알 수 없다.
class Deposit(BaseModel):
state: str # "ACCEPTED"? "accepted"? 알 수 없음
class Withdrawal(BaseModel):
state: str # "DONE"? "done"? 알 수 없음
이로 인해 사용자가 API 문서를 직접 확인하지 않으면 대소문자 실수가 발생할 수 있다 (실제로 "accepted"로 잘못 비교하여 필터링이 동작하지 않는 버그 발생).
제안
Upbit API 응답의 state 값을 StrEnum으로 정의하여 타입 안전성을 확보한다.
class DepositState(StrEnum):
PROCESSING = "PROCESSING"
ACCEPTED = "ACCEPTED"
CANCELLED = "CANCELLED"
REJECTED = "REJECTED"
TRAVEL_RULE_SUSPECTED = "TRAVEL_RULE_SUSPECTED"
REFUNDING = "REFUNDING"
REFUNDED = "REFUNDED"
class WithdrawalState(StrEnum):
WAITING = "WAITING"
PROCESSING = "PROCESSING"
DONE = "DONE"
FAILED = "FAILED"
CANCELLED = "CANCELLED"
REJECTED = "REJECTED"
변경 대상
types/deposit.py: Deposit.state: str → DepositState
types/withdrawal.py: Withdrawal.state: str → WithdrawalState, WithdrawalKrw.state: str → WithdrawalState
api/deposits.py: list() 메서드의 state 파라미터 타입을 DepositState | None으로
api/withdrawals.py: list() 메서드의 state 파라미터 타입을 WithdrawalState | None으로
현재 상태
Deposit.state와Withdrawal.state가str타입으로 정의되어 있어, 유효한 값이 무엇인지 코드만으로 알 수 없다.이로 인해 사용자가 API 문서를 직접 확인하지 않으면 대소문자 실수가 발생할 수 있다 (실제로
"accepted"로 잘못 비교하여 필터링이 동작하지 않는 버그 발생).제안
Upbit API 응답의 state 값을 StrEnum으로 정의하여 타입 안전성을 확보한다.
변경 대상
types/deposit.py:Deposit.state: str→DepositStatetypes/withdrawal.py:Withdrawal.state: str→WithdrawalState,WithdrawalKrw.state: str→WithdrawalStateapi/deposits.py:list()메서드의state파라미터 타입을DepositState | None으로api/withdrawals.py:list()메서드의state파라미터 타입을WithdrawalState | None으로