-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
123 lines (103 loc) · 5.99 KB
/
models.py
File metadata and controls
123 lines (103 loc) · 5.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
from extensions import db
import uuid
import time
# 用户表
class User(db.Model):
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
username = db.Column(db.String(256), unique=True, nullable=False)
password = db.Column(db.String(128), nullable=False)
nickname = db.Column(db.String(100), nullable=True)
bio = db.Column(db.Text, nullable=True)
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
updated_at = db.Column(db.Integer, default=lambda: int(time.time()), onupdate=lambda: int(time.time()))
def __repr__(self):
return f'<User {self.username}>'
# 聊天室表
class ChatRoom(db.Model):
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
name = db.Column(db.String(100), nullable=False)
description = db.Column(db.Text, nullable=True)
tags = db.Column(db.String(256), nullable=True)
creator_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
updated_at = db.Column(db.Integer, default=lambda: int(time.time()), onupdate=lambda: int(time.time()))
def __repr__(self):
return f'<ChatRoom {self.name}>'
# 聊天室成员表
class ChatRoomMember(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
user_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
chat_room_id = db.Column(db.String(36), db.ForeignKey('chat_room.id'), nullable=False)
role = db.Column(db.String(20), nullable=False, default='member') # member, admin, owner
status = db.Column(db.String(20), nullable=False, default='pending') # pending, approved
joined_at = db.Column(db.Integer, default=lambda: int(time.time()))
def __repr__(self):
return f'<ChatRoomMember user={self.user_id} room={self.chat_room_id}>'
# 聊天消息表
class Message(db.Model):
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
sender_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
chat_room_id = db.Column(db.String(36), db.ForeignKey('chat_room.id'), nullable=True)
friend_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=True)
content = db.Column(db.Text, nullable=False)
sent_at = db.Column(db.Integer, default=lambda: int(time.time()))
is_撤回 = db.Column(db.Boolean, default=False)
reply_to = db.Column(db.String(36), db.ForeignKey('message.id'), nullable=True)
def __repr__(self):
return f'<Message {self.id}>'
# 好友请求表
class FriendRequest(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
sender_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
receiver_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
status = db.Column(db.String(20), nullable=False, default='pending') # pending, accepted, rejected
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
def __repr__(self):
return f'<FriendRequest {self.sender_id} -> {self.receiver_id}>'
# 好友关系表
class Friendship(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
user1_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
user2_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
def __repr__(self):
return f'<Friendship {self.user1_id} & {self.user2_id}>'
# 违禁词表
class ForbiddenWord(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
chat_room_id = db.Column(db.String(36), db.ForeignKey('chat_room.id'), nullable=False)
word = db.Column(db.String(100), nullable=False)
action = db.Column(db.String(20), nullable=False, default='block') # block: 禁止发送, mask: 自动打码
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
def __repr__(self):
return f'<ForbiddenWord {self.word} in room {self.chat_room_id}>'
# 聊天室链接设置表
class ChatRoomLinkSetting(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
chat_room_id = db.Column(db.String(36), db.ForeignKey('chat_room.id'), nullable=False)
check_link_text = db.Column(db.Boolean, nullable=False, default=True) # 是否检查链接文本中的违禁词
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
updated_at = db.Column(db.Integer, default=lambda: int(time.time()), onupdate=lambda: int(time.time()))
def __repr__(self):
return f'<ChatRoomLinkSetting room={self.chat_room_id} check_link_text={self.check_link_text}>'
# 快捷短语表
class QuickPhrase(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
user_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
content = db.Column(db.Text, nullable=False) # 快捷短语内容
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
updated_at = db.Column(db.Integer, default=lambda: int(time.time()), onupdate=lambda: int(time.time()))
def __repr__(self):
return f'<QuickPhrase user={self.user_id} content={self.content[:20]}...>'
# 机器人表
class Bot(db.Model):
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
name = db.Column(db.String(100), nullable=False)
description = db.Column(db.Text, nullable=True)
template = db.Column(db.String(100), nullable=False) # 模板名称
config = db.Column(db.Text, nullable=True) # 配置信息(JSON格式)
creator_id = db.Column(db.String(36), db.ForeignKey('user.id'), nullable=False)
created_at = db.Column(db.Integer, default=lambda: int(time.time()))
updated_at = db.Column(db.Integer, default=lambda: int(time.time()), onupdate=lambda: int(time.time()))
def __repr__(self):
return f'<Bot {self.name}>'