first commit
This commit is contained in:
50
MeetSpot/app/db/crud.py
Normal file
50
MeetSpot/app/db/crud.py
Normal file
@@ -0,0 +1,50 @@
|
||||
"""常用数据库操作封装。"""
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.user import User
|
||||
|
||||
|
||||
def _default_nickname(phone: str) -> str:
|
||||
suffix = phone[-4:] if len(phone) >= 4 else phone
|
||||
return f"用户{suffix}"
|
||||
|
||||
|
||||
async def get_user_by_phone(db: AsyncSession, phone: str) -> Optional[User]:
|
||||
"""根据手机号查询用户。"""
|
||||
stmt = select(User).where(User.phone == phone)
|
||||
result = await db.execute(stmt)
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
|
||||
async def get_user_by_id(db: AsyncSession, user_id: str) -> Optional[User]:
|
||||
"""根据ID查询用户。"""
|
||||
stmt = select(User).where(User.id == user_id)
|
||||
result = await db.execute(stmt)
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
|
||||
async def create_user(
|
||||
db: AsyncSession, phone: str, nickname: Optional[str] = None, avatar_url: str = ""
|
||||
) -> User:
|
||||
"""创建新用户。"""
|
||||
user = User(
|
||||
phone=phone,
|
||||
nickname=nickname or _default_nickname(phone),
|
||||
avatar_url=avatar_url or "",
|
||||
)
|
||||
db.add(user)
|
||||
await db.commit()
|
||||
await db.refresh(user)
|
||||
return user
|
||||
|
||||
|
||||
async def touch_last_login(db: AsyncSession, user: User) -> None:
|
||||
"""更新用户最近登录时间。"""
|
||||
user.last_login = datetime.utcnow()
|
||||
await db.commit()
|
||||
|
||||
Reference in New Issue
Block a user