refactor(adapters): update FeedEntry construction to use EngagementStats + ViewerContext
This commit is contained in:
@@ -97,11 +97,12 @@ fn row_to_entry(r: FeedRow) -> Result<FeedEntry, DomainError> {
|
|||||||
Ok(FeedEntry {
|
Ok(FeedEntry {
|
||||||
thought,
|
thought,
|
||||||
author,
|
author,
|
||||||
like_count: r.like_count,
|
stats: domain::models::feed::EngagementStats {
|
||||||
boost_count: r.boost_count,
|
like_count: r.like_count,
|
||||||
reply_count: r.reply_count,
|
boost_count: r.boost_count,
|
||||||
liked_by_viewer: false,
|
reply_count: r.reply_count,
|
||||||
boosted_by_viewer: false,
|
},
|
||||||
|
viewer: None, // Task 3 will fix this to use real viewer data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ fn feed_select(viewer: Option<uuid::Uuid>) -> String {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn row_to_entry(r: FeedRow) -> Result<FeedEntry, DomainError> {
|
fn row_to_entry(r: FeedRow, viewer: Option<uuid::Uuid>) -> Result<FeedEntry, DomainError> {
|
||||||
let thought = Thought {
|
let thought = Thought {
|
||||||
id: ThoughtId::from_uuid(r.thought_id),
|
id: ThoughtId::from_uuid(r.thought_id),
|
||||||
user_id: UserId::from_uuid(r.t_user_id),
|
user_id: UserId::from_uuid(r.t_user_id),
|
||||||
@@ -136,11 +136,15 @@ fn row_to_entry(r: FeedRow) -> Result<FeedEntry, DomainError> {
|
|||||||
Ok(FeedEntry {
|
Ok(FeedEntry {
|
||||||
thought,
|
thought,
|
||||||
author,
|
author,
|
||||||
like_count: r.like_count,
|
stats: domain::models::feed::EngagementStats {
|
||||||
boost_count: r.boost_count,
|
like_count: r.like_count,
|
||||||
reply_count: r.reply_count,
|
boost_count: r.boost_count,
|
||||||
liked_by_viewer: r.liked_by_viewer,
|
reply_count: r.reply_count,
|
||||||
boosted_by_viewer: r.boosted_by_viewer,
|
},
|
||||||
|
viewer: viewer.map(|_| domain::models::feed::ViewerContext {
|
||||||
|
liked: r.liked_by_viewer,
|
||||||
|
boosted: r.boosted_by_viewer,
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +182,7 @@ impl FeedRepository for PgFeedRepository {
|
|||||||
Ok(Paginated {
|
Ok(Paginated {
|
||||||
items: rows
|
items: rows
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(row_to_entry)
|
.map(|r| row_to_entry(r, viewer))
|
||||||
.collect::<Result<Vec<_>, _>>()?,
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
total,
|
total,
|
||||||
page: page.page,
|
page: page.page,
|
||||||
@@ -211,7 +215,7 @@ impl FeedRepository for PgFeedRepository {
|
|||||||
Ok(Paginated {
|
Ok(Paginated {
|
||||||
items: rows
|
items: rows
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(row_to_entry)
|
.map(|r| row_to_entry(r, viewer))
|
||||||
.collect::<Result<Vec<_>, _>>()?,
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
total,
|
total,
|
||||||
page: page.page,
|
page: page.page,
|
||||||
@@ -247,7 +251,7 @@ impl FeedRepository for PgFeedRepository {
|
|||||||
Ok(Paginated {
|
Ok(Paginated {
|
||||||
items: rows
|
items: rows
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(row_to_entry)
|
.map(|r| row_to_entry(r, viewer))
|
||||||
.collect::<Result<Vec<_>, _>>()?,
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
total,
|
total,
|
||||||
page: page.page,
|
page: page.page,
|
||||||
@@ -292,7 +296,7 @@ impl FeedRepository for PgFeedRepository {
|
|||||||
Ok(Paginated {
|
Ok(Paginated {
|
||||||
items: rows
|
items: rows
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(row_to_entry)
|
.map(|r| row_to_entry(r, viewer))
|
||||||
.collect::<Result<Vec<_>, _>>()?,
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
total,
|
total,
|
||||||
page: page.page,
|
page: page.page,
|
||||||
@@ -335,7 +339,7 @@ impl FeedRepository for PgFeedRepository {
|
|||||||
Ok(Paginated {
|
Ok(Paginated {
|
||||||
items: rows
|
items: rows
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(row_to_entry)
|
.map(|r| row_to_entry(r, viewer))
|
||||||
.collect::<Result<Vec<_>, _>>()?,
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
total,
|
total,
|
||||||
page: page.page,
|
page: page.page,
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ pub fn to_thought_response(e: &domain::models::feed::FeedEntry) -> ThoughtRespon
|
|||||||
visibility: e.thought.visibility.as_str().to_string(),
|
visibility: e.thought.visibility.as_str().to_string(),
|
||||||
content_warning: e.thought.content_warning.clone(),
|
content_warning: e.thought.content_warning.clone(),
|
||||||
sensitive: e.thought.sensitive,
|
sensitive: e.thought.sensitive,
|
||||||
like_count: e.like_count,
|
like_count: e.stats.like_count,
|
||||||
boost_count: e.boost_count,
|
boost_count: e.stats.boost_count,
|
||||||
reply_count: e.reply_count,
|
reply_count: e.stats.reply_count,
|
||||||
liked_by_viewer: e.liked_by_viewer,
|
liked_by_viewer: e.viewer.as_ref().map(|v| v.liked).unwrap_or(false),
|
||||||
boosted_by_viewer: e.boosted_by_viewer,
|
boosted_by_viewer: e.viewer.as_ref().map(|v| v.boosted).unwrap_or(false),
|
||||||
created_at: e.thought.created_at,
|
created_at: e.thought.created_at,
|
||||||
updated_at: e.thought.updated_at,
|
updated_at: e.thought.updated_at,
|
||||||
}
|
}
|
||||||
@@ -103,15 +103,8 @@ pub async fn search_handler(
|
|||||||
let query = q.q.trim().to_string();
|
let query = q.q.trim().to_string();
|
||||||
|
|
||||||
let (thoughts_result, users_result) = tokio::join!(
|
let (thoughts_result, users_result) = tokio::join!(
|
||||||
s.search.search_thoughts(
|
s.search.search_thoughts(&query, &page, viewer.as_ref()),
|
||||||
&query,
|
s.search.search_users(&query, &page),
|
||||||
&page,
|
|
||||||
viewer.as_ref()
|
|
||||||
),
|
|
||||||
s.search.search_users(
|
|
||||||
&query,
|
|
||||||
&page
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let thoughts = thoughts_result?
|
let thoughts = thoughts_result?
|
||||||
@@ -122,9 +115,9 @@ pub async fn search_handler(
|
|||||||
"id": e.thought.id.as_uuid(),
|
"id": e.thought.id.as_uuid(),
|
||||||
"content": e.thought.content.as_str(),
|
"content": e.thought.content.as_str(),
|
||||||
"author": to_user_response(&e.author),
|
"author": to_user_response(&e.author),
|
||||||
"like_count": e.like_count,
|
"like_count": e.stats.like_count,
|
||||||
"boost_count": e.boost_count,
|
"boost_count": e.stats.boost_count,
|
||||||
"reply_count": e.reply_count,
|
"reply_count": e.stats.reply_count,
|
||||||
"created_at": e.thought.created_at,
|
"created_at": e.thought.created_at,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user