from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, update, delete from sqlalchemy.future import select from app.models.users import User from app.schemas.user import UserCreate, UserUpdate async def get_user(db: AsyncSession, user_id: int): result = await db.execute(select(User).filter(User.id == user_id)) return result.scalars().first() async def get_user_by_openid(db: AsyncSession, openid: str): result = await db.execute(select(User).filter(User.openid == openid)) return result.scalars().first() async def get_users(db: AsyncSession, skip: int = 0, limit: int = 100): result = await db.execute(select(User).offset(skip).limit(limit)) return result.scalars().all() async def create_user(db: AsyncSession, user: UserCreate): db_user = User( openid=user.openid, unionid=user.unionid, avatar=user.avatar, nickname=user.nickname ) db.add(db_user) await db.commit() await db.refresh(db_user) return db_user async def update_user(db: AsyncSession, user_id: int, user_update: UserUpdate): update_data = user_update.model_dump(exclude_unset=True) if not update_data: # 没有要更新的数据 return await get_user(db, user_id) # 先获取用户 db_user = await get_user(db, user_id) if not db_user: return None # 更新用户数据 for key, value in update_data.items(): setattr(db_user, key, value) await db.commit() await db.refresh(db_user) return db_user async def delete_user(db: AsyncSession, user_id: int): db_user = await get_user(db, user_id) if db_user: await db.delete(db_user) await db.commit() return db_user