- 后端: 新增 dislike_count 字段(模型/Schema/数据库迁移)
- 后端: 新增 POST /api/jokes/{id}/dislike 端点
- 后端: 管理后台统计新增 total_dislikes
- 前端: 新增 useVote 组合函数(localStorage 持久化防重复)
- 前端: JokeCard 列表卡片新增 👍/👎 可点击投票按钮
- 前端: 详情页 ❤️ 改为 👍 赞一下 / 👎 踩一脚 双按钮
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
from sqlalchemy import Column, Integer, String, Text, DateTime, Float, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class Joke(Base):
|
|
"""笑话表模型"""
|
|
__tablename__ = "jokes"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
title = Column(String(200), nullable=False)
|
|
content = Column(Text, nullable=False)
|
|
# AI 润色后的内容
|
|
polished_content = Column(Text, nullable=True)
|
|
# AI 评分 (1-10)
|
|
ai_score = Column(Float, nullable=True)
|
|
# AI 质量等级: excellent/good/ordinary/poor
|
|
ai_level = Column(String(20), nullable=True)
|
|
type_ids = Column(Text, nullable=True)
|
|
crowd_ids = Column(Text, nullable=True)
|
|
type_id = Column(Integer, ForeignKey("joke_types.id"), nullable=True)
|
|
crowd_id = Column(Integer, ForeignKey("joke_crowds.id"), nullable=True)
|
|
status = Column(String(20), default="pending")
|
|
view_count = Column(Integer, default=0)
|
|
like_count = Column(Integer, default=0)
|
|
dislike_count = Column(Integer, default=0)
|
|
created_at = Column(DateTime, default=func.now())
|
|
updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
|
|
|
|
# Relationships
|
|
type = relationship("JokeType", back_populates="jokes")
|
|
crowd = relationship("JokeCrowd", back_populates="jokes") |