forked from killua/TakwayPlatform
90 lines
2.8 KiB
Python
90 lines
2.8 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)
|
|
|
|
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))
|
|
|