Skip to content

fix: ai_room 이름 변경, 초대 링크 버그 수정, 판결받기 버튼 개선 - #92

Merged
evenif99 merged 9 commits into
devfrom
fix/dispute-status-transition
Jun 20, 2026
Merged

fix: ai_room 이름 변경, 초대 링크 버그 수정, 판결받기 버튼 개선#92
evenif99 merged 9 commits into
devfrom
fix/dispute-status-transition

Conversation

@lyla-bae

@lyla-bae lyla-bae commented Jun 20, 2026

Copy link
Copy Markdown
Member

변경 배경

프론트 연동 테스트 중 발견한 초대 링크 버그 수정 및 관련 상태/이름 정리.

변경 사항

1. ai_chatai_room 이름 변경

AI 채팅 기능이 없는데 ai_chat이라는 이름이 실제 흐름과 맞지 않아 ai_room으로 수정.
모든 방은 AI가 판결하는 방이라는 의미를 반영.

2. 초대 링크 재발급 버그 수정

두 번째 초대 링크 복사 시 422 에러 발생하던 버그 수정.

  • 원인: room.roomMode !== 'AI_CHAT' 조건으로 INVITE_READY 상태에서 재발급 불가
  • 수정: AI_ROOM || INVITE_READY 둘 다 허용

3. 초대 링크 만료 기간 변경

72시간 → 7일. 카카오톡으로 전달 후 며칠 뒤 열 수 있는 상황 고려.

4. 초대 트랜잭션 TOCTOU 수정

invite 발급 시 dispute 상태 조회를 트랜잭션 내부로 이동.
트랜잭션 밖 스테일 값으로 상태를 덮어쓸 수 있던 위험 제거.

5. 판결받기 버튼 활성화 조건 수정

  • 기존: status === waiting_opponent || both_submitted 기준 → 1인 사용자 버튼 비활성화
  • 변경: 진술 content가 있으면 활성화 → 모달에서 "혼자 받기 / 초대하기" 선택

6. ROLE_B 진술 제출 멱등성 보장

ROLE_B 첫 제출 성공 후 네트워크 재시도 시 422 반환하던 문제.
BOTH_SUBMITTED 상태에서도 ROLE_B 접근 허용하여 submittedAt 멱등성 체크까지 도달하도록 수정.

DB 마이그레이션

-- 20260620000000_fix_dispute_status_transition
ALTER TYPE "room_mode" RENAME VALUE 'ai_chat' TO 'ai_room';

영향 범위

  • rooms API (evenif99): ai_room 이름 변경, 초대 재발급 조건 변경
  • disputes API (juahcheon): ROLE_B guard 조건 변경
  • invite/join API (배근영): 만료 기간, TOCTOU 수정
  • 프론트 (disputes/[id]/page.tsx): 판결받기 버튼 활성화 조건

rooms API, disputes API 담당자 리뷰 요청드립니다.

🤖 Generated with Claude Code

lyla-bae and others added 7 commits June 20, 2026 16:31
room_mode의 ai_chat을 ai_room으로 변경한다.
AI 대화 기능이 없음에도 chat이라는 이름이 오해를 유발해 수정한다.

dispute_status에 a_submitted를 추가한다.
단독/1:1 판결 흐름 모두 role_a 진술 제출 시 중간 상태를 명시적으로 표현한다.

- 단독: draft → a_submitted → judging → judged
- 1:1: ... → opponent_joined → a_submitted → both_submitted → judging → judged

Co-Authored-By: Claude <noreply@anthropic.com>
room_mode 변경(ai_chat → ai_room)에 따라 관련 API 코드를 일괄 수정한다.

초대 링크 발급 시 AI_ROOM과 INVITE_READY 모두 허용한다.
기존에는 AI_CHAT 상태에서만 발급 가능해 같은 버튼을 두 번 누르면
실패하는 문제가 있었다. 재발급 시 기존 링크는 무효화된다.

초대 링크 발급 시 dispute가 DRAFT 상태면 WAITING_OPPONENT로 업데이트한다.

