from sqlalchemy import Column, String, Boolean, Integer, DateTime, Text from sqlalchemy.dialects.postgresql import UUID, JSONB from sqlalchemy.orm import relationship from datetime import datetime from app.database import Base import uuid class User(Base): __tablename__ = "users" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) wechat_openid = Column(String(255), unique=True, index=True) phone = Column(String(20), unique=True, index=True) username = Column(String(100)) password_hash = Column(String(255)) tier = Column(String(50), default="free") is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) settings = Column(JSONB, default={ "preferred_translate_provider": "auto", "reply_tone": "professional", "timezone": "Asia/Shanghai", "languages": ["zh", "en"], }) products = relationship("Product", back_populates="user", cascade="all, delete-orphan") customers = relationship("Customer", back_populates="user", cascade="all, delete-orphan") conversations = relationship("Conversation", back_populates="user", cascade="all, delete-orphan") quotations = relationship("Quotation", back_populates="user", cascade="all, delete-orphan") class Product(Base): __tablename__ = "products" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), nullable=False, index=True) name = Column(String(255), nullable=False) name_en = Column(String(255)) description = Column(Text) description_en = Column(Text) category = Column(String(100)) price = Column(String(50)) price_unit = Column(String(20), default="USD") moq = Column(String(50)) keywords = Column(JSONB, default=[]) specifications = Column(JSONB, default={}) images = Column(JSONB, default=[]) is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) user = relationship("User", back_populates="products")