refactor(application): delete shallow feed use cases — keep only get_home_feed
This commit is contained in:
@@ -1,10 +1,7 @@
|
|||||||
use domain::{
|
use domain::{
|
||||||
errors::DomainError,
|
errors::DomainError,
|
||||||
models::{
|
models::feed::{FeedEntry, PageParams, Paginated},
|
||||||
feed::{FeedEntry, PageParams, Paginated, UserSummary},
|
ports::{FeedQuery, FeedRepository, FollowRepository},
|
||||||
user::User,
|
|
||||||
},
|
|
||||||
ports::{FeedQuery, FeedRepository, FollowRepository, TagRepository, UserReader},
|
|
||||||
value_objects::UserId,
|
value_objects::UserId,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -15,88 +12,6 @@ pub async fn get_home_feed(
|
|||||||
page: PageParams,
|
page: PageParams,
|
||||||
) -> Result<Paginated<FeedEntry>, DomainError> {
|
) -> Result<Paginated<FeedEntry>, DomainError> {
|
||||||
let mut following_ids = follows.get_accepted_following_ids(user_id).await?;
|
let mut following_ids = follows.get_accepted_following_ids(user_id).await?;
|
||||||
following_ids.push(user_id.clone()); // include own thoughts in home feed
|
following_ids.push(user_id.clone());
|
||||||
feed.query(&FeedQuery::home(user_id.clone(), following_ids, page)).await
|
feed.query(&FeedQuery::home(user_id.clone(), following_ids, page)).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_public_feed(
|
|
||||||
feed: &dyn FeedRepository,
|
|
||||||
viewer_id: Option<&UserId>,
|
|
||||||
page: PageParams,
|
|
||||||
) -> Result<Paginated<FeedEntry>, DomainError> {
|
|
||||||
feed.query(&FeedQuery::public(page, viewer_id.cloned())).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_user_feed(
|
|
||||||
feed: &dyn FeedRepository,
|
|
||||||
user_id: &UserId,
|
|
||||||
page: PageParams,
|
|
||||||
viewer_id: Option<&UserId>,
|
|
||||||
) -> Result<Paginated<FeedEntry>, DomainError> {
|
|
||||||
feed.query(&FeedQuery::user(user_id.clone(), page, viewer_id.cloned())).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_followers(
|
|
||||||
follows: &dyn FollowRepository,
|
|
||||||
user_id: &UserId,
|
|
||||||
page: PageParams,
|
|
||||||
) -> Result<Paginated<User>, DomainError> {
|
|
||||||
follows.list_followers(user_id, &page).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_following(
|
|
||||||
follows: &dyn FollowRepository,
|
|
||||||
user_id: &UserId,
|
|
||||||
page: PageParams,
|
|
||||||
) -> Result<Paginated<User>, DomainError> {
|
|
||||||
follows.list_following(user_id, &page).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_by_tag(
|
|
||||||
feed: &dyn FeedRepository,
|
|
||||||
tag_name: &str,
|
|
||||||
page: PageParams,
|
|
||||||
viewer_id: Option<&UserId>,
|
|
||||||
) -> Result<Paginated<FeedEntry>, DomainError> {
|
|
||||||
feed.query(&FeedQuery::tag(tag_name, page, viewer_id.cloned())).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn search(
|
|
||||||
feed: &dyn FeedRepository,
|
|
||||||
query: &str,
|
|
||||||
page: PageParams,
|
|
||||||
viewer_id: Option<&UserId>,
|
|
||||||
) -> Result<Paginated<FeedEntry>, DomainError> {
|
|
||||||
feed.query(&FeedQuery::search(query, page, viewer_id.cloned())).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn list_users(users: &dyn UserReader) -> Result<Vec<UserSummary>, DomainError> {
|
|
||||||
users.list_with_stats().await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn list_users_paginated(
|
|
||||||
users: &dyn UserReader,
|
|
||||||
page: PageParams,
|
|
||||||
) -> Result<Paginated<UserSummary>, DomainError> {
|
|
||||||
let all = users.list_with_stats().await?;
|
|
||||||
let total = all.len() as i64;
|
|
||||||
let start = ((page.page.saturating_sub(1)) * page.per_page) as usize;
|
|
||||||
let items: Vec<UserSummary> = all
|
|
||||||
.into_iter()
|
|
||||||
.skip(start)
|
|
||||||
.take(page.per_page as usize)
|
|
||||||
.collect();
|
|
||||||
Ok(Paginated {
|
|
||||||
items,
|
|
||||||
total,
|
|
||||||
page: page.page,
|
|
||||||
per_page: page.per_page,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_popular_tags(
|
|
||||||
tags: &dyn TagRepository,
|
|
||||||
limit: usize,
|
|
||||||
) -> Result<Vec<(String, i64)>, DomainError> {
|
|
||||||
tags.popular_tags(limit).await
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user