[BE-14] 승인·거부·킬스위치·조회 UseCase

작업 내용 (설계 의도)

변경 사항

사용자가 직접 조작·조회하는 UseCase 5종을 만든다. UseCase 1개 = 파일 1개 원칙을 지킨다.

  • ApproveOrderProposalUseCase / RejectOrderProposalUseCase — 대기 제안 승인·거부. 승인 시점 가격으로 집행한다.
  • ToggleKillSwitchUseCase — 킬 스위치 on/off. 켜면 1초 내에 ① 신규 주문 차단 ② 미체결 주문 전량 취소 ③ 대기 제안 전량 무효화가 이뤄진다. 보유 포지션과 손절 주문은 유지한다. 해제는 명시적 조작으로만 가능하며 자동 해제되지 않는다.
  • GetAutoTradingStatusUseCase — 모드·단계·킬스위치·포지션 수·당일 손익·한도 소진율
  • ListOrderProposalsUseCase — 제안 목록 조회

킬 스위치는 상태 전이가 있는 파괴적 조작이다 — 롤백: 킬 스위치 해제로 즉시 복구되나, 취소된 미체결 주문은 복원되지 않는다.

의존

  • BE-11 (AutoTradingDomainService)

다이어그램

처리 흐름

sequenceDiagram
    participant UC as ToggleKillSwitchUseCase
    participant Svc as AutoTradingDomainService
    participant Order as OrderGateway
    UC->>Svc: enableKillSwitch()
    Svc->>Svc: 정책 갱신 (신규 주문 차단)
    Svc->>Order: 미체결 주문 전량 취소
    Svc->>Svc: PENDING 제안 INVALIDATED 전이

클래스 의존

flowchart LR
    Approve[ApproveOrderProposalUseCase] --> Svc[AutoTradingDomainService]
    Reject[RejectOrderProposalUseCase] --> Svc
    Kill[ToggleKillSwitchUseCase] --> Svc
    Status[GetAutoTradingStatusUseCase] --> Svc
    List[ListOrderProposalsUseCase] --> Svc

테스트 케이스

  • PENDING 제안을 승인하면 승인 시점 가격으로 집행된다.
  • 만료된 제안을 승인하면 거부된다.
  • 킬 스위치를 켜면 미체결 주문이 전량 취소된다.
  • 킬 스위치를 켜면 PENDING 제안이 전부 INVALIDATED가 된다.
  • 킬 스위치를 켜도 보유 포지션은 청산되지 않는다(상태 보호).
  • 킬 스위치는 자동 해제되지 않는다 — 명시적 해제 호출 전까지 유지된다.
  • 상태 조회가 당일 손실 한도 소진율을 반환한다.