VortexCommerceBackend / app /models /analytics.py
hisham-cmd's picture
Full Sync: Explicit Commit Operations (Pure & Optimized)
b2be963 verified
Raw
History Blame Contribute Delete
1.97 kB
from datetime import datetime, timezone
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, JSON
from sqlalchemy.orm import relationship
from app.db.base import Base
class VisitorLog(Base):
__tablename__ = "visitor_logs"
id = Column(Integer, primary_key=True, autoincrement=True)
session_id = Column(String(50), nullable=True, index=True)
user_id = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"), nullable=True)
ip_address = Column(String(50), nullable=True)
user_agent = Column(Text, nullable=True)
browser = Column(String(100), nullable=True)
os = Column(String(100), nullable=True)
device_type = Column(String(50), nullable=True)
# Location data (JSON string or dict depending on DB)
location_data = Column(JSON, nullable=True)
# Extra metadata (screen resolution, language, etc.)
client_metadata = Column(JSON, nullable=True)
first_seen = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
last_seen = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
events = relationship("AnalyticsEvent", back_populates="visitor", cascade="all, delete-orphan")
user = relationship("User")
class AnalyticsEvent(Base):
__tablename__ = "analytics_events"
id = Column(Integer, primary_key=True, autoincrement=True)
visitor_id = Column(Integer, ForeignKey("visitor_logs.id", ondelete="CASCADE"), nullable=False)
event_type = Column(String(50), nullable=False, index=True) # PAGE_VIEW, ADD_TO_CART, SEARCH, etc.
page_url = Column(Text, nullable=True)
page_title = Column(Text, nullable=True)
# Event data (e.g. {product_id: 123} for ADD_TO_CART)
event_data = Column(JSON, nullable=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
visitor = relationship("VisitorLog", back_populates="events")