Files
wecom_it_smart_desk/backend/app/models/conversation_evaluation.py
T

123 lines
4.1 KiB
Python
Raw Normal View History

# =============================================================================
# 企微IT智能服务台 — 满意度评价模型
# =============================================================================
# 说明:对应数据库 conversation_evaluations 表,存储会话满意度评价数据
# 核心概念:每个会话结束后,员工对本次服务进行满意度评价
# 评价要素:星级(1-5)、表情(满意/一般/不满意)、文字反馈
# =============================================================================
import uuid
from datetime import datetime
from typing import Optional
from sqlalchemy import DateTime, Index, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
class ConversationEvaluation(Base):
"""满意度评价模型 — 对应 conversation_evaluations 表。
在会话结束后,员工对本次IT服务进行满意度评价。
评价数据关联会话ID,用于服务质量分析和改进。
Attributes:
id: 评价记录唯一标识(UUID,数据库自动生成)
conversation_id: 关联的会话ID(关联 conversations 表)
employee_id: 评价员工UserID
employee_name: 评价员工姓名(冗余存储)
star_rating: 星级评分(1-5
emoji: 表情评价(satisfied:满意/neutral:一般/dissatisfied:不满意)
feedback_text: 文字反馈(可选,限200字)
created_at: 评价时间
"""
# 表名
__tablename__ = "conversation_evaluations"
# --------------------------------------------------------------------------
# 字段定义
# --------------------------------------------------------------------------
# 主键:UUIDPython端生成
id: Mapped[str] = mapped_column(
String(36),
primary_key=True,
default=lambda: str(uuid.uuid4()),
)
# 关联的会话ID(关联 conversations 表)
conversation_id: Mapped[str] = mapped_column(
String(36),
nullable=False,
comment="关联的会话ID",
)
# 评价员工UserID
employee_id: Mapped[str] = mapped_column(
String(64),
nullable=False,
comment="评价员工UserID",
)
# 评价员工姓名(冗余存储)
employee_name: Mapped[str] = mapped_column(
String(128),
nullable=False,
default="",
comment="评价员工姓名",
)
# 星级评分(1-5
star_rating: Mapped[int] = mapped_column(
Integer,
nullable=False,
comment="星级评分(1-5",
)
# 表情评价
# satisfied: 满意 😀
# neutral: 一般 😐
# dissatisfied: 不满意 😞
emoji: Mapped[str] = mapped_column(
String(20),
nullable=False,
comment="表情评价(satisfied/neutral/dissatisfied",
)
# 文字反馈(可选,限200字)
feedback_text: Mapped[Optional[str]] = mapped_column(
Text,
nullable=True,
comment="文字反馈(可选,限200字)",
)
# 评价时间
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True),
nullable=False,
default=datetime.now,
comment="评价时间",
)
# --------------------------------------------------------------------------
# 索引定义
# --------------------------------------------------------------------------
__table_args__ = (
# 按会话ID查询(获取某会话的评价)
Index("idx_evaluations_conversation_id", "conversation_id"),
# 按员工ID查询(查询某员工的评价历史)
Index("idx_evaluations_employee_id", "employee_id"),
# 按创建时间倒序查询
Index("idx_evaluations_created_at", "created_at"),
)
def __repr__(self) -> str:
"""评价对象的字符串表示。"""
return (
f"<ConversationEvaluation(id={self.id}, "
f"conversation_id={self.conversation_id}, "
f"star_rating={self.star_rating}, emoji={self.emoji})>"
)