From 0513f46d996d6ec2117cba25ff3d158fb312cd43 Mon Sep 17 00:00:00 2001 From: wuaho Date: Mon, 29 Nov 2021 18:11:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api_v1/endpoints/dashboard.py | 54 ++++++++++++++++++++++++++++++- api/api_v1/endpoints/report.py | 12 ++++--- schemas/dashboard.py | 4 +++ 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/api/api_v1/endpoints/dashboard.py b/api/api_v1/endpoints/dashboard.py index aa20429..e5f1d4d 100644 --- a/api/api_v1/endpoints/dashboard.py +++ b/api/api_v1/endpoints/dashboard.py @@ -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') diff --git a/api/api_v1/endpoints/report.py b/api/api_v1/endpoints/report.py index 9f03dc7..6699ef6 100644 --- a/api/api_v1/endpoints/report.py +++ b/api/api_v1/endpoints/report.py @@ -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} diff --git a/schemas/dashboard.py b/schemas/dashboard.py index f2a7761..bd1af15 100644 --- a/schemas/dashboard.py +++ b/schemas/dashboard.py @@ -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]