use sea_orm::*; use crate::models::user::{self, Entity as User, Model as UserModel}; use crate::models::family::{Entity as Family}; pub struct UserService; #[derive(Debug)] pub struct LeaveFamilyResult { pub family_deleted: bool, } impl UserService { pub async fn leave_family(db: &DatabaseConnection, user_id: i32) -> Result { let user = User::find_by_id(user_id) .one(db) .await? .ok_or(DbErr::RecordNotFound("User not found".to_string()))?; let family_id = user.family_id .ok_or(DbErr::Custom("User is not in a family".to_string()))?; let mut user_active: user::ActiveModel = user.into(); user_active.family_id = Set(None); user_active.update(db).await?; let remaining_members = User::find() .filter(user::Column::FamilyId.eq(family_id)) .count(db) .await?; let family_deleted = if remaining_members == 0 { Family::delete_by_id(family_id).exec(db).await?; true } else { false }; Ok(LeaveFamilyResult { family_deleted }) } pub async fn find_by_id(db: &DatabaseConnection, id: i32) -> Result, DbErr> { User::find_by_id(id).one(db).await } }