문제
GET /api/v1/rooms/{slug}의 thumbnailUrl / thumbnailUrls는 현재 다음 두 출처를 같은 필드로 합쳐 반환합니다.
- 방장이 업로드한 커스텀 방 썸네일
- 커스텀 썸네일이 없을 때의 현재 재생 곡 썸네일 fallback
프론트의 방 수정 화면은 기존 커스텀 썸네일 존재 여부를 알아야 업로드/기본 이미지 카드의 초기 선택과 DELETE /api/v2/rooms/{slug}/thumbnail 의도를 결정할 수 있지만, 현재 응답만으로는 출처를 신뢰성 있게 구분할 수 없습니다.
재현
- 커스텀 썸네일 없이 기본 이미지를 선택해 방을 생성합니다.
- 방에서 곡을 재생합니다.
- 방 메타 조회 시 현재 곡 이미지가
thumbnailUrl(s)에 반환됩니다.
- 방 수정 화면은 이를 업로드된 방 썸네일로 오인해 업로드 카드가 선택된 상태로 열립니다.
- 기본 이미지로 저장하면 실제 커스텀 이미지가 없는데도 DELETE 요청 의도가 만들어집니다.
관련 프론트 리뷰: Queuing-org/frontend#52 (comment)
요청 계약
URL 도메인이나 경로를 추론하지 않고 출처를 판별할 수 있는 명시적 응답 필드를 추가해 주세요.
권장안:
{
"hasCustomThumbnail": true
}
또는:
{
"thumbnailSource": "CUSTOM"
}
thumbnailSource를 사용하는 경우 CUSTOM | CURRENT_TRACK | NONE처럼 출처를 완전히 표현할 수 있으면 좋습니다. 별도 nullable customThumbnailUrl(s) 필드도 가능합니다.
수용 기준
- 커스텀 방 썸네일이 있으면 명시적 필드로 식별할 수 있습니다.
- 커스텀 썸네일 없이 현재 곡 fallback만 있으면 커스텀 썸네일 없음으로 식별됩니다.
- 커스텀 썸네일과 현재 곡이 모두 없을 때도 구분됩니다.
- 기존
thumbnailUrl(s) 표시 fallback 동작은 호환성을 위해 유지할 수 있습니다.
- OpenAPI 설명과 응답/서비스 테스트에 세 상태가 고정됩니다.
- 프론트는 이 신호를 기준으로 수정 화면 초기 카드와 DELETE 예약 여부를 결정합니다.
문제
GET /api/v1/rooms/{slug}의thumbnailUrl/thumbnailUrls는 현재 다음 두 출처를 같은 필드로 합쳐 반환합니다.프론트의 방 수정 화면은 기존 커스텀 썸네일 존재 여부를 알아야 업로드/기본 이미지 카드의 초기 선택과
DELETE /api/v2/rooms/{slug}/thumbnail의도를 결정할 수 있지만, 현재 응답만으로는 출처를 신뢰성 있게 구분할 수 없습니다.재현
thumbnailUrl(s)에 반환됩니다.관련 프론트 리뷰: Queuing-org/frontend#52 (comment)
요청 계약
URL 도메인이나 경로를 추론하지 않고 출처를 판별할 수 있는 명시적 응답 필드를 추가해 주세요.
권장안:
{ "hasCustomThumbnail": true }또는:
{ "thumbnailSource": "CUSTOM" }thumbnailSource를 사용하는 경우CUSTOM | CURRENT_TRACK | NONE처럼 출처를 완전히 표현할 수 있으면 좋습니다. 별도 nullablecustomThumbnailUrl(s)필드도 가능합니다.수용 기준
thumbnailUrl(s)표시 fallback 동작은 호환성을 위해 유지할 수 있습니다.