TakwayPlatform/app/models/models.py

92 lines
2.9 KiB
Python

from sqlalchemy import Column, Integer, String, JSON, Text, ForeignKey, DateTime, Boolean, CHAR, LargeBinary
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
#角色表定义
class Character(Base):
__tablename__ = 'character'
id = Column(Integer, primary_key=True, autoincrement=True)
voice_id = Column(Integer, nullable=False)
avatar_id = Column(String(36), nullable=False)
background_ids = Column(String(255), nullable=False)
name = Column(String(36), nullable=False)
wakeup_words = Column(String(255), nullable=False)
world_scenario = Column(Text, nullable=False)
description = Column(Text, nullable=False)
emojis = Column(JSON, nullable=False)
dialogues = Column(Text, nullable=False)
def __repr__(self):
return f"<Character(id={self.id}, name={self.name}, avatar_id={self.avatar_id})>"
#用户表定义
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
created_at = Column(DateTime, nullable=True)
updated_at = Column(DateTime, nullable=True)
deleted_at = Column(DateTime, nullable=True)
open_id = Column(String(255), nullable=True)
username = Column(String(64), nullable=True)
avatar_id = Column(String(36), nullable=True)
tags = Column(JSON)
persona = Column(JSON)
selected_audio_id = Column(Integer, nullable=True)
def __repr__(self):
return f"<User(id={self.id}, tags={self.tags})>"
#硬件表定义
class Hardware(Base):
__tablename__ = 'hardware'
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey('user.id'))
mac = Column(String(17))
firmware = Column(String(16))
model = Column(String(36))
def __repr__(self):
return f"<Hardware( mac={self.mac})>"
#用户角色表定义
class UserCharacter(Base):
__tablename__ = 'user_character'
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey('user.id'))
character_id = Column(Integer, ForeignKey('character.id'))
persona = Column(JSON)
def __repr__(self):
return f"<UserCharacter(id={self.id}, user_id={self.user_id}, character_id={self.character_id})>"
#Session表定义
class Session(Base):
__tablename__ = 'session'
id = Column(CHAR(36), primary_key=True)
user_character_id = Column(Integer, ForeignKey('user_character.id'))
content = Column(Text)
last_activity = Column(DateTime())
is_permanent = Column(Boolean)
def __repr__(self):
return f"<Session(id={self.id}, user_character_id={self.user_character_id})>"
#音频表定义
class Audio(Base):
__tablename__ = 'audio'
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey('user.id'))
audio_data = Column(LargeBinary(16777215))
emb_data = Column(LargeBinary(65535))