Skip to content

feat: 투표 결과 7일 보관 (생성자 전용 접근) - #6

Merged
dev-minsoo merged 2 commits into
mainfrom
feat/poll-result-retention
Feb 13, 2026
Merged

dev-minsoo merged 2 commits into
mainfrom
feat/poll-result-retention

Conversation

@dev-minsoo

Copy link
Copy Markdown
Member

Summary

  • 투표 만료 후 7일간 Redis에 결과 데이터 보관 (TTL + 604800초)
  • expires_at 기준으로 마감 판단, Redis TTL과 분리
  • 만료 후 일반 방문자는 결과 접근 불가 (410 Gone), share_token 소유자(생성자)만 결과 확인 가능
  • /polls 공개 목록에서 만료 투표 자동 제외
  • /my-polls에서 만료 투표 유지 + "마감됨" 배지 표시
  • 복수선택 투표 참여자 수 카운트 버그 수정 포함

Changes

  • backend/app/services/room.py: RESULT_RETENTION_TTL 추가, is_room_expired() 헬퍼, 공개 목록 필터링
  • backend/app/routers/rooms.py: 투표/결과 엔드포인트에 만료 체크 추가, is_expired 필드 응답
  • frontend/lib/api.ts: is_expired 타입 추가, getResultsshare_token 파라미터
  • frontend/app/vote/[uuid]/vote-client.tsx: 만료 상태 UI (closed 뷰, 마감 배지)
  • frontend/app/my-polls/my-polls.tsx: 만료 항목 유지, 마감 배지, "결과 보기" 링크
  • frontend/lib/i18n.ts: 만료 관련 i18n 메시지 (ko/en)

Test plan

  • 투표 생성 후 Redis TTL이 원래 TTL + 604800인지 확인
  • expires_at 이후 투표 시도 → 410 응답
  • expires_at 이후 share_token 없이 결과 조회 → 410
  • expires_at 이후 share_token으로 결과 조회 → 정상
  • /polls 목록에서 만료 투표 미노출
  • /my-polls에서 만료 투표 "마감됨" 배지 + 결과 확인 가능

- Extend Redis TTL by 7 days (RESULT_RETENTION_TTL) so data persists after poll closes
- Use expires_at for deadline logic, separate from Redis TTL
- Block voting on expired polls (410 Gone)
- Require share_token for result access after expiry
- Filter expired polls from public /polls listing
- Keep expired polls in /my-polls with "Closed" badge
- Add i18n messages for poll closed state (ko/en)
@dev-minsoo dev-minsoo self-assigned this Feb 13, 2026
@dev-minsoo
dev-minsoo merged commit e550cb5 into main Feb 13, 2026
4 of 6 checks passed
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.

1 participant