from typing import List, Optional from sqlalchemy.orm import Session from sqlalchemy.exc import IntegrityError from fastapi import HTTPException from app.database.models import User from app.schemas.user import UserCreate, UserUpdate class UserService: @staticmethod def get_all_users(db: Session) -> List[User]: """获取所有用户""" return db.query(User).all() @staticmethod def get_user_by_id(db: Session, user_id: int) -> Optional[User]: """根据ID获取用户""" return db.query(User).filter(User.id == user_id).first() @staticmethod def create_user(db: Session, user_data: UserCreate) -> User: """创建新用户""" try: db_user = User( username=user_data.username, email=user_data.email, full_name=user_data.full_name ) db.add(db_user) db.commit() db.refresh(db_user) return db_user except IntegrityError as e: db.rollback() error_msg = str(e.orig) if "username" in error_msg: raise HTTPException(status_code=409, detail="Username already exists") elif "email" in error_msg: raise HTTPException(status_code=409, detail="Email already exists") else: raise HTTPException(status_code=409, detail="Data conflict") except Exception as e: db.rollback() raise HTTPException(status_code=500, detail="Internal server error") @staticmethod def update_user(db: Session, user_id: int, user_data: UserUpdate) -> Optional[User]: """更新用户信息""" try: db_user = db.query(User).filter(User.id == user_id).first() if not db_user: return None update_data = user_data.model_dump(exclude_unset=True) for field, value in update_data.items(): setattr(db_user, field, value) db.commit() db.refresh(db_user) return db_user except IntegrityError as e: db.rollback() error_msg = str(e.orig) if "username" in error_msg: raise HTTPException(status_code=409, detail="Username already exists") elif "email" in error_msg: raise HTTPException(status_code=409, detail="Email already exists") else: raise HTTPException(status_code=409, detail="Data conflict") except Exception as e: db.rollback() raise HTTPException(status_code=500, detail="Internal server error") @staticmethod def delete_user(db: Session, user_id: int) -> bool: """删除用户""" try: db_user = db.query(User).filter(User.id == user_id).first() if not db_user: return False db.delete(db_user) db.commit() return True except Exception as e: db.rollback() raise HTTPException(status_code=500, detail="Internal server error") user_service = UserService()