Files
jusfutura/app/models.py
T
2026-08-19 21:57:01 -03:00

165 lines
5.6 KiB
Python

from sqlalchemy import Column, String, Text, DateTime, ForeignKey, Boolean, Integer
from sqlalchemy.orm import declarative_base, relationship
from datetime import datetime
#Base = declarative_base()
from db import Base
class Conversation(Base):
__tablename__ = "conversations"
id = Column(String, primary_key=True)
user_email = Column(String, index=True) # filter by user
title = Column(String)
messages = relationship("Message", back_populates="conversation")
attachments = relationship("Attachment", back_populates="conversation")
tags = Column(String) # comma-separated tags
shared = Column(String) # null or email of recipient
class Message(Base):
__tablename__ = "messages"
id = Column(String, primary_key=True)
conversation_id = Column(String, ForeignKey("conversations.id"))
role = Column(String)
content = Column(Text)
created_at = Column(DateTime, default=datetime.utcnow)
conversation = relationship("Conversation", back_populates="messages")
class Attachment(Base):
__tablename__ = "attachments"
id = Column(String, primary_key=True)
conversation_id = Column(String, ForeignKey("conversations.id"))
filename = Column(String)
mime_type = Column(String)
path = Column(String) # /data/<uuid>
conversation = relationship("Conversation", back_populates="attachments")
# ***
class User(Base):
__tablename__ = "users"
#id = Column(String, primary_key=True)
#email = Column(String, unique=True)
email = Column(String, primary_key=True)
name = Column(String)
password = Column(String)
totp_secret = Column(String, nullable=True)
twofa_enabled = Column(Boolean, default=False)
twofa_method = Column(String, default="totp")
twofa_secret = Column(String)
twofa_sensitive_actions = Column(Boolean, default=False)
role = Column(String, default="user") # "user", "admin"
consent_training = Column(Boolean, default=False)
terms_accepted_at = Column(DateTime, nullable=True)
privacy_accepted_at = Column(DateTime, nullable=True)
dpa_accepted_at = Column(DateTime, nullable=True)
cookies_accepted_at = Column(DateTime, nullable=True)
security_accepted_at = Column(DateTime, nullable=True)
can_use_audio = Column(Boolean, default=False)
can_use_vision = Column(Boolean, default=False)
can_share = Column(Boolean, default=True)
can_import_docs = Column(Boolean, default=True)
can_export_pdf = Column(Boolean, default=True)
can_export_md = Column(Boolean, default=True)
class Cache(Base):
__tablename__ = "cache"
key = Column(String, primary_key=True)
model = Column(String)
response = Column(Text)
created_at = Column(DateTime, default=datetime.utcnow)
class Preferences(Base):
__tablename__ = "preferences"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(String)
preferred_mode = Column(String, default="conversar")
auto_search = Column(Boolean, default=True)
auto_monitoring = Column(Boolean, default=False)
preferred_export = Column(String, default="pdfa")
likes_suggestions = Column(Boolean, default=True)
likes_quick_actions = Column(Boolean, default=True)
class Conversation(Base):
__tablename__ = "conversations"
id = Column(String, primary_key=True)
user_id = Column(String)
created_at = Column(DateTime, default=datetime.utcnow)
mode = Column(String)
context_summary = Column(Text)
class Message(Base):
__tablename__ = "messages"
id = Column(String, primary_key=True)
conversation_id = Column(String)
role = Column(String)
content = Column(Text)
metadata = Column(Text)
created_at = Column(DateTime, default=datetime.utcnow)
class MonitoringTopic(Base):
__tablename__ = "monitoring_topics"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(String)
label = Column(String)
sources = Column(Text)
created_at = Column(DateTime, default=datetime.utcnow)
active = Column(Boolean, default=True)
class Alert(Base):
__tablename__ = "alerts"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(String)
monitoring_topic_id = Column(Integer)
title = Column(String)
description = Column(Text)
source = Column(String)
created_at = Column(DateTime, default=datetime.utcnow)
class AuditTrail(Base):
__tablename__ = "audit_trail"
id = Column(Integer, primary_key=True, autoincrement=True)
user_email = Column(String)
action = Column(String)
details = Column(Text)
timestamp = Column(DateTime, default=datetime.utcnow)
# ***
# All comments are in English.
from sqlalchemy import Column, String, Text, DateTime, ForeignKey
from sqlalchemy.orm import declarative_base, relationship
from datetime import datetime
Base = declarative_base()
class Conversation(Base):
__tablename__ = "conversations"
id = Column(String, primary_key=True)
title = Column(String)
messages = relationship("Message", back_populates="conversation")
class Message(Base):
__tablename__ = "messages"
id = Column(String, primary_key=True)
conversation_id = Column(String, ForeignKey("conversations.id"))
role = Column(String) # "user" or "assistant"
content = Column(Text)
created_at = Column(DateTime, default=datetime.utcnow)
conversation = relationship("Conversation", back_populates="messages")
class Attachment(Base):
__tablename__ = "attachments"
id = Column(String, primary_key=True)
conversation_id = Column(String, ForeignKey("conversations.id"))
filename = Column(String)
mime_type = Column(String)
data = Column(Text) # base64 or small text payload