feat(application): all use cases

This commit is contained in:
2026-05-14 03:52:36 +02:00
parent 134ecdcfb4
commit adc2102927
9 changed files with 472 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
use domain::{
errors::DomainError,
models::{top_friend::TopFriend, user::User},
ports::{TopFriendRepository, UserRepository},
value_objects::{UserId, Username},
};
pub async fn get_user(users: &dyn UserRepository, user_id: &UserId) -> Result<User, DomainError> {
users.find_by_id(user_id).await?.ok_or(DomainError::NotFound)
}
pub async fn get_user_by_username(users: &dyn UserRepository, username: &str) -> Result<User, DomainError> {
let username = Username::from_trusted(username.to_string());
users.find_by_username(&username).await?.ok_or(DomainError::NotFound)
}
pub async fn update_profile(
users: &dyn UserRepository,
user_id: &UserId,
display_name: Option<String>,
bio: Option<String>,
avatar_url: Option<String>,
header_url: Option<String>,
custom_css: Option<String>,
) -> Result<(), DomainError> {
users.update_profile(user_id, display_name, bio, avatar_url, header_url, custom_css).await
}
pub async fn get_top_friends(top_friends: &dyn TopFriendRepository, user_id: &UserId) -> Result<Vec<(TopFriend, User)>, DomainError> {
top_friends.list_for_user(user_id).await
}
pub async fn set_top_friends(top_friends: &dyn TopFriendRepository, user_id: &UserId, friend_ids: Vec<UserId>) -> Result<(), DomainError> {
if friend_ids.len() > 8 { return Err(DomainError::InvalidInput("top friends: max 8".into())); }
let friends: Vec<(UserId, i16)> = friend_ids.into_iter().enumerate().map(|(i, id)| (id, (i + 1) as i16)).collect();
top_friends.set_top_friends(user_id, friends).await
}