test #369

Merged
klaus merged 90 commits from test into main 2025-12-31 05:44:55 +00:00
Owner
No description provided.
klaus added 90 commits 2025-12-31 01:58:51 +00:00
- CreateAudioContentRequest, GetAudioContentDetailResponse
- AudioContentLanguageDetectEvent -> LanguageDetectEvent
- LanguageDetectEvent의 contentId/commentId를 제거하고 공통 id(Long) 필드로 단순화
- LanguageDetectListener에서 targetType에 따라 id를 AudioContent/AudioContentComment/CharacterComment 조회에 사용하도록 수정
- AudioContentService, AudioContentCommentService, AudioContentDonationService, CharacterCommentService 등 이벤트 발행부를 새 시그니처(id + targetType)로 정리
- Interceptor에서 Accept-Language 헤더를 파싱
- 요청 단위 LangContext에 언어 정보 저장
- 서비스 및 예외 처리 계층에서 언어 컨텍스트 주입
- enum 및 when 기반 언어 정책을 한 곳으로 통합
- 온라인 경로에서 콘텐츠 테마 번역을 배치 조회/번역/저장으로 처리.
- 기존 번역은 IN 조회, 미번역만 한 번의 번역 요청 후 저장.
- 결과 순서 보전, 번역 누락/실패 시 원문으로 폴백.
- 공개 API 변경 없음.
- `SeriesTranslationPayload.keywords` 타입을 `String`에서 `List<String>`으로 변경했습니다.
- `SeriesTranslationPayloadConverter`의 `convertToEntityAttribute`를 하위 호환 가능하도록 수정했습니다.
  - DB에 저장된 JSON에서 `keywords`가 과거 스키마(String)인 경우와 신규 스키마(List)를 모두 안전하게 파싱합니다.
  - 파싱 실패 또는 공백 입력 시 기본값을 사용합니다(`keywords = []`).
- `convertToDatabaseColumn`은 변경 없이 `ObjectMapper`로 직렬화하여 `keywords`가 배열로 저장됩니다.
LangContext에 따라 카테고리명을 번역해 반환한다. 번역본이 없으면

Papago API로 번역 후 CategoryTranslation에 저장하고 즉시 결과를

반환한다. 공개 API의 getCategoryList 응답이 요청 로케일을 반영한다.
오디오 콘텐츠 목록 응답에서 테마 문자열에 번역을 적용한다.

번역 데이터가 없을 때는 기존 원문을 유지한다.
공개 API 변경 없음.
회원/인증 API 응답 메시지를 다국어 키로 분리함.
크리에이터 정산/시리즈 API 응답 메시지를 다국어 키로 제공한다.
알림/오디션 오류 응답 메시지를 키 기반 다국어로 분리
klaus merged commit 68197de095 into main 2025-12-31 05:44:55 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: klaus/sodalive-backend-spring-boot#369
No description provided.