api/app/services/user.py
2025-04-09 10:49:02 +08:00

55 lines
1.7 KiB
Python

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