diff --git a/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt index 833608ea5..d8ba47d5a 100644 --- a/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt +++ b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt @@ -22,28 +22,37 @@ import kotlinx.datetime.Instant * A [NewsResource] with additional user information such as whether the user is following the * news resource's topics and whether they have saved (bookmarked) this news resource. */ -data class UserNewsResource( - val newsResource: NewsResource, - val userData: UserData, +data class UserNewsResource internal constructor( + val id: String, + val title: String, + val content: String, + val url: String, + val headerImageUrl: String?, + val publishDate: Instant, + val type: String, + val followableTopics: List, + val isSaved: Boolean, + val hasBeenViewed: Boolean, + val bookmarkNote: String?, ) { - val id: String get() = newsResource.id - val title: String get() = newsResource.title - val content: String get() = newsResource.content - val url: String get() = newsResource.url - val headerImageUrl: String? get() = newsResource.headerImageUrl - val publishDate: Instant get() = newsResource.publishDate - val type: String get() = newsResource.type - val followableTopics: List - get() = newsResource.topics.map { topic -> + constructor(newsResource: NewsResource, userData: UserData) : this( + id = newsResource.id, + title = newsResource.title, + content = newsResource.content, + url = newsResource.url, + headerImageUrl = newsResource.headerImageUrl, + publishDate = newsResource.publishDate, + type = newsResource.type, + followableTopics = newsResource.topics.map { topic -> FollowableTopic( topic = topic, isFollowed = topic.id in userData.followedTopics, ) - } - val isSaved: Boolean get() = newsResource.id in userData.bookmarkedNewsResources - val hasBeenViewed: Boolean get() = newsResource.id in userData.viewedNewsResources - val bookmarkNote: String? - get() = userData.bookmarkNotes[newsResource.id].takeIf { !it.isNullOrBlank() } + }, + isSaved = newsResource.id in userData.bookmarkedNewsResources, + hasBeenViewed = newsResource.id in userData.viewedNewsResources, + bookmarkNote = userData.bookmarkNotes[newsResource.id].takeIf { !it.isNullOrBlank() }, + ) } fun List.mapToUserNewsResources(userData: UserData): List =