c1ce109f13
- 新增 OrderRecord 模型 (user_id, platform, store_name, dishes, order_date, price, original_price, savings) - 新增 order_record schema (OrderRecordOut + OrderListResponse) - 新增 CRUD: get_records_page 按 order_date DESC 分页查询 - 新增 /api/v1/user/records 路由, 需 Bearer token 鉴权, 支持 page/size 参数 - Alembic 迁移: add order_record table - platform 支持: meituan_waimai / taobao_shanguang / jd_waimai / meituan / taobao / jd - dishes 字段 DB 存 JSON 字符串, 接口返回 list[str] Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime, timezone
|
|
|
|
from sqlalchemy import DateTime, ForeignKey, Integer, Numeric, String, Text, func
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db.base import Base
|
|
|
|
|
|
def _utcnow() -> datetime:
|
|
return datetime.now(timezone.utc)
|
|
|
|
|
|
class OrderRecord(Base):
|
|
__tablename__ = "order_record"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
user_id: Mapped[int] = mapped_column(Integer, ForeignKey("user.id"), nullable=False, index=True)
|
|
|
|
platform: Mapped[str] = mapped_column(String(30), nullable=False)
|
|
store_name: Mapped[str] = mapped_column(String(128), nullable=False)
|
|
dishes: Mapped[str] = mapped_column(Text, nullable=False, default="[]")
|
|
|
|
order_date: Mapped[str] = mapped_column(String(10), nullable=False)
|
|
price: Mapped[str] = mapped_column(String(20), nullable=False)
|
|
original_price: Mapped[str | None] = mapped_column(String(20), nullable=True)
|
|
savings: Mapped[str | None] = mapped_column(String(20), nullable=True)
|
|
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), server_default=func.now(), nullable=False
|
|
)
|