ReminderBot/bot/models/user.py
leo f453a7917e Initial commit: add reminderBot project structure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 11:40:58 +08:00

37 lines
1.3 KiB
Python

from datetime import datetime, timezone
from sqlalchemy import BigInteger, DateTime, Integer, String, func
from sqlalchemy.orm import Mapped, Session, mapped_column
from bot.models.database import Base
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
telegram_id: Mapped[int] = mapped_column(BigInteger, unique=True, nullable=False)
username: Mapped[str | None] = mapped_column(String(128))
timezone: Mapped[str] = mapped_column(String(64), default="Asia/Shanghai")
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now()
)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
)
@classmethod
def get_or_create(
cls, session: Session, telegram_id: int, username: str | None = None
) -> "User":
user = session.query(cls).filter_by(telegram_id=telegram_id).first()
if user is None:
user = cls(telegram_id=telegram_id, username=username)
session.add(user)
session.commit()
elif username and user.username != username:
user.username = username
user.updated_at = datetime.now(timezone.utc)
session.commit()
return user