from flask_sqlalchemy import SQLAlchemy from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from datetime import datetime db = SQLAlchemy() class User(db.Model): __tablename__ = "users" steam_id: Mapped[int] = mapped_column(db.BigInteger, primary_key=True) personaname: Mapped[str] = mapped_column(db.String(80)) profile_url: Mapped[str] = mapped_column(db.String(200)) avatar: Mapped[str] = mapped_column(db.String(200)) avatar_medium: Mapped[str] = mapped_column(db.String(200)) avatar_full: Mapped[str] = mapped_column(db.String(200)) community_visibility_state: Mapped[int] = mapped_column(db.Integer) profile_state: Mapped[int] = mapped_column(db.Integer) last_logoff: Mapped[int] = mapped_column(db.Integer) def to_dict(self): return { "steam_id": self.steam_id, "personaname": self.personaname, "profile_url": self.profile_url, "avatar": self.avatar, "avatar_medium": self.avatar_medium, "avatar_full": self.avatar_full, "community_visibility_state": self.community_visibility_state, "profile_state": self.profile_state, "last_logoff": self.last_logoff, } class APICall(db.Model): __tablename__ = "api_calls" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(db.String(80), unique=True, nullable=False) call_count: Mapped[int] = mapped_column(db.Integer, default=0, nullable=False) first_called: Mapped[datetime] = mapped_column(db.DateTime, default=None, nullable=True) last_called: Mapped[datetime] = mapped_column(db.DateTime, default=datetime.utcnow, nullable=False) def register_call(self): """Increment call count and update timestamp.""" if self.call_count is None: self.call_count = 0 if self.first_called is None: self.first_called = datetime.now() self.call_count = self.call_count + 1 self.last_called = datetime.now() db.session.commit()