from typing import Optional from sqlalchemy import CHAR, Index, String, TIMESTAMP, text from sqlalchemy.dialects.mysql import INTEGER, TINYINT from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column import datetime class Base(DeclarativeBase): pass class AlertEndpoints(Base): __tablename__ = 'alert_endpoints' __table_args__ = ( Index('ix_alert_endpoints_username', 'username'), Index('url', 'url', unique=True) ) id: Mapped[int] = mapped_column(INTEGER(11), primary_key=True) username: Mapped[Optional[str]] = mapped_column(String(64)) url: Mapped[Optional[str]] = mapped_column(String(2048)) auth: Mapped[Optional[str]] = mapped_column(String(2048)) p256dh: Mapped[Optional[str]] = mapped_column(String(2048)) created_at: Mapped[Optional[datetime.datetime]] = mapped_column(TIMESTAMP, server_default=text('current_timestamp()')) class Uploads(Base): __tablename__ = 'uploads' hash: Mapped[str] = mapped_column(CHAR(64), primary_key=True) expiry: Mapped[Optional[datetime.datetime]] = mapped_column(TIMESTAMP, server_default=text('(current_timestamp()')) class Users(Base): __tablename__ = 'users' username: Mapped[str] = mapped_column(String(64), primary_key=True) password: Mapped[str] = mapped_column(String(128)) created_at: Mapped[Optional[datetime.datetime]] = mapped_column(TIMESTAMP, server_default=text('current_timestamp()')) temporary: Mapped[Optional[int]] = mapped_column(TINYINT(1), server_default=text('1'))