Files
trade-assistant/backend/app/models/user.py
T
TradeMate Dev c6206787da Initial commit: TradeMate 外贸小助手 MVP
项目结构:
- backend/     Python FastAPI 后端
- uni-app/     uni-app跨端前端
- docs/        设计文档
- docker-compose.yml  Docker编排
- nginx/scripts/systemd 运维配置

已完成功能:
- 用户认证 (JWT)
- 智能翻译 + 回复建议
- 营销素材生成
- 客户管理 + 沉默检测
- 报价单管理
- 产品库管理
- 汇率换算
- 推送通知 (uni-push)
- WhatsApp Webhook框架
- Celery定时任务
2026-05-08 18:17:12 +08:00

55 lines
2.2 KiB
Python

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")