from __future__ import annotations from datetime import datetime from sqlalchemy import DateTime, String, func from sqlalchemy.orm import Mapped, mapped_column from app.core.config import settings from app.db.base import Base class OpenCloudToken(Base): """username (preferred_username из Keycloak) -> зашифрованный App Token OpenCloud. Схема (если задана DATABASE_SCHEMA) применяется так же, как в примере DFiP Budget Planning — там она захардкожена ("v3"), здесь берётся из настроек, т.к. для SFM-parser отдельная схема ещё не выделена/не согласована. """ __tablename__ = "opencloud_token" __table_args__ = ( {"schema": settings.DATABASE_SCHEMA} if settings.DATABASE_SCHEMA else {} ) username: Mapped[str] = mapped_column(String, primary_key=True) encrypted_token: Mapped[str] = mapped_column(String, nullable=False) added_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now()) added_by: Mapped[str | None] = mapped_column(String, nullable=True)