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

123 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 企微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})>"
)