1
This commit is contained in:
parent
f7da81554b
commit
7bcdec8e5b
@ -222,14 +222,14 @@ async def all_role(request: Request,
|
|||||||
}
|
}
|
||||||
|
|
||||||
"""获取域内所有角色"""
|
"""获取域内所有角色"""
|
||||||
roles = await crud.authority.find_many(db, role_name={'$exists': 1}, game=game)
|
roles = await crud.authority.find_many(db, {'role_name': {'$exists': 1}, 'game': game})
|
||||||
dom_data = [{'role': item['v1'], 'title': item['role_name'], 'id': str(item['_id'])} for item in roles]
|
dom_data = [{'role': item['v1'], 'title': item['role_name'], 'id': str(item['_id'])} for item in roles]
|
||||||
for item in dom_data:
|
for item in dom_data:
|
||||||
q = await crud.authority.get_role_dom_authority(db, item['role'], game, api_data)
|
q = await crud.authority.get_role_dom_authority(db, item['role'], game, api_data)
|
||||||
item['authority'] = [{'title': k, 'child': v} for k, v in q.items()]
|
item['authority'] = [{'title': k, 'child': v} for k, v in q.items()]
|
||||||
|
|
||||||
# 获取系统角色
|
# 获取系统角色
|
||||||
roles = await crud.authority.find_many(db, role_name={'$exists': 1}, game='*')
|
roles = await crud.authority.find_many(db, {'role_name':{'$exists': 1}, 'game':'*'})
|
||||||
sys_data = [{'role': item['v1'], 'title': item['role_name'], 'id': str(item['_id'])} for item in roles]
|
sys_data = [{'role': item['v1'], 'title': item['role_name'], 'id': str(item['_id'])} for item in roles]
|
||||||
for item in sys_data:
|
for item in sys_data:
|
||||||
q = await crud.authority.get_role_dom_authority(db, item['role'], dom=game, api_data=api_data)
|
q = await crud.authority.get_role_dom_authority(db, item['role'], dom=game, api_data=api_data)
|
||||||
@ -241,8 +241,6 @@ async def all_role(request: Request,
|
|||||||
}
|
}
|
||||||
return schemas.Msg(code=0, msg='ok', data=data)
|
return schemas.Msg(code=0, msg='ok', data=data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# @router.post("/set_role")
|
# @router.post("/set_role")
|
||||||
# async def set_role(request: Request,
|
# async def set_role(request: Request,
|
||||||
# data_id: schemas.AccountSetRole,
|
# data_id: schemas.AccountSetRole,
|
||||||
|
@ -5,6 +5,7 @@ import crud, schemas
|
|||||||
|
|
||||||
from db import get_database
|
from db import get_database
|
||||||
from api import deps
|
from api import deps
|
||||||
|
from utils.func import get_uid
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -26,12 +27,13 @@ async def create(
|
|||||||
|
|
||||||
@router.post("/delete")
|
@router.post("/delete")
|
||||||
async def delete(
|
async def delete(
|
||||||
|
request: Request,
|
||||||
data_in: schemas.DashboardDelete,
|
data_in: schemas.DashboardDelete,
|
||||||
db: AsyncIOMotorDatabase = Depends(get_database),
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||||
) -> schemas.Msg:
|
) -> schemas.Msg:
|
||||||
"""删除看板"""
|
"""删除看板"""
|
||||||
del_dashboard = await crud.dashboard.delete(db, _id=data_in.id, user_id=current_user.id)
|
del_dashboard = await crud.dashboard.delete(db, {'_id': {'$in': data_in.ids}, 'user_id': request.user.id})
|
||||||
|
|
||||||
if del_dashboard.deleted_count == 0:
|
if del_dashboard.deleted_count == 0:
|
||||||
return schemas.Msg(code=-1, msg='error', data='删除失败')
|
return schemas.Msg(code=-1, msg='error', data='删除失败')
|
||||||
@ -47,11 +49,45 @@ async def move(
|
|||||||
"""
|
"""
|
||||||
移动看板
|
移动看板
|
||||||
"""
|
"""
|
||||||
res = await crud.dashboard.update_one(db, {'_id': data_in.source_id},
|
for source_id in data_in.source_ids:
|
||||||
{'$set': dict(cat=data_in.cat, pid=data_in.dest_id)})
|
res = await crud.dashboard.update_one(db, {'_id': source_id},
|
||||||
if res.deleted_count == 0:
|
{'$set': dict(cat=data_in.cat, pid=data_in.dest_pid)})
|
||||||
return schemas.Msg(code=-1, msg='error', data='删除失败')
|
return schemas.Msg(code=0, msg='ok', data='移动成功')
|
||||||
return schemas.Msg(code=0, msg='ok', data='删除成功')
|
|
||||||
|
|
||||||
|
@router.post("/copy")
|
||||||
|
async def copy(
|
||||||
|
data_in: schemas.DashboardCopy,
|
||||||
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||||
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||||
|
) -> schemas.Msg:
|
||||||
|
"""
|
||||||
|
复制到其他项目
|
||||||
|
"""
|
||||||
|
# 检查是否存在默认空间 不存在就创建
|
||||||
|
dest_project_id = data_in.dest_project_id
|
||||||
|
dest_default_space = await crud.space.find_one(db, {'project_id': dest_project_id, 'name': '默认空间'},
|
||||||
|
{'_id': True})
|
||||||
|
dest_space_id = dest_default_space.get('_id')
|
||||||
|
# 创建默认空间
|
||||||
|
if not dest_space_id:
|
||||||
|
default_space = await crud.space.create(db,
|
||||||
|
schemas.SpaceCreate(name='默认空间', project_id=dest_project_id),
|
||||||
|
user=current_user)
|
||||||
|
dest_space_id = default_space.inserted_id
|
||||||
|
|
||||||
|
dashboards = await crud.dashboard.find_many(db, {'_id': {'$in': data_in.source_ids}}, {'_id': False})
|
||||||
|
for item in dashboards:
|
||||||
|
item['project_id'] = dest_project_id
|
||||||
|
item['pid'] = dest_space_id
|
||||||
|
item['cat'] = 'space'
|
||||||
|
item['_id'] = get_uid()
|
||||||
|
await crud.dashboard.update_one(db,
|
||||||
|
{'project_id': item['project_id'], 'name': item['name'],
|
||||||
|
'user_id': item['user_id']}, {'$set': item},
|
||||||
|
upsert=True)
|
||||||
|
|
||||||
|
return schemas.Msg(code=0, msg='ok', data='复制成功')
|
||||||
|
|
||||||
|
|
||||||
@router.post("/add_report")
|
@router.post("/add_report")
|
||||||
|
@ -146,7 +146,7 @@ async def user_property(request: Request,
|
|||||||
data = json.loads(data)
|
data = json.loads(data)
|
||||||
propertys = []
|
propertys = []
|
||||||
|
|
||||||
data_attr = await crud.data_attr.find_many(db, game=game, cat='user')
|
data_attr = await crud.data_attr.find_many(db, {'game':game, 'cat':'user'})
|
||||||
data_attr = {item['name']: item for item in data_attr}
|
data_attr = {item['name']: item for item in data_attr}
|
||||||
|
|
||||||
for k, v in data.items():
|
for k, v in data.items():
|
||||||
@ -181,7 +181,7 @@ async def load_prop_quotas(request: Request,
|
|||||||
|
|
||||||
all_filed = await rdb.get(f'{game}_event')
|
all_filed = await rdb.get(f'{game}_event')
|
||||||
all_filed = json.loads(all_filed)
|
all_filed = json.loads(all_filed)
|
||||||
data_attr = await crud.data_attr.find_many(db, game=game, cat='event')
|
data_attr = await crud.data_attr.find_many(db, {'game':game, 'cat':'event'})
|
||||||
data_attr = {item['name']: item for item in data_attr}
|
data_attr = {item['name']: item for item in data_attr}
|
||||||
event_props = []
|
event_props = []
|
||||||
for item in event_prop_list:
|
for item in event_prop_list:
|
||||||
@ -274,7 +274,7 @@ async def load_filter_props(request: Request,
|
|||||||
all_filed = await rdb.get(f'{game}_event')
|
all_filed = await rdb.get(f'{game}_event')
|
||||||
all_filed = json.loads(all_filed)
|
all_filed = json.loads(all_filed)
|
||||||
|
|
||||||
data_attr = await crud.data_attr.find_many(db, game=game, cat='event')
|
data_attr = await crud.data_attr.find_many(db, {'game':game, 'cat':'event'})
|
||||||
data_attr = {item['name']: item for item in data_attr}
|
data_attr = {item['name']: item for item in data_attr}
|
||||||
event_props = []
|
event_props = []
|
||||||
for item in event_prop_list:
|
for item in event_prop_list:
|
||||||
@ -288,7 +288,7 @@ async def load_filter_props(request: Request,
|
|||||||
}
|
}
|
||||||
event_props.append(event_prop)
|
event_props.append(event_prop)
|
||||||
|
|
||||||
data_attr = await crud.data_attr.find_many(db, game=game, cat='user')
|
data_attr = await crud.data_attr.find_many(db, {'game':game, 'cat':'user'})
|
||||||
data_attr = {item['name']: item for item in data_attr}
|
data_attr = {item['name']: item for item in data_attr}
|
||||||
user_props = []
|
user_props = []
|
||||||
for item in user_prop_list:
|
for item in user_prop_list:
|
||||||
|
@ -31,7 +31,7 @@ async def read_data_attr(
|
|||||||
data = json.loads(data)
|
data = json.loads(data)
|
||||||
res = []
|
res = []
|
||||||
|
|
||||||
data_attr = await crud.data_attr.find_many(db, game=game, cat=cat)
|
data_attr = await crud.data_attr.find_many(db, {'game':game, 'cat':cat})
|
||||||
data_attr = {item['name']: item for item in data_attr}
|
data_attr = {item['name']: item for item in data_attr}
|
||||||
|
|
||||||
for k, v in data.items():
|
for k, v in data.items():
|
||||||
|
@ -29,7 +29,7 @@ async def event_list(
|
|||||||
"""事件列表"""
|
"""事件列表"""
|
||||||
event_list = await ckdb.distinct(game, 'event', '#event_name')
|
event_list = await ckdb.distinct(game, 'event', '#event_name')
|
||||||
event_count = await ckdb.yesterday_event_count(game)
|
event_count = await ckdb.yesterday_event_count(game)
|
||||||
event_meta = await crud.event_mana.find_many(db, game=game) or {}
|
event_meta = await crud.event_mana.find_many(db, {'game':game}) or {}
|
||||||
if event_meta:
|
if event_meta:
|
||||||
event_meta = pd.DataFrame(event_meta).set_index('event_name').fillna('').T.to_dict()
|
event_meta = pd.DataFrame(event_meta).set_index('event_name').fillna('').T.to_dict()
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ async def create(
|
|||||||
await crud.authority.create(db, 'g', settings.SUPERUSER_NAME, role_name, '*', '*', role_name='系统项目管理员', game='*')
|
await crud.authority.create(db, 'g', settings.SUPERUSER_NAME, role_name, '*', '*', role_name='系统项目管理员', game='*')
|
||||||
# 添加数据权限
|
# 添加数据权限
|
||||||
await crud.authority.set_data_auth(db, schemas.DataAuthSet(username=request.user.username, data_auth_id='*'),
|
await crud.authority.set_data_auth(db, schemas.DataAuthSet(username=request.user.username, data_auth_id='*'),
|
||||||
game=data_in.game,v1=role_name)
|
game=data_in.game, v1=role_name)
|
||||||
return schemas.Msg(code=0, msg='创建成功')
|
return schemas.Msg(code=0, msg='创建成功')
|
||||||
|
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ async def members(request: Request,
|
|||||||
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
||||||
):
|
):
|
||||||
"""查看项目成员"""
|
"""查看项目成员"""
|
||||||
roles = await crud.authority.find_many(db, ptype='g', v2=game)
|
roles = await crud.authority.find_many(db, {'ptype': 'g', 'v2': game})
|
||||||
data = dict()
|
data = dict()
|
||||||
data_auth_ids = set()
|
data_auth_ids = set()
|
||||||
for item in roles:
|
for item in roles:
|
||||||
@ -214,7 +214,7 @@ async def read_kanban(
|
|||||||
kanban = await crud.folder.read_folder(db, project_id=data_in.id, user_id=current_user.id, cat='kanban')
|
kanban = await crud.folder.read_folder(db, project_id=data_in.id, user_id=current_user.id, cat='kanban')
|
||||||
|
|
||||||
for item in kanban:
|
for item in kanban:
|
||||||
dashboards = await crud.dashboard.find_many(db, pid=item['_id'])
|
dashboards = await crud.dashboard.find_many(db, {'pid': item['_id']})
|
||||||
res['kanban'].append({
|
res['kanban'].append({
|
||||||
'name': item['name'],
|
'name': item['name'],
|
||||||
'children': [],
|
'children': [],
|
||||||
@ -232,7 +232,7 @@ async def read_kanban(
|
|||||||
'members._id': current_user.id
|
'members._id': current_user.id
|
||||||
# '$or': [{'rw_members': current_user.id}, {'r_members': current_user.id}]
|
# '$or': [{'rw_members': current_user.id}, {'r_members': current_user.id}]
|
||||||
}
|
}
|
||||||
spaces = await crud.space.find_many(db, **where)
|
spaces = await crud.space.find_many(db, where)
|
||||||
# 空间 文件夹 看板
|
# 空间 文件夹 看板
|
||||||
for item in spaces:
|
for item in spaces:
|
||||||
res['spaces'].append({
|
res['spaces'].append({
|
||||||
@ -242,7 +242,7 @@ async def read_kanban(
|
|||||||
})
|
})
|
||||||
res['spaces'][-1]['authority'] = 'rw' if current_user.id in item['members'] else 'r'
|
res['spaces'][-1]['authority'] = 'rw' if current_user.id in item['members'] else 'r'
|
||||||
|
|
||||||
for f in await crud.folder.find_many(db, pid=item['_id']):
|
for f in await crud.folder.find_many(db, {'pid': item['_id']}):
|
||||||
res['spaces'][-1]['children'].append({
|
res['spaces'][-1]['children'].append({
|
||||||
'name': f['name'],
|
'name': f['name'],
|
||||||
'_id': f['_id'],
|
'_id': f['_id'],
|
||||||
@ -250,14 +250,14 @@ async def read_kanban(
|
|||||||
'isFolder': True
|
'isFolder': True
|
||||||
})
|
})
|
||||||
|
|
||||||
for d in await crud.dashboard.find_many(db, pid=f['_id']):
|
for d in await crud.dashboard.find_many(db, {'pid': f['_id']}):
|
||||||
res['spaces'][-1]['children'][-1]['children'].append({
|
res['spaces'][-1]['children'][-1]['children'].append({
|
||||||
'name': d['name'],
|
'name': d['name'],
|
||||||
'_id': d['_id']
|
'_id': d['_id']
|
||||||
})
|
})
|
||||||
|
|
||||||
# 空间 看板
|
# 空间 看板
|
||||||
for d in await crud.dashboard.find_many(db, pid=item['_id']):
|
for d in await crud.dashboard.find_many(db, {'pid': item['_id']}):
|
||||||
res['spaces'][-1]['children'].append({
|
res['spaces'][-1]['children'].append({
|
||||||
'name': d['name'],
|
'name': d['name'],
|
||||||
'_id': d['_id'],
|
'_id': d['_id'],
|
||||||
|
@ -41,7 +41,7 @@ async def delete(
|
|||||||
# 删除空间 自己创建的
|
# 删除空间 自己创建的
|
||||||
del_space = await crud.space.delete(db, _id=data_in.id, user_id=current_user.id)
|
del_space = await crud.space.delete(db, _id=data_in.id, user_id=current_user.id)
|
||||||
# 删除文件夹
|
# 删除文件夹
|
||||||
del_folder = await crud.folder.find_many(db, pid=data_in.id)
|
del_folder = await crud.folder.find_many(db, {'pid':data_in.id})
|
||||||
del_folder_ids = [f['_id'] for f in del_folder]
|
del_folder_ids = [f['_id'] for f in del_folder]
|
||||||
await crud.folder.delete(db, pid=data_in.id)
|
await crud.folder.delete(db, pid=data_in.id)
|
||||||
# 删除文件夹下的 dashboard
|
# 删除文件夹下的 dashboard
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Request
|
from fastapi import APIRouter, Depends, Request
|
||||||
|
from motor.motor_asyncio import AsyncIOMotorDatabase
|
||||||
|
|
||||||
|
import crud
|
||||||
import schemas
|
import schemas
|
||||||
from api import deps
|
from api import deps
|
||||||
|
from db import get_database
|
||||||
from db.ckdb import CKDrive, get_ck_db
|
from db.ckdb import CKDrive, get_ck_db
|
||||||
from db.redisdb import RedisDrive, get_redis_pool
|
from db.redisdb import RedisDrive, get_redis_pool
|
||||||
from models.behavior_analysis import BehaviorAnalysis
|
from models.behavior_analysis import BehaviorAnalysis
|
||||||
@ -17,13 +20,11 @@ async def test(
|
|||||||
game: str,
|
game: str,
|
||||||
ckdb: CKDrive = Depends(get_ck_db),
|
ckdb: CKDrive = Depends(get_ck_db),
|
||||||
rdb: RedisDrive = Depends(get_redis_pool),
|
rdb: RedisDrive = Depends(get_redis_pool),
|
||||||
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
||||||
current_user: schemas.UserDB = Depends(deps.get_current_user),
|
current_user: schemas.UserDB = Depends(deps.get_current_user),
|
||||||
analysis: BehaviorAnalysis = Depends(BehaviorAnalysis)) -> schemas.Msg:
|
analysis: BehaviorAnalysis = Depends(BehaviorAnalysis)):
|
||||||
await analysis.init()
|
|
||||||
query = analysis.scatter_model_sql()
|
aaa=await crud.space.create(db,
|
||||||
data = {
|
schemas.SpaceCreate(name='默认空间', project_id='1b238814be9811ebb7a0d5bd867f57d6'),
|
||||||
'game': game,
|
user=current_user)
|
||||||
'analysis': analysis.game,
|
return 'aa'
|
||||||
'query': query
|
|
||||||
}
|
|
||||||
return schemas.Msg(code=0, msg='ok', data=data)
|
|
||||||
|
15
crud/base.py
15
crud/base.py
@ -10,8 +10,11 @@ class CRUDBase:
|
|||||||
async def get(self, db, id: Union[ObjectId, str]) -> dict:
|
async def get(self, db, id: Union[ObjectId, str]) -> dict:
|
||||||
return (await db[self.coll_name].find_one({'_id': id})) or dict()
|
return (await db[self.coll_name].find_one({'_id': id})) or dict()
|
||||||
|
|
||||||
async def find_one(self, db, projection=None, *args, **kwargs):
|
async def insert_one(self, db, document):
|
||||||
return (await db[self.coll_name].find_one(projection, *args, **kwargs)) or dict()
|
return await db[self.coll_name].insert_one(document)
|
||||||
|
|
||||||
|
async def find_one(self, db, filter=None, *args, **kwargs):
|
||||||
|
return (await db[self.coll_name].find_one(filter, *args, **kwargs)) or dict()
|
||||||
|
|
||||||
async def read_have(self, db, v: str, **kwargs):
|
async def read_have(self, db, v: str, **kwargs):
|
||||||
where = {'members': v}
|
where = {'members': v}
|
||||||
@ -19,8 +22,8 @@ class CRUDBase:
|
|||||||
cursor = db[self.coll_name].find(where)
|
cursor = db[self.coll_name].find(where)
|
||||||
return await cursor.to_list(length=9999)
|
return await cursor.to_list(length=9999)
|
||||||
|
|
||||||
async def find_many(self, db, projection=None, **kwargs):
|
async def find_many(self, db, *args, **kwargs):
|
||||||
cursor = db[self.coll_name].find(kwargs, projection)
|
cursor = db[self.coll_name].find(*args, **kwargs)
|
||||||
return await cursor.to_list(length=9999)
|
return await cursor.to_list(length=9999)
|
||||||
|
|
||||||
def find(self, db, *args, **kwargs):
|
def find(self, db, *args, **kwargs):
|
||||||
@ -32,8 +35,8 @@ class CRUDBase:
|
|||||||
async for doc in cursor:
|
async for doc in cursor:
|
||||||
yield doc
|
yield doc
|
||||||
|
|
||||||
async def delete(self, db, **kwargs):
|
async def delete(self, db, filter, collation=None, hint=None, session=None):
|
||||||
return await db[self.coll_name].delete_many(kwargs)
|
return await db[self.coll_name].delete_many(filter, collation, hint, session)
|
||||||
|
|
||||||
async def update_one(self, db, filter, update, upsert=False):
|
async def update_one(self, db, filter, update, upsert=False):
|
||||||
return await db[self.coll_name].update_one(filter, update, upsert)
|
return await db[self.coll_name].update_one(filter, update, upsert)
|
||||||
|
@ -39,9 +39,9 @@ class CRUDAuthority(CRUDBase):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
async def get_role_dom_authority(self, db, role, dom, api_data):
|
async def get_role_dom_authority(self, db, role, dom, api_data):
|
||||||
selected_api = {item['v2'] for item in await self.find_many(db, v0=role, v1=dom)}
|
selected_api = {item['v2'] for item in await self.find_many(db, {'v0':role, 'v1':dom})}
|
||||||
|
|
||||||
anonymous_api = {item['v2'] for item in await self.find_many(db, v0='*')}
|
anonymous_api = {item['v2'] for item in await self.find_many(db, {'v0':'*'})}
|
||||||
|
|
||||||
api_data = deepcopy(api_data)
|
api_data = deepcopy(api_data)
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ class CRUDDataAuth(CRUDBase):
|
|||||||
await self.update_one(db, data, {'$set': data}, upsert=True)
|
await self.update_one(db, data, {'$set': data}, upsert=True)
|
||||||
|
|
||||||
async def get_game_data_auth(self, db, game):
|
async def get_game_data_auth(self, db, game):
|
||||||
return await self.find_many(db, game=game)
|
return await self.find_many(db, {'game':game})
|
||||||
|
|
||||||
async def edit_data_auth(self, db, data_in: DataAuthEdit):
|
async def edit_data_auth(self, db, data_in: DataAuthEdit):
|
||||||
return await self.update_one(db, {'_id': ObjectId(data_in.data_auth_id)},
|
return await self.update_one(db, {'_id': ObjectId(data_in.data_auth_id)},
|
||||||
|
@ -22,7 +22,9 @@ class CRUDReport(CRUDBase):
|
|||||||
unique=True)
|
unique=True)
|
||||||
|
|
||||||
async def read_report(self, db, user_id, project_id, projection=None, **kwargs):
|
async def read_report(self, db, user_id, project_id, projection=None, **kwargs):
|
||||||
res = await self.find_many(db, user_id=user_id, project_id=project_id,projection=projection, **kwargs)
|
where = {'user_id': user_id, 'project_id': project_id}
|
||||||
|
where.update(**kwargs)
|
||||||
|
res = await self.find_many(db, where, projection)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ class CRUDSpace(CRUDBase):
|
|||||||
**obj_in.dict(by_alias=True), user_id=user.id,
|
**obj_in.dict(by_alias=True), user_id=user.id,
|
||||||
_id=uuid.uuid1().hex
|
_id=uuid.uuid1().hex
|
||||||
)
|
)
|
||||||
await db[self.coll_name].insert_one(db_obj.dict(by_alias=True))
|
return await db[self.coll_name].insert_one(db_obj.dict(by_alias=True))
|
||||||
|
|
||||||
async def read_space(self, db, user_id, project_id):
|
async def read_space(self, db, user_id, project_id):
|
||||||
return await self.read_have(db, user_id=user_id, project_id=project_id)
|
return await self.read_have(db, user_id=user_id, project_id=project_id)
|
||||||
|
@ -24,8 +24,8 @@ class ReadDashboard(BaseModel):
|
|||||||
id: str
|
id: str
|
||||||
|
|
||||||
|
|
||||||
class DashboardDelete(DBBase):
|
class DashboardDelete(BaseModel):
|
||||||
pass
|
ids: List[str]
|
||||||
|
|
||||||
|
|
||||||
class Category(str, Enum):
|
class Category(str, Enum):
|
||||||
@ -34,11 +34,16 @@ class Category(str, Enum):
|
|||||||
|
|
||||||
|
|
||||||
class DashboardMove(BaseModel):
|
class DashboardMove(BaseModel):
|
||||||
source_id: str
|
source_ids: List[str]
|
||||||
dest_id: str
|
dest_pid: str
|
||||||
cat: Category
|
cat: Category
|
||||||
|
|
||||||
|
|
||||||
|
class DashboardCopy(BaseModel):
|
||||||
|
source_ids: List[str]
|
||||||
|
dest_project_id: str
|
||||||
|
|
||||||
|
|
||||||
class Report(BaseModel):
|
class Report(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
report_id: str
|
report_id: str
|
||||||
|
5
utils/func.py
Normal file
5
utils/func.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def get_uid():
|
||||||
|
return hex(int(time.time() * 1000 * 10 ** 6))[2:]
|
Loading…
Reference in New Issue
Block a user