Skip to content

[Feat] : Live Activity #16

@LeeMin-hyeong

Description

@LeeMin-hyeong

배경/문제 정의

iOS 실시간 현황 화면 업데이트를 위한 APNs 엔드포인트 추가

제안 내용 (API/도메인)

POST /api/v1/live-activity/focus/register
POST /api/v1/live-activity/focus/pause
POST /api/v1/live-activity/focus/resume
POST /api/v1/live-activity/focus/end

완료 기준(DoD)

  • POST /api/v1/live-activity/focus/register가 인증된 사용자의 진행 중 focus session에 대해 정상적으로 등록/갱신된다
  • focusSessionId, slotSeconds, constellationId 검증이 서버 세션 정보와 일치하게 동작한다
  • Live Activity 등록 시 focus_live_activity 정보가 upsert되고 최신 push token으로 교체된다
  • register 성공 시 다음 별 발견 시각이 계산되어 서버 스케줄이 등록된다
  • 별 발견 시각마다 APNs liveactivity update push가 전송된다
  • POST /api/v1/live-activity/focus/pause 호출 시 스케줄이 취소되고 paused 상태 push가 전송된다
  • pause 상태에서는 discovered star count가 증가하지 않는다
  • POST /api/v1/live-activity/focus/resume 호출 시 paused 누적 시간이 반영되어 다음 별 발견 시각이 재계산된다
  • resume 이후 running 상태 push가 전송되고 이후 별 발견 스케줄이 다시 등록된다
  • POST /api/v1/live-activity/focus/end 호출 시 완료/취소 사유에 맞게 end push가 전송된다
  • complete 또는 cancel 시 Live Activity가 종료되고 서버 스케줄이 정리된다
  • APNs 410, Unregistered, BadDeviceToken 응답 시 해당 token이 비활성화되고 재시도하지 않는다
  • APNs 429, 500, 503 응답 시 지수 백오프로 재시도한다
  • 서버 재시작 후에도 RUNNING 상태의 미완료 Live Activity 스케줄이 복구된다
  • APNs 요청 payload에 content-state, discoveredStarCount, remainingSeconds, constellationPreview, rotationRadians가 명세대로 포함된다
  • constellationPreview.starsedges가 서버 DB 별자리 템플릿 기준 순서로 생성된다
  • register, push token upsert, APNs 요청 요약, APNs 응답 status/apns-id/reason, 스케줄 등록/취소/재등록, 마지막 전송 discoveredStarCount 로그가 남는다
  • 개발 환경에서 APNs sandbox 기준으로 설정 가능하다
  • 백엔드 테스트가 통과하고 기본 회귀 시나리오(register, pause, resume, end)가 검증된다

영향도

  • 스키마 변경(마이그레이션 필요)
  • 외부 API 계약 변경(버저닝 필요)
  • Config/프로파일(application-*.yml) 변경
  • 메시징/Kafka/RabbitMQ
  • 모바일/안드로이드 API 영향

의존성(Gradle/Maven) 추가/업데이트

No response

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request
No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions