Kairo_backend / models.py
Surajkumaar's picture
delete_update
b3fa003
from datetime import datetime
from sqlalchemy import Column, Integer, String, Text, DateTime, Enum as SQLEnum
from sqlalchemy.sql import func
from database import Base
import enum
class PortfolioType(str, enum.Enum):
"""Enum for portfolio item types"""
POSTER = "poster"
VIDEO = "video"
WEBSITE = "website"
class User(Base):
"""User model for authentication"""
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String(255), unique=True, index=True, nullable=False)
password = Column(String(255), nullable=False)
def __repr__(self):
return f"<User(id={self.id}, username={self.username})>"
class PortfolioItem(Base):
"""Portfolio item model"""
__tablename__ = "portfolio_items"
id = Column(Integer, primary_key=True, index=True)
title = Column(String(255), nullable=False, index=True)
description = Column(Text, nullable=True)
type = Column(SQLEnum(PortfolioType), nullable=False, index=True)
image_url = Column(String(1024), nullable=True)
video_url = Column(String(1024), nullable=True)
video_thumbnail = Column(String(1024), nullable=True)
website_url = Column(String(1024), nullable=True)
what = Column(Text, nullable=True)
sort_order = Column(Integer, default=0, nullable=False, server_default="0")
created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
updated_at = Column(
DateTime(timezone=True),
server_default=func.now(),
onupdate=func.now(),
nullable=False
)
def __repr__(self):
return f"<PortfolioItem(id={self.id}, title={self.title}, type={self.type})>"
class NewsletterSubscriber(Base):
"""Newsletter subscriber model to store contacts locally"""
__tablename__ = "newsletter_subscribers"
id = Column(Integer, primary_key=True, index=True)
email = Column(String(255), unique=True, index=True, nullable=False)
created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
def __repr__(self):
return f"<NewsletterSubscriber(id={self.id}, email={self.email})>"
class VisitorTelemetry(Base):
"""Visitor Telemetry / Cookie Tracking model"""
__tablename__ = "visitor_telemetry"
id = Column(Integer, primary_key=True, index=True)
visitor_id = Column(String(100), nullable=True)
session_id = Column(String(100), nullable=True)
ip_address = Column(String(50), nullable=True)
user_agent = Column(Text, nullable=True)
referrer = Column(String(255), nullable=True)
landing_page = Column(String(255), nullable=True)
browser = Column(String(50), nullable=True)
device_type = Column(String(50), nullable=True)
os = Column(String(50), nullable=True)
country = Column(String(100), nullable=True)
city = Column(String(100), nullable=True)
visit_count = Column(Integer, default=1, nullable=True)
consent = Column(String(50), nullable=True)
created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
def __repr__(self):
return f"<VisitorTelemetry(id={self.id}, visitor_id={self.visitor_id}, ip_address={self.ip_address})>"