From 686dc1c91a12cb24f1f027ac50d28bb66c93c10d Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Fri, 15 May 2026 15:20:07 +0200 Subject: [PATCH] =?UTF-8?q?refactor(domain):=20FeedEntry=20=E2=80=94=20Eng?= =?UTF-8?q?agementStats=20+=20Option=20sub-structs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/domain/src/models/feed.rs | 35 ++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/crates/domain/src/models/feed.rs b/crates/domain/src/models/feed.rs index bdb1066..cc6bbe8 100644 --- a/crates/domain/src/models/feed.rs +++ b/crates/domain/src/models/feed.rs @@ -1,6 +1,30 @@ use crate::models::{thought::Thought, user::User}; use crate::value_objects::UserId; +#[derive(Debug, Clone)] +pub struct EngagementStats { + pub like_count: i64, + pub boost_count: i64, + pub reply_count: i64, +} + +/// Present only when an authenticated viewer made the request. +/// `liked`/`boosted` are the viewer's interaction state with this thought. +/// `None` means anonymous request or viewer context unavailable. +#[derive(Debug, Clone)] +pub struct ViewerContext { + pub liked: bool, + pub boosted: bool, +} + +#[derive(Debug, Clone)] +pub struct FeedEntry { + pub thought: Thought, + pub author: User, + pub stats: EngagementStats, + pub viewer: Option, +} + #[derive(Debug, Clone)] pub struct UserSummary { pub id: UserId, @@ -13,17 +37,6 @@ pub struct UserSummary { pub following_count: i64, } -#[derive(Debug, Clone)] -pub struct FeedEntry { - pub thought: Thought, - pub author: User, - pub like_count: i64, - pub boost_count: i64, - pub reply_count: i64, - pub liked_by_viewer: bool, - pub boosted_by_viewer: bool, -} - #[derive(Debug, Clone)] pub struct PageParams { pub page: u64,