63 lines
2.1 KiB
Python
63 lines
2.1 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 get_user_by_user_code(db: AsyncSession, user_code: str):
|
|
result = await db.execute(select(User).filter(User.user_code == user_code))
|
|
return result.scalars().first()
|
|
|
|
async def create_user(db: AsyncSession, user: UserCreate):
|
|
db_user = User(
|
|
openid=user.openid,
|
|
unionid=user.unionid,
|
|
avatar=user.avatar,
|
|
nickname=user.nickname,
|
|
user_code=user.user_code,
|
|
tryon_remain_count=user.tryon_remain_count,
|
|
referral_code=user.referral_code
|
|
)
|
|
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():
|
|
if value is not None:
|
|
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 |