FAYO
model
1ef9436
raw
history blame
4.82 kB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File : streamer_room_model.py
@Time : 2024/08/31
@Project : https://github.com/PeterH0323/Streamer-Sales
@Author : HinGwenWong
@Version : 1.0
@Desc : 直播间信息数据结构定义
"""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
from sqlmodel import Field, Relationship, SQLModel
from ..models.user_model import UserInfo
from ..models.product_model import ProductInfo
from ..models.streamer_info_model import StreamerInfo
class RoomChatItem(BaseModel):
roomId: int
message: str = ""
asrFileUrl: str = ""
# =======================================================
# 直播间数据库模型
# =======================================================
class SalesDocAndVideoInfo(SQLModel, table=True):
"""直播间 文案 和 数字人介绍视频数据结构"""
__tablename__ = "sales_doc_and_video_info"
sales_info_id: int | None = Field(default=None, primary_key=True, unique=True)
sales_doc: str = "" # 讲解文案
start_video: str = "" # 开播时候第一个讲解视频
start_time: datetime | None = None # 当前商品开始时间
selected: bool = True
product_id: int | None = Field(default=None, foreign_key="product_info.product_id")
product_info: ProductInfo | None = Relationship(back_populates="sales_info", sa_relationship_kwargs={"lazy": "selectin"})
room_id: int | None = Field(default=None, foreign_key="stream_room_info.room_id")
stream_room: Optional["StreamRoomInfo"] | None = Relationship(back_populates="product_list")
class OnAirRoomStatusItem(SQLModel, table=True):
"""直播间状态信息"""
__tablename__ = "on_air_room_status_item"
status_id: int | None = Field(default=None, primary_key=True, unique=True) # 直播间 ID
sales_info_id: int | None = Field(default=None, foreign_key="sales_doc_and_video_info.sales_info_id")
current_product_index: int = 0 # 目前讲解的商品列表索引
streaming_video_path: str = "" # 目前介绍使用的视频
live_status: int = 0 # 直播间状态 0 未开播,1 正在直播,2 下播了
start_time: datetime | None = None # 直播开始时间
end_time: datetime | None = None # 直播下播时间
room_info: Optional["StreamRoomInfo"] | None = Relationship(
back_populates="status", sa_relationship_kwargs={"lazy": "selectin"}
)
"""直播间信息,数据库保存时的数据结构"""
class StreamRoomInfo(SQLModel, table=True):
__tablename__ = "stream_room_info"
room_id: int | None = Field(default=None, primary_key=True, unique=True) # 直播间 ID
name: str = "" # 直播间名字
product_list: list[SalesDocAndVideoInfo] = Relationship(
back_populates="stream_room",
sa_relationship_kwargs={"lazy": "selectin", "order_by": "asc(SalesDocAndVideoInfo.product_id)"},
) # 商品列表,查找的时候加上 order_by 自动排序,desc -> 降序; asc -> 升序
prohibited_words_id: int = 0 # 违禁词表 ID
room_poster: str = "" # 海报图
background_image: str = "" # 主播背景图
delete: bool = False # 是否删除
status_id: int | None = Field(default=None, foreign_key="on_air_room_status_item.status_id")
status: OnAirRoomStatusItem | None = Relationship(back_populates="room_info", sa_relationship_kwargs={"lazy": "selectin"})
streamer_id: int | None = Field(default=None, foreign_key="streamer_info.streamer_id") # 主播 ID
streamer_info: StreamerInfo | None = Relationship(back_populates="room_info", sa_relationship_kwargs={"lazy": "selectin"})
user_id: int | None = Field(default=None, foreign_key="user_info.user_id")
# =======================================================
# 直播对话数据库模型
# =======================================================
class ChatMessageInfo(SQLModel, table=True):
"""直播页面对话数据结构"""
__tablename__ = "chat_message_info"
message_id: int | None = Field(default=None, primary_key=True, unique=True) # 消息 ID
sales_info_id: int | None = Field(default=None, foreign_key="sales_doc_and_video_info.sales_info_id")
sales_info: SalesDocAndVideoInfo | None = Relationship(sa_relationship_kwargs={"lazy": "selectin"})
user_id: int | None = Field(default=None, foreign_key="user_info.user_id")
user_info: UserInfo | None = Relationship(sa_relationship_kwargs={"lazy": "selectin"})
streamer_id: int | None = Field(default=None, foreign_key="streamer_info.streamer_id")
streamer_info: StreamerInfo | None = Relationship(sa_relationship_kwargs={"lazy": "selectin"})
role: str
message: str
send_time: datetime | None = None