175 lines
6.7 KiB
Python
175 lines
6.7 KiB
Python
from typing import Any
|
|
|
|
import pymongo
|
|
from fastapi import APIRouter, Depends, Request
|
|
from motor.motor_asyncio import AsyncIOMotorDatabase
|
|
import crud, schemas
|
|
|
|
from db import get_database
|
|
from api import deps
|
|
from utils import get_uid
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/create")
|
|
async def create(
|
|
request: Request,
|
|
data_in: schemas.ReportCreate,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""新建报表"""
|
|
try:
|
|
await crud.report.create(db, data_in, user_id=request.user.id)
|
|
except pymongo.errors.DuplicateKeyError:
|
|
return schemas.Msg(code=-1, msg='error', data='报表已存在')
|
|
|
|
return schemas.Msg(code=0, msg='ok', data='创建成功')
|
|
|
|
|
|
@router.post("/edit")
|
|
async def edit(
|
|
request: Request,
|
|
data_in: schemas.ReportEdit,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""编辑报表"""
|
|
res = 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.matched_count:
|
|
# #if res.matched_count:
|
|
# return schemas.Msg(code=-1, msg='只能报表所有者编辑')
|
|
return schemas.Msg(code=0, msg='ok', data='编辑成功')
|
|
|
|
|
|
@router.post("/copy")
|
|
async def copy(
|
|
request: Request,
|
|
data_in: schemas.ReportCopy,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""复制报表到其他项目"""
|
|
|
|
for report_id in data_in.report_ids:
|
|
new_report = await crud.report.get(db, report_id)
|
|
if not new_report:
|
|
continue
|
|
new_report_id = get_uid()
|
|
new_report['_id'] = new_report_id
|
|
new_report['project_id'] = data_in.dest_project_id
|
|
await crud.report.insert_one(db, new_report)
|
|
return schemas.Msg(code=0, msg='ok', data='编辑成功')
|
|
|
|
|
|
@router.post("/read_report")
|
|
async def read_report(
|
|
request: Request,
|
|
data_in: schemas.ReportRead,
|
|
game: str,
|
|
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}
|
|
projection = None
|
|
#获取已建报表 属于自己的
|
|
reports = await crud.report.read_report(db, project_id=data_in.project_id,
|
|
projection=projection, **ext_where)
|
|
#有权限的都能获取到
|
|
# reports = await crud.report.read_report(db, project_id=data_in.project_id,
|
|
# projection=projection)
|
|
|
|
for item in reports:
|
|
item['added'] = False
|
|
# item['name'] = item['name']
|
|
item['show_config'] = dict()
|
|
added_ids = {item['report_id']: item for item in dashboard.get('reports', [])}
|
|
if item['_id'] in added_ids:
|
|
item['added'] = True
|
|
item['show_config'] = added_ids[item['_id']]
|
|
#保存的看板按备注显示的数据显示
|
|
if type(item['query']['events']) == list:
|
|
event_show_name = await crud.event_mana.get_all_show_name(db, game)
|
|
for i in item['query']['events']:
|
|
if 'event_name' in i:
|
|
if i['event_name'] in event_show_name:
|
|
if 'event_desc' in i :
|
|
event_name= i['event_name']
|
|
i['event_desc']= event_show_name[event_name]
|
|
else:
|
|
event_name = i['event_name']
|
|
i['eventDesc'] = event_show_name[event_name]
|
|
else:
|
|
if i['eventName'] in event_show_name:
|
|
if 'event_desc' in i :
|
|
event_name= i['eventName']
|
|
i['event_desc']= event_show_name[event_name]
|
|
else:
|
|
event_name = i['eventName']
|
|
i['eventDesc'] = event_show_name[event_name]
|
|
#放置争霸
|
|
if type(item['query']['events']) == dict:
|
|
data_attr = await crud.data_attr.find_many(db, {'game': game})
|
|
data_attr = {item['name']: item for item in data_attr}
|
|
item_dict=item['query']['events']
|
|
for k,v in item_dict.items():
|
|
if k == 'quotaDesc':
|
|
if item_dict['quotaDesc'] in data_attr:
|
|
item_dict['quotaDesc']=data_attr[item_dict['quotaDesc']]['show_name']
|
|
|
|
|
|
|
|
|
|
|
|
# for k,v in event_show_name.items():
|
|
# if 'event_desc' in item['query']['events'][0]:
|
|
# event_desc = item['query']['events'][0]['event_desc']
|
|
# if k == event_desc:
|
|
# item['query']['events'][0]['event_desc'] = event_show_name[event_desc]
|
|
# else:
|
|
# event_desc = item['query']['events'][0]['eventDesc']
|
|
# if k == event_desc:
|
|
# item['query']['events'][0]['eventDesc'] = event_show_name[event_desc]
|
|
|
|
reports = sorted(reports, key=lambda x: x.get('show_config', {'sort': 999}).get('sort', 999) or 999)
|
|
|
|
return schemas.Msg(code=0, msg='ok', data=reports)
|
|
|
|
|
|
@router.post("/delete")
|
|
async def delete(
|
|
request: Request,
|
|
data_in: schemas.ReportDelete,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""删除报表"""
|
|
# 删除Report 自己创建的
|
|
del_report = await crud.report.delete(db, {'_id': data_in.id, 'user_id': current_user.id})
|
|
# 从看板弹出
|
|
del_item = {'report_id': data_in.id}
|
|
await crud.dashboard.update_many(db, {}, {'$pull': {'reports': del_item}})
|
|
|
|
if del_report.deleted_count == 0:
|
|
return schemas.Msg(code=-1, msg='error', data='删除失败')
|
|
return schemas.Msg(code=0, msg='ok', data='删除成功')
|