84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
"""竞品价格模型
|
||
|
||
记录竞品机构的项目价格信息
|
||
"""
|
||
|
||
from typing import Optional, TYPE_CHECKING
|
||
from decimal import Decimal
|
||
from datetime import date
|
||
|
||
from sqlalchemy import BigInteger, String, Date, DECIMAL, ForeignKey
|
||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||
|
||
from app.models.base import BaseModel
|
||
|
||
if TYPE_CHECKING:
|
||
from app.models.competitor import Competitor
|
||
from app.models.project import Project
|
||
|
||
|
||
class CompetitorPrice(BaseModel):
|
||
"""竞品价格表"""
|
||
|
||
__tablename__ = "competitor_prices"
|
||
|
||
competitor_id: Mapped[int] = mapped_column(
|
||
BigInteger,
|
||
ForeignKey("competitors.id", ondelete="CASCADE"),
|
||
nullable=False,
|
||
index=True,
|
||
comment="竞品机构ID"
|
||
)
|
||
project_id: Mapped[Optional[int]] = mapped_column(
|
||
BigInteger,
|
||
ForeignKey("projects.id", ondelete="SET NULL"),
|
||
nullable=True,
|
||
index=True,
|
||
comment="关联本店项目ID"
|
||
)
|
||
project_name: Mapped[str] = mapped_column(
|
||
String(100),
|
||
nullable=False,
|
||
comment="竞品项目名称"
|
||
)
|
||
original_price: Mapped[Decimal] = mapped_column(
|
||
DECIMAL(12, 2),
|
||
nullable=False,
|
||
comment="原价"
|
||
)
|
||
promo_price: Mapped[Optional[Decimal]] = mapped_column(
|
||
DECIMAL(12, 2),
|
||
nullable=True,
|
||
comment="促销价"
|
||
)
|
||
member_price: Mapped[Optional[Decimal]] = mapped_column(
|
||
DECIMAL(12, 2),
|
||
nullable=True,
|
||
comment="会员价"
|
||
)
|
||
price_source: Mapped[str] = mapped_column(
|
||
String(20),
|
||
nullable=False,
|
||
comment="来源:official-官网, meituan-美团, dianping-大众点评, survey-实地调研"
|
||
)
|
||
collected_at: Mapped[date] = mapped_column(
|
||
Date,
|
||
nullable=False,
|
||
index=True,
|
||
comment="采集日期"
|
||
)
|
||
remark: Mapped[Optional[str]] = mapped_column(
|
||
String(200),
|
||
nullable=True,
|
||
comment="备注"
|
||
)
|
||
|
||
# 关系
|
||
competitor: Mapped["Competitor"] = relationship(
|
||
"Competitor",
|
||
back_populates="prices"
|
||
)
|
||
project: Mapped[Optional["Project"]] = relationship(
|
||
"Project"
|
||
)
|