시리즈 상세 - 번역 데이터가 있으면 번역 데이터를 표시하도록 수정
This commit is contained in:
@@ -17,6 +17,7 @@ struct GetSeriesDetailResponse: Decodable {
|
||||
let writer: String?
|
||||
let studio: String?
|
||||
let publishedDate: String
|
||||
let publishedDateUtc: String
|
||||
let creator: GetSeriesDetailCreator
|
||||
let rentalMinPrice: Int
|
||||
let rentalMaxPrice: Int
|
||||
@@ -27,6 +28,8 @@ struct GetSeriesDetailResponse: Decodable {
|
||||
let publishedDaysOfWeek: String
|
||||
let contentList: [GetSeriesContentListItem]
|
||||
let contentCount: Int
|
||||
let translated: TranslatedSeries?
|
||||
let translatedGenre: String?
|
||||
}
|
||||
|
||||
struct GetSeriesDetailCreator: Decodable {
|
||||
@@ -36,3 +39,51 @@ struct GetSeriesDetailCreator: Decodable {
|
||||
let isFollow: Bool
|
||||
let isNotify: Bool
|
||||
}
|
||||
|
||||
struct TranslatedSeries: Decodable {
|
||||
let title: String
|
||||
let introduction: String
|
||||
let keywords: [String]
|
||||
}
|
||||
|
||||
// 표시용 계산 프로퍼티: 번역 데이터가 있으면 번역을 우선 사용
|
||||
extension GetSeriesDetailResponse {
|
||||
// 번역된 제목 우선
|
||||
var displayTitle: String { translated?.title ?? title }
|
||||
// 번역된 소개 우선
|
||||
var displayIntroduction: String { translated?.introduction ?? introduction }
|
||||
// 번역된 키워드 우선
|
||||
var displayKeywords: [String] { translated?.keywords ?? keywordList }
|
||||
// 번역된 장르 우선
|
||||
var displayGenre: String { translatedGenre ?? genre }
|
||||
// ISO8601 UTC를 현재 타임존 기준 yyyy.MM.dd 포맷으로 변환
|
||||
var displayPublishedDate: String {
|
||||
// publishedDateUtc 예: ISO8601 문자열
|
||||
let iso = ISO8601DateFormatter()
|
||||
// .withInternetDateTime가 기본이지만, fractional seconds 등 다양한 포맷 대응
|
||||
iso.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
|
||||
|
||||
func format(_ date: Date) -> String {
|
||||
let formatter = DateFormatter()
|
||||
formatter.calendar = Calendar(identifier: .gregorian)
|
||||
formatter.timeZone = .current
|
||||
formatter.locale = Locale(identifier: Locale.current.identifier)
|
||||
formatter.dateFormat = "yyyy.MM.dd"
|
||||
return formatter.string(from: date)
|
||||
}
|
||||
|
||||
if let date = iso.date(from: publishedDateUtc) {
|
||||
return format(date)
|
||||
} else {
|
||||
// fractional seconds 미포함 대응
|
||||
let isoNoFrac = ISO8601DateFormatter()
|
||||
isoNoFrac.formatOptions = [.withInternetDateTime]
|
||||
if let date = isoNoFrac.date(from: publishedDateUtc) {
|
||||
return format(date)
|
||||
}
|
||||
}
|
||||
|
||||
// 파싱 실패 시 기존 표시값 폴백
|
||||
return publishedDate
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user