From b61f432b72b1bb10ed5393750a60a5ec5cffce76 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Wed, 17 Dec 2025 00:16:29 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BA=90=EB=A6=AD=ED=84=B0=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20-=20=EC=96=B8=EC=96=B4=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=B2=88=EC=97=AD=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=EB=A5=BC=20=ED=91=9C=EC=8B=9C=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Detail/CharacterDetailResponse.swift | 20 +++++++++++++++++++ .../Detail/CharacterDetailView.swift | 20 +++++++++---------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/SodaLive/Sources/Chat/Character/Detail/CharacterDetailResponse.swift b/SodaLive/Sources/Chat/Character/Detail/CharacterDetailResponse.swift index 41345ef..54d250b 100644 --- a/SodaLive/Sources/Chat/Character/Detail/CharacterDetailResponse.swift +++ b/SodaLive/Sources/Chat/Character/Detail/CharacterDetailResponse.swift @@ -22,6 +22,7 @@ struct CharacterDetailResponse: Decodable { let others: [OtherCharacter] let latestComment: CharacterCommentResponse? let totalComments: Int + let translated: TranslatedAiCharacterDetail? } enum CharacterType: String, Decodable { @@ -44,3 +45,22 @@ struct CharacterBackgroundResponse: Decodable { let topic: String let description: String } + +struct TranslatedAiCharacterDetail: Decodable { + let name: String? + let description: String? + let gender: String? + let personality: TranslatedAiCharacterPersonality? + let background: TranslatedAiCharacterBackground? + let tags: String? +} + +struct TranslatedAiCharacterPersonality: Decodable { + let trait: String? + let description: String? +} + +struct TranslatedAiCharacterBackground: Decodable { + let topic: String? + let description: String? +} diff --git a/SodaLive/Sources/Chat/Character/Detail/CharacterDetailView.swift b/SodaLive/Sources/Chat/Character/Detail/CharacterDetailView.swift index 39ec547..30038c7 100644 --- a/SodaLive/Sources/Chat/Character/Detail/CharacterDetailView.swift +++ b/SodaLive/Sources/Chat/Character/Detail/CharacterDetailView.swift @@ -59,7 +59,7 @@ struct CharacterDetailView: View { // 세계관 및 작품 소개 if let backgrounds = viewModel.characterDetail?.backgrounds { - worldViewSection(backgrounds: backgrounds) + worldViewSection(backgrounds: viewModel.characterDetail?.translated?.background?.description ?? backgrounds.description) } // 원작 섹션 @@ -70,7 +70,7 @@ struct CharacterDetailView: View { // 성격 및 특징 섹션 if let personalities = viewModel.characterDetail?.personalities { - personalitySection(personalities: personalities) + personalitySection(personalities: viewModel.characterDetail?.translated?.personality?.description ?? personalities.description) } // 장르의 다른 캐릭터 섹션 @@ -204,7 +204,7 @@ extension CharacterDetailView { { HStack(spacing: 4) { if let gender = viewModel.characterDetail?.gender { - Text(gender) + Text(viewModel.characterDetail?.translated?.gender ?? gender) .font(.custom(Font.preRegular.rawValue, size: 14)) .foregroundColor( gender == "남성" ? @@ -262,7 +262,7 @@ extension CharacterDetailView { // 이름과 상태 HStack(spacing: 8) { - Text(viewModel.characterDetail?.name ?? "") + Text(viewModel.characterDetail?.translated?.name ?? viewModel.characterDetail?.name ?? "") .font(.custom(Font.preBold.rawValue, size: 26)) .foregroundColor(.white) .lineLimit(1) @@ -282,11 +282,11 @@ extension CharacterDetailView { } // 설명 - Text(viewModel.characterDetail?.description ?? "") + Text(viewModel.characterDetail?.translated?.description ?? viewModel.characterDetail?.description ?? "") .font(.custom(Font.preRegular.rawValue, size: 18)) .foregroundColor(Color(hex: "B0BEC5")) - Text(viewModel.characterDetail?.tags ?? "") + Text(viewModel.characterDetail?.translated?.tags ?? viewModel.characterDetail?.tags ?? "") .font(.custom(Font.preRegular.rawValue, size: 14)) .foregroundColor(Color(hex: "3BB9F1")) .multilineTextAlignment(.leading) @@ -297,7 +297,7 @@ extension CharacterDetailView { // MARK: - World View Section extension CharacterDetailView { - private func worldViewSection(backgrounds: CharacterBackgroundResponse) -> some View { + private func worldViewSection(backgrounds: String) -> some View { VStack(alignment: .leading, spacing: 8) { HStack { Text("[세계관 및 작품 소개]") @@ -307,7 +307,7 @@ extension CharacterDetailView { Spacer() } - CharacterExpandableTextView(text: backgrounds.description) + CharacterExpandableTextView(text: backgrounds) } .padding(.horizontal, 24) } @@ -357,7 +357,7 @@ extension CharacterDetailView { // MARK: - Personality Section extension CharacterDetailView { - private func personalitySection(personalities: CharacterPersonalityResponse) -> some View { + private func personalitySection(personalities: String) -> some View { VStack(alignment: .leading, spacing: 8) { HStack { Text("[성격 및 특징]") @@ -367,7 +367,7 @@ extension CharacterDetailView { Spacer() } - CharacterExpandableTextView(text: personalities.description) + CharacterExpandableTextView(text: personalities) // 캐릭터톡 대화 가이드 VStack(alignment: .leading, spacing: 16) {