feat: 完善生产级 Rust Web 模板

This commit is contained in:
2026-07-21 16:00:03 +08:00
parent fb30d5da1a
commit ce89569bf3
58 changed files with 2042 additions and 349 deletions
@@ -0,0 +1,40 @@
use crate::domain::{dto::user::UpdateProfileRequest, entities::user_profiles};
use anyhow::Result;
use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait, Set, TryIntoModel};
pub struct UserProfileRepository {
db: DatabaseConnection,
}
impl UserProfileRepository {
pub fn new(db: DatabaseConnection) -> Self {
Self { db }
}
pub async fn get(&self, user_id: &str) -> Result<Option<user_profiles::Model>> {
Ok(user_profiles::Entity::find_by_id(user_id)
.one(&self.db)
.await?)
}
pub async fn upsert(
&self,
user_id: String,
input: UpdateProfileRequest,
) -> Result<user_profiles::Model> {
let existing = self.get(&user_id).await?;
let mut model = existing
.map(Into::into)
.unwrap_or_else(|| user_profiles::ActiveModel {
user_id: Set(user_id),
..Default::default()
});
model.display_name = Set(input.display_name);
model.avatar_url = Set(input.avatar_url);
model.bio = Set(input.bio);
Ok(model.save(&self.db).await?.try_into_model()?)
}
pub async fn delete(&self, user_id: &str) -> Result<()> {
user_profiles::Entity::delete_by_id(user_id)
.exec(&self.db)
.await?;
Ok(())
}
}