Co-Authored-By: Claude <noreply@anthropic.com>
카카오톡으로 링크를 전달한 뒤 상대방이 며칠 후 확인하는 케이스를
고려해 만료 기간을 7일로 늘린다.

Co-Authored-By: Claude <noreply@anthropic.com>
role_a 진술 제출 시 dispute 상태를 WAITING_OPPONENT에서 A_SUBMITTED로 변경한다.
role_b는 A_SUBMITTED 이후에만 진술 제출이 가능하도록 조건을 강화한다.

단독 판결 트리거 조건을 WAITING_OPPONENT에서 A_SUBMITTED로 변경한다.
진행중 사건 목록 필터에 A_SUBMITTED 상태를 추가한다.
IMMUTABLE_DISPUTE_STATUSES에 A_SUBMITTED를 추가한다.

Co-Authored-By: Claude <noreply@anthropic.com>
진술 내용이 존재하면 단독 판결받기 버튼을 활성화한다.
기존에는 a_submitted 상태를 확인했으나 진술 작성 완료와 동시에
제출이 이루어지므로 content 존재 여부로 조건을 변경한다.

StatusBadge에 a_submitted 상태를 추가한다.

Co-Authored-By: Claude <noreply@anthropic.com>
room_mode: ai_chat → ai_room 반영
dispute_status: a_submitted 추가 및 단독/1:1 흐름 분리 명시
서비스 흐름에서 AI 대화 단계 제거 (AI 대화 페이지 미구현)
방 정책 섹션 현행화

Co-Authored-By: Claude <noreply@anthropic.com>
waiting_opponent이 이미 'A 진술 제출 완료' 의미를 포함하므로
별도의 a_submitted 상태가 불필요하다고 판단해 제거.

- schema, migration, types, constants에서 A_SUBMITTED 제거
- ROLE_A 진술 제출 후 상태: A_SUBMITTED → WAITING_OPPONENT 복원
- ROLE_B 제출 guard: OPPONENT_JOINED 기준으로 복원 (BOTH_SUBMITTED 허용으로 재시도 멱등성 보장)
- 단독 판결 guard: WAITING_OPPONENT 기준으로 복원
- invite/route.ts: existingDispute 조회를 트랜잭션 내부로 이동 (TOCTOU 방지)
- CLAUDE.md 상태 전이 업데이트

Co-Authored-By: Claude <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
talky-owl Ready Ready Preview, Comment Jun 20, 2026 8:16am

ai_chat → open → ai_room 두 단계 마이그레이션을
ai_chat → ai_room 단일 파일로 통합.

Co-Authored-By: Claude <noreply@anthropic.com>
Comment thread prisma/schema.prisma
creatorUserId String @map("creator_user_id") @db.Uuid
categoryGroup CategoryGroup @map("category_group")
roomMode RoomMode @default(AI_CHAT) @map("room_mode")
roomMode RoomMode @default(AI_ROOM) @map("room_mode")

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CHAT보다 ROOM이 더 맞는 네이밍같아서 바꾸어보았습니다 참고부탁드려요
@evenif99 @juahcheon

Comment thread src/lib/invite.ts
import { createHmac, randomUUID } from 'crypto'

const INVITE_EXPIRES_HOURS = 72
const INVITE_EXPIRES_HOURS = 168 // 7일

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

초대링크 유효기간 3일 -> 7일로 늘렸는데 다른의견있으시면 코멘트 부탁드림니다

@lyla-bae

Copy link
Copy Markdown
Member Author

확인해보시고 이상없으시면 merge 부탁드립니다
@evenif99

@lyla-bae
lyla-bae requested a review from evenif99 June 20, 2026 08:34
@evenif99
evenif99 merged commit 161411b into dev Jun 20, 2026
2 checks passed
@evenif99
evenif99 deleted the fix/dispute-status-transition branch June 20, 2026 08:35
@evenif99
evenif99 restored the fix/dispute-status-transition branch June 20, 2026 09:02
@evenif99
evenif99 deleted the fix/dispute-status-transition branch June 20, 2026 09:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants