This commit is contained in:
wuaho 2021-11-29 18:11:03 +08:00
parent b4ed73eb64
commit 0513f46d99
3 changed files with 64 additions and 6 deletions

View File

@ -89,6 +89,7 @@ async def sort(
@router.post("/copy")
async def copy(
request: Request,
data_in: schemas.DashboardCopy,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
@ -101,6 +102,7 @@ async def copy(
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')
user_id = request.user.id
# 创建默认空间
if not dest_space_id:
default_space = await crud.space.create(db,
@ -113,6 +115,54 @@ async def copy(
item['project_id'] = dest_project_id
item['pid'] = dest_space_id
item['cat'] = 'space'
item['user_id'] = user_id
item['_id'] = get_uid()
for report in item['reports']:
report_id = report['report_id']
new_report = await crud.report.get(db, report_id)
new_report_id = get_uid()
report['report_id'] = new_report_id
new_report['user_id'] = user_id
new_report['_id'] = new_report_id
new_report['project_id'] = dest_project_id
try:
await crud.report.insert_one(db, new_report)
except:
exists_report = await crud.report.find_one(db, {'project_id': item['project_id'],
'user_id': item['user_id'], 'name': report['name']})
report['report_id'] = exists_report['_id']
try:
await crud.dashboard.update_one(db,
{'project_id': item['project_id'], 'name': item['name'],
'user_id': item['user_id']}, {'$set': item},
upsert=True)
except:
pass
return schemas.Msg(code=0, msg='ok', data='复制成功')
@router.post("/copy_to_my_space")
async def copy(
request: Request,
data_in: schemas.DashboardCopyToSpace,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""
复制到自己空间
"""
# 检查是否存在默认空间 不存在就创建
dest_project_id = data_in.project_id
dest_space_id = data_in.dest_space_id
user_id = request.user.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['user_id'] = user_id
item['cat'] = 'space'
item['_id'] = get_uid()
for report in item['reports']:
report_id = report['report_id']
@ -120,6 +170,7 @@ async def copy(
new_report_id = get_uid()
report['report_id'] = new_report_id
new_report['_id'] = new_report_id
new_report['user_id'] = user_id
new_report['project_id'] = dest_project_id
try:
await crud.report.insert_one(db, new_report)
@ -162,7 +213,8 @@ async def edit_report(data_in: schemas.EditReport,
"""编辑报表"""
res = await crud.dashboard.update_one(db, {'_id': data_in.id, 'reports.report_id': data_in.report.report_id},
{'$set': {f'reports.$.{k}':v for k,v in data_in.report.dict(skip_defaults=True).items()}})
{'$set': {f'reports.$.{k}': v for k, v in
data_in.report.dict(skip_defaults=True).items()}})
return schemas.Msg(code=0, msg='ok', data='ok')

View File

@ -38,10 +38,10 @@ async def edit(
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""编辑报表"""
await crud.report.update_one(db, {'_id': data_in.report_id},
{'$set': {'query': data_in.query, 'name': data_in.name, 'desc': data_in.desc}})
res = await crud.report.update_one(db, {'_id': data_in.report_id, 'user_id': request.user.id},
{'$set': {'query': data_in.query, 'name': data_in.name, 'desc': data_in.desc}})
if not res.modified_count:
return schemas.Msg(code=-1, msg='只能报表所有者编辑')
return schemas.Msg(code=0, msg='ok', data='编辑成功')
@ -74,11 +74,13 @@ async def read_report(
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> Any:
"""获取已建报表"""
"""获取已建报表 属于自己的"""
ext_where = dict()
dashboard = dict()
if data_in.report_id:
ext_where = {'_id': {'$in': data_in.report_id}}
else:
ext_where['user_id'] = request.user.id
if data_in.dashboard_id:
dashboard = await crud.dashboard.get(db, id=data_in.dashboard_id)
# projection = {'query': False}

View File

@ -75,6 +75,10 @@ class DashboardCopy(BaseModel):
source_ids: List[str]
dest_project_id: str
class DashboardCopyToSpace(BaseModel):
source_ids: List[str]
project_id: str
dest_space_id: str
class AddReport(DBBase):
report_ids: List[Report]