You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
7.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import json
from sqlalchemy import Column, String, Integer, BOOLEAN, Float, ForeignKey, select
from sqlalchemy.orm import relationship
from server.conf import Base, engine
url_prefix = f'http://127.0.0.1:7878/'
class Role(Base):
"""角色表"""
__tablename__ = 'role'
roleId = Column(Integer, primary_key=True)
roleName = Column(String(200), nullable=True)
flag = Column(BOOLEAN, default=True, nullable=True)
operateArr = Column(String(500), nullable=True)
user = relationship("User", back_populates="role")
operate = [
{'label': '后台管理', 'value': 'admin'},
{'label': '用户管理', 'value': 'userManager'},
{'label': '添加用户', 'value': 'addUser'},
{'label': '修改用户', 'value': 'updateUser'},
{'label': '删除用户', 'value': 'deleteUser'},
{'label': '角色管理', 'value': 'roleManager'},
{'label': '添加角色', 'value': 'addRole'},
{'label': '删除角色', 'value': 'deleteRole'},
{'label': '修改角色', 'value': 'updateRole'},
]
def to_dict(self):
tmp = []
if self.operateArr:
for i in self.operateArr.split(','):
for jj in self.operate:
if jj['value'] == i:
tmp.append(jj['label'])
break
ops = ', '.join(tmp)
else:
ops = ''
return {
'pk': self.roleId,
'roleName': self.roleName,
'operateArr': self.operateArr.split(',') if self.operateArr else [],
'auth': ops,
}
class User(Base):
"""用户表"""
__tablename__ = 'user'
userId = Column(Integer, primary_key=True)
username = Column(String(200), nullable=False)
avatar_url = Column(String(200), nullable=True)
password = Column(String(200), nullable=True)
roleId = Column(Integer, ForeignKey('role.roleId', ondelete='SET NULL'), nullable=True)
role = relationship("Role", back_populates="user")
flag = Column(BOOLEAN, nullable=True, default=True)
def to_dict(self):
return {
'pk': self.userId,
'username': self.username,
'avatar_url': self.avatar_url,
'roleId': self.roleId,
'roleName': self.role.roleName if self.role else '',
}
class Project(Base):
"""项目表"""
__tablename__ = 'project'
projectId = Column(Integer, primary_key=True)
name = Column(String(200), nullable=True)
platform = Column(String(200), nullable=True)
openRank = Column(Float, nullable=True)
activity = Column(Float, nullable=True)
stars = Column(Integer, nullable=True)
attention = Column(Integer, nullable=True)
technical_fork = Column(Integer, nullable=True)
proj_data = relationship("ProjData", back_populates="project")
user_proj_map = relationship("UserProjMap", back_populates="project")
class ProjData(Base):
"""项目数据表"""
__tablename__ = 'proj_data'
index = Column(Integer, primary_key=True)
projectId = Column(Integer, ForeignKey('project.projectId', ondelete='SET NULL'), nullable=False)
project = relationship("Project", back_populates="proj_data")
label = Column(String(200), nullable=True)
tt = Column(Integer, nullable=True)
ttType = Column(String(200), nullable=True, comment='时间类型y年m月')
openRank = Column(Float, nullable=True)
activity = Column(Float, nullable=True)
stars = Column(Integer, nullable=True)
attention = Column(Integer, nullable=True)
technical_fork = Column(Integer, nullable=True)
async def to_dict(self):
return {
'pk': self.projectId,
'label': self.label,
'item': 1,
'tt': self.tt,
'openRank': self.openRank,
'activity': self.activity,
'stars': self.stars,
'attention': self.attention,
'technical_fork': self.technical_fork,
}
class DevUser(Base):
"""开发者表"""
__tablename__ = 'devuser'
devUserId = Column(Integer, primary_key=True)
name = Column(String(200), nullable=True)
avatar_url = Column(String(500), nullable=True, comment='fork数')
platform = Column(String(200), nullable=True)
openRank = Column(Float, nullable=True)
activity = Column(Float, nullable=True)
repos = Column(Integer, nullable=True, comment='仓库总数')
stars = Column(Integer, nullable=True, comment='星标数')
technical_fork = Column(Integer, nullable=True, comment='被fork数')
forks = Column(Integer, nullable=True, comment='fork总数')
followers = Column(Integer, nullable=True, comment='关注人数')
following = Column(Integer, nullable=True, comment='粉丝人数')
template_count = Column(Integer, nullable=True, comment='模板数')
issues_count = Column(Integer, nullable=True, comment='模板数')
dev_user_data = relationship("DevUserData", back_populates="dev_user")
user_devuser_map = relationship("UserDevUserMap", back_populates="dev_user")
class DevUserData(Base):
"""开发者数据表"""
__tablename__ = 'devuser_data'
index = Column(Integer, primary_key=True)
devUserId = Column(Integer, ForeignKey('devuser.devUserId', ondelete='SET NULL'), nullable=False)
dev_user = relationship("DevUser", back_populates="dev_user_data")
label = Column(String(200), nullable=True)
tt = Column(Integer, nullable=True)
ttType = Column(String(200), nullable=True, comment='时间类型y年m月')
openRank = Column(Float, nullable=True)
activity = Column(Float, nullable=True)
async def to_dict(self):
return {
'index': self.index,
'pk': self.devUserId,
'avatar_url': url_prefix + (self.dev_user.avatar_url or ''),
'home': 'https://github.com/' + self.dev_user.name,
'item': 2,
'label': self.label,
'tt': self.tt,
'openRank': self.openRank,
'activity': self.activity,
}
class UserProjMap(Base):
"""用户项目映射"""
__tablename__ = 'user_proj_map'
userId = Column(Integer, ForeignKey('user.userId', ondelete='SET NULL'), primary_key=True,nullable=False)
projectId = Column(Integer, ForeignKey('project.projectId', ondelete='SET NULL'), primary_key=True,nullable=False)
project = relationship("Project", back_populates="user_proj_map")
flag = Column(BOOLEAN, nullable=True, default=True)
def to_dict(self):
return {
'pk': self.projectId,
'label': self.project.name,
'item': 1,
'openRank': self.project.openRank,
'activity': self.project.activity,
'stars': self.project.stars,
'attention': self.project.attention,
'technical_fork': self.project.technical_fork,
}
class UserDevUserMap(Base):
"""用户开发者映射"""
__tablename__ = 'user_devuser_map'
userId = Column(Integer, ForeignKey('user.userId', ondelete='SET NULL'), primary_key=True,nullable=False)
devUserId = Column(Integer, ForeignKey('devuser.devUserId',ondelete='SET NULL'), primary_key=True,nullable=False)
dev_user = relationship("DevUser", back_populates="user_devuser_map")
flag = Column(BOOLEAN, nullable=True, default=True)
def to_dict(self):
return {
'pk': self.devUserId,
'avatar_url': url_prefix + (self.dev_user.avatar_url or ''),
'item': 2,
'label': self.dev_user.name,
'openRank': self.dev_user.openRank,
'activity': self.dev_user.activity,
}
Base.metadata.create_all(engine)