CoolFace
Apppublic

KillerKing93/Transformers-TextEngine-OpenAPI

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
models.py129 linesDownload Raw Back to root
1#!/usr/bin/env python2# -*- coding: utf-8 -*-3"""4Database models for AI Marketplace Platform5 6Tables:7- Suppliers: Business entities that list products8- Products: Items for sale with stock and pricing9- Users: Platform users with location and AI access10- Conversations: Chat sessions for tracking11- Messages: Individual messages in conversations12"""13 14from datetime import datetime15from typing import Optional16from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, ForeignKey, Text, Index17from sqlalchemy.orm import relationship, declarative_base18 19Base = declarative_base()20 21 22class Supplier(Base):23    __tablename__ = "suppliers"24 25    id = Column(Integer, primary_key=True, index=True)26    name = Column(String(255), nullable=False)27    business_name = Column(String(255), nullable=False)28    email = Column(String(255), unique=True, nullable=False, index=True)29    hashed_password = Column(String(255))  # For authentication30    phone = Column(String(50))31    address = Column(Text)32    latitude = Column(Float, nullable=False)  # For location-based search33    longitude = Column(Float, nullable=False)34    city = Column(String(100), index=True)35    province = Column(String(100))36    is_active = Column(Boolean, default=True)37    registration_date = Column(DateTime, default=datetime.utcnow)38    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)39 40    # Relationships41    products = relationship("Product", back_populates="supplier", cascade="all, delete-orphan")42 43    __table_args__ = (44        Index('idx_supplier_location', 'latitude', 'longitude'),45    )46 47 48class Product(Base):49    __tablename__ = "products"50 51    id = Column(Integer, primary_key=True, index=True)52    supplier_id = Column(Integer, ForeignKey("suppliers.id", ondelete="CASCADE"), nullable=False)53    name = Column(String(255), nullable=False, index=True)54    description = Column(Text)55    price = Column(Float, nullable=False)56    stock_quantity = Column(Integer, nullable=False, default=0)57    category = Column(String(100), index=True)58    tags = Column(Text)  # Comma-separated tags for search59    sku = Column(String(100), unique=True, index=True)60    is_available = Column(Boolean, default=True)61    created_at = Column(DateTime, default=datetime.utcnow)62    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)63 64    # Relationships65    supplier = relationship("Supplier", back_populates="products")66 67    __table_args__ = (68        Index('idx_product_search', 'name', 'category'),69        Index('idx_product_price', 'price'),70    )71 72 73class User(Base):74    __tablename__ = "users"75 76    id = Column(Integer, primary_key=True, index=True)77    name = Column(String(255), nullable=False)78    email = Column(String(255), unique=True, nullable=False, index=True)79    hashed_password = Column(String(255))  # For authentication80    phone = Column(String(50))81    latitude = Column(Float)82    longitude = Column(Float)83    city = Column(String(100))84    province = Column(String(100))85    role = Column(String(20), default="user")  # user, supplier, admin86    ai_access_enabled = Column(Boolean, default=False)  # Premium feature flag87    preferences = Column(Text)  # JSON string for user preferences88    created_at = Column(DateTime, default=datetime.utcnow)89    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)90 91    # Relationships92    conversations = relationship("Conversation", back_populates="user", cascade="all, delete-orphan")93 94    __table_args__ = (95        Index('idx_user_location', 'latitude', 'longitude'),96    )97 98 99class Conversation(Base):100    __tablename__ = "conversations"101 102    id = Column(Integer, primary_key=True, index=True)103    user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False)104    session_id = Column(String(255), unique=True, nullable=False, index=True)105    title = Column(String(255))  # Auto-generated from first message106    created_at = Column(DateTime, default=datetime.utcnow)107    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)108 109    # Relationships110    user = relationship("User", back_populates="conversations")111    messages = relationship("Message", back_populates="conversation", cascade="all, delete-orphan")112 113 114class Message(Base):115    __tablename__ = "messages"116 117    id = Column(Integer, primary_key=True, index=True)118    conversation_id = Column(Integer, ForeignKey("conversations.id", ondelete="CASCADE"), nullable=False)119    role = Column(String(20), nullable=False)  # "user" or "assistant"120    content = Column(Text, nullable=False)121    timestamp = Column(DateTime, default=datetime.utcnow, index=True)122 123    # Relationships124    conversation = relationship("Conversation", back_populates="messages")125 126    __table_args__ = (127        Index('idx_message_conversation', 'conversation_id', 'timestamp'),128    )129