anovo-api / models /db_models.py
rushabh13's picture
deploy: QA bug-fix batch (BUG-001..047)
11463f1
Raw
History Blame Contribute Delete
1.61 kB
"""SQLAlchemy ORM models for users and history."""
from datetime import datetime
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String(64), unique=True, index=True, nullable=False)
email = Column(String(255), unique=True, index=True, nullable=False)
hashed_password = Column(String(255), nullable=False)
is_premium = Column(Boolean, default=False, nullable=False)
is_admin = Column(Boolean, default=False, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow)
# Password reset. Only the SHA-256 hash of the token is stored, so a database
# leak cannot be replayed to take over accounts. Both columns are cleared
# once a token is used, making each token single-use.
reset_token_hash = Column(String(64), nullable=True, index=True)
reset_token_expires = Column(DateTime, nullable=True)
history = relationship("HistoryEntry", back_populates="user", cascade="all, delete-orphan")
class HistoryEntry(Base):
__tablename__ = "history"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
tool = Column(String(64), nullable=False)
input_text = Column(Text, nullable=False)
output_text = Column(Text, nullable=False)
created_at = Column(DateTime, default=datetime.utcnow)
user = relationship("User", back_populates="history")