class ChatRoom(BaseModel, db.Model): """聊天室表""" __tablename__ = 'chat_room' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), comment='聊天室名称', unique=True) create_user = db.Column(db.Integer, db.ForeignKey('user.id'), comment='创建人') img = db.Column(db.String(256), comment='聊天室封面图') desc = db.Column(db.String(512), comment='聊天室简介') #中间表中用户 mid_users = db.relationship('ChatUserRoom', backref='chat_room', lazy='dynamic') #跨越中间表的用户 # users=db.relationship('User',secondary='user_chat_room', # backref=db.backref('chat_rooms',lazy='dynamic'),lazy='dynamic',cascade='all') messages = db.relationship('ChatMessage', backref='room', lazy='dynamic') def __init__(self, **kwargs): super().__init__(**kwargs) self.set_img() def set_img(self): """设置默认封面图""" if not self.img: urlFilePath = urljoin('static', 'default/roomDefault.jpg') self.img = url_for('static', _external=True, filename=urlFilePath)
class FriendsMessage(BaseModel, db.Model): """消息表""" __tablename__ = 'friends_message' class FriendMsgStatus: """阅读状态""" markRead = 0 unRead = 1 id = db.Column(db.Integer, primary_key=True) msg = db.Column(db.String(126), comment='聊天记录') type = db.Column(db.SmallInteger, default=1, comment='类型') from_user_id = db.Column(db.Integer, index=True, comment='发送者') to_user_id = db.Column(db.Integer, index=True, comment='接收者') status = db.Column(db.SmallInteger, default=1, comment='接收状态') room = db.Column(db.String(126), comment='房间名称') @staticmethod def get_history_message(room): """获取单个好友的历史消息""" return db.session.query(FriendsMessage).filter(FriendsMessage.room == room, or_(FriendsMessage.from_user_id == token.id, FriendsMessage.to_user_id == token.id), FriendsMessage.is_active==True) \ .order_by(FriendsMessage.create_time.desc())
class ChatMessage(BaseModel, db.Model): """聊天消息表""" __tablename__ = "chat_message" id = db.Column(db.Integer, primary_key=True) room_id = db.Column(db.Integer, db.ForeignKey('chat_room.id'), comment='信息发表房间') #user_id=db.Column(db.Integer,db.ForeignKey('user.id'),comment='信息发表人') user_id = db.Column(db.String(256), comment='信息发表人') msg = db.Column(db.String(256), comment='聊天信息')
class Role(BaseModel,db.Model): """角色""" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), unique=True,comment='角色名称') users = db.relationship('User', back_populates='role') permissions = db.relationship('Permission', secondary=roles_permissions,back_populates='roles') @staticmethod def init_role(): roles_permissions_map = { 'Locked': ['FOLLOW'], #被封禁用户只可以登录 'User': ['FOLLOW', 'COLLECT',], #普通用户可以登录,添加好友 'Moderator': ['FOLLOW', 'COLLECT', 'MODERATE'], 'Administrator': ['FOLLOW', 'COLLECT', 'COMMENT', 'MODERATE', 'ADMINISTER'] } for role_name in roles_permissions_map: role = Role.query.filter(Role.name==role_name).first() if role is None: role = Role(name=role_name) db.session.add(role) role.permissions = [] for permission_name in roles_permissions_map[role_name]: permission = Permission.query.filter_by(name=permission_name).first() if permission is None: permission = Permission(name=permission_name) db.session.add(permission) role.permissions.append(permission) db.session.commit()
class chatFriendGroup(BaseModel, db.Model): """好友分组表""" __tablename__ = 'chat_friend_group' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), comment='用户') name = db.Column(db.String(126), comment='好友分组组名') group_users = db.relationship('ChatFriend', backref='group', lazy='dynamic')
class FeedbackImages(BaseModel, db.Model): """反馈问题截图表""" __tablename__ = 'feedback_image' id = db.Column(db.Integer, primary_key=True) url = db.Column(db.String(256), nullable=False, comment='反馈图片url链接') feedback_id = db.Column(db.Integer, db.ForeignKey('feedback.id'), comment='反馈')
class Feedback(BaseModel, db.Model): """反馈问题""" __tablename__ = 'feedback' id = db.Column(db.Integer, primary_key=True) content = db.Column(db.TEXT, nullable=False, comment='反馈内容') contact = db.Column(db.String(128), comment='反馈联系方式') type_id = db.Column(db.Integer, db.ForeignKey('feedback_type.id'), comment='反馈类型') user_id = db.Column(db.Integer, db.ForeignKey('user.id'), comment='创建人') reply_id = db.Column(db.Integer, db.ForeignKey('feedback_reply.id'), comment='官方回复') image = db.Column(db.String(256), comment='反馈问题截图封面') images = db.relationship('FeedbackImages', lazy='dynamic', backref=db.backref('feedback', lazy='joined'))
class ChatUserRoom(BaseModel, db.Model): """聊天室用户中间表""" __tablename__ = 'user_chat_room' id = db.Column(db.Integer, primary_key=True) #user_id=db.Column(db.Integer, db.ForeignKey('user.id'),primary_key=True) user_id = db.Column(db.String(256), index=True) chat_room_id = db.Column(db.Integer, db.ForeignKey('chat_room.id'), index=True) is_create_user = db.Column(db.Boolean, default=False, comment='角色')
class FeedbackReply(BaseModel, db.Model): """反馈问题回复表""" __tablename__ = 'feedback_reply' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128), nullable=False, comment='回复标题') content = db.Column(db.TEXT, nullable=False, comment='回复内容') user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False, comment='回复人')
class ChatFriend(BaseModel, db.Model): """好友审核表""" __tablename__ = 'chat_friend' class ChatFriendStatus(enum.Enum): """审核状态""" NOT_PASS = 0 PASS = 1 WAIT = 2 LOSE = 3 id = db.Column(db.Integer, primary_key=True) self_id = db.Column(db.Integer, index=True, comment='自己') friend_id = db.Column(db.Integer, index=True, comment='好友') status = db.Column(db.SmallInteger, default=2, comment='审核状态') remark = db.Column(db.String(126), comment='名称备注') top = db.Column(db.Boolean, default=False, comment='置顶') become_friends_time = db.Column(db.DATETIME, comment='成为好友的时间') group_id = db.Column(db.Integer, db.ForeignKey('chat_friend_group.id'), comment='分组') room = db.Column(db.String(126), comment='房间名称') initiator_id = db.Column(db.Integer, comment='发起人') @staticmethod def get_friends_id(): """获取好友字典""" friends = db.session.query(ChatFriend.friend_id, ChatFriend).filter( ChatFriend.self_id == token.id, ChatFriend.is_active == True, ChatFriend.status == 1).all() return {str(i[0]): i[1].to_dict() for i in friends} @staticmethod def check_is_friend(friend_id): if db.session.query(ChatFriend).filter( ChatFriend.self_id == token.id, ChatFriend.friend_id == friend_id, ChatFriend.is_active == True, ChatFriend.status == 1).first(): return True return False
class FeedbackType(BaseModel, db.Model): """反馈问题类型表""" __tablename__ = 'feedback_type' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True, comment='反馈类型') feedbacks = db.relationship('Feedback', backref=db.backref('feedbackType', lazy='joined'), lazy='dynamic') @staticmethod def init_FeedbackType(): init_types = ['出现广告信息', '加载速度慢', '功能异常不可用', '页面崩溃打不开'] for i in init_types: Ftype = FeedbackType.query.filter(FeedbackType.name == i).first() if Ftype is None: Ftype = FeedbackType(name=i) db.session.add(Ftype) db.session.commit()
class Permission(BaseModel,db.Model): """权限""" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), unique=True,comment='权限名称') roles = db.relationship('Role', secondary=roles_permissions, back_populates='permissions',lazy='joined')
class TestModel(db.Model): __tablename__ = 'test' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True, nullable=False)
class FriendsStrategy(BaseModel, db.Model): """添加好友策略""" __tablename__ = 'friends_strategy' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(126), comment='添加好友策略') user = db.relationship('User', backref='friends_strategy', lazy='dynamic')