Skip to content

feat/both/unpaid-hold-expiry : 미결제 홀드 자동 만료와 결제창 이탈 뒤 재신청 허용 #146

Closed

Description

@ysw789

📌 이슈 제목

feat/both/unpaid-hold-expiry : 미결제 홀드 자동 만료와 결제창 이탈 뒤 재신청 허용

✨ 기능 설명

  • 버추얼런에서 결제창에 들어갔다 나온 뒤 다시 결제하기를 누르면 409 REGISTRATION_ADDITIONAL_ORDER_LOGIN_REQUIRED가 난다.
    • 결제하기를 누를 때마다 신청 API를 다시 부르는데, 첫 호출이 만든 미결제 신청이 살아 있어 같은 신청자로 거절된다.
  • 결제하지 않고 나간 신청은 정원(capacity.held_count)을 계속 잡는다. 자동으로 푸는 장치가 없어 관리자가 미결제 신청을 일괄 취소해야 한다.
  • 같은 신원·같은 비밀번호로 다시 신청하면 이전 미결제 주문을 취소(결제 무효, 정원 반환)하고 새로 만든다.
  • 대회 정책에 미결제 홀드 만료 시간(분)을 두고, 켜진 대회는 개인 신청의 정원 홀드에 만료 시각을 적는다. user 앱 스케줄러가 1분마다 만료된 홀드를 관리자 미결제 정리와 같은 결과(EXPIRED, 결제 무효, 정원 반환)로 처리한다. 승인 중·결과 미확인·완료 결제가 걸린 건은 건너뛴다.
    • 버추얼런 20분(토스 결제 인증 뒤 승인 대기 10분보다 길게).

✅ 세부 작업 항목

  • user: 공개 신청 시 같은 신청자의 결제 전 주문 교체
  • DDL: event_registration_policy.unpaid_hold_expiry_minutes, reservation(status, expires_at) 인덱스
  • user: 정원 확보·재확보·재결제 준비 때 reservation.expires_at 기록
  • user: 미결제 홀드 만료 서비스와 스케줄러(unpaid-hold-expiry.* 설정)
  • user: 취소 경로가 EXPIRED로 삭제된 신청을 받도록 수정
  • common-entity: ReservationBase 만료 설명 갱신
  • 단위·DB 테스트

Activity

  1. self-assigned this
    on Nov 7, 2026
  2. added 3 commits that reference this issue on Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

feat새로운 기능 추가

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions