209 lines
8.1 KiB
Python
209 lines
8.1 KiB
Python
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.func import get_uid
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/create")
|
|
async def create(
|
|
data_in: schemas.DashboardCreate,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""创建看板"""
|
|
try:
|
|
await crud.dashboard.create(db, data_in, user_id=current_user.id)
|
|
except pymongo.errors.DuplicateKeyError:
|
|
return schemas.Msg(code=-1, msg='看板已存在', data='看板已存在')
|
|
|
|
return schemas.Msg(code=0, msg='ok', data='创建成功')
|
|
|
|
|
|
@router.post('/edit_show_report')
|
|
async def edit_show_report(
|
|
request: Request,
|
|
data_in: schemas.EditShowReport,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
report_id = data_in.config.report_id
|
|
res = await crud.dashboard.update_one(db, {'_id': data_in.dashboard_id, 'reports.report_id': report_id},
|
|
{'$set': {f'reports.$.{k}': v for k, v in
|
|
data_in.config.dict(skip_defaults=True).items()}})
|
|
if res.modified_count == 1:
|
|
return schemas.Msg(code=0, msg='ok', data=data_in.config)
|
|
elif res.modified_count == 0:
|
|
return schemas.Msg(code=-1, msg='没有修改', data=dict())
|
|
|
|
|
|
@router.post("/delete")
|
|
async def delete(
|
|
request: Request,
|
|
data_in: schemas.DashboardDelete,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""删除看板"""
|
|
del_dashboard = await crud.dashboard.delete(db, {'_id': {'$in': data_in.ids}})
|
|
|
|
if del_dashboard.deleted_count == 0:
|
|
return schemas.Msg(code=-1, msg='error', data='删除失败')
|
|
return schemas.Msg(code=0, msg='ok', data='删除成功')
|
|
|
|
|
|
@router.post("/move")
|
|
async def move(
|
|
data_in: schemas.DashboardMove,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""
|
|
移动看板
|
|
"""
|
|
for source_id in data_in.source_ids:
|
|
res = await crud.dashboard.update_one(db, {'_id': source_id},
|
|
{'$set': dict(cat=data_in.cat, pid=data_in.dest_pid)})
|
|
return schemas.Msg(code=0, msg='ok', data='移动成功')
|
|
|
|
|
|
@router.post("/sort")
|
|
async def sort(
|
|
game: str,
|
|
data_in: schemas.DashboardSort,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""
|
|
看板排序
|
|
"""
|
|
for item in data_in.sort:
|
|
await crud.dashboard.set_sort(db, index=item.dashboard_id, sort=item.sort)
|
|
return schemas.Msg(code=0, msg='ok', data=1)
|
|
|
|
|
|
@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()
|
|
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['_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("/add_report")
|
|
async def add_report(data_in: schemas.AddReport,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
):
|
|
"""添加报表"""
|
|
reports = [item.dict() for item in data_in.report_ids]
|
|
# res = await crud.dashboard.update_one(db, {'_id': data_in.id},
|
|
# {'$push': {'reports': {'$each': reports}}})
|
|
await crud.dashboard.update_one(db, {'_id': data_in.id},
|
|
{'$set': {'reports': reports}})
|
|
return schemas.Msg(code=0, msg='ok', data='ok')
|
|
|
|
|
|
@router.post("/edit_report")
|
|
async def edit_report(data_in: schemas.EditReport,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
):
|
|
"""编辑报表"""
|
|
|
|
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()}})
|
|
|
|
return schemas.Msg(code=0, msg='ok', data='ok')
|
|
|
|
|
|
@router.post("/del_report")
|
|
async def del_report(
|
|
game: str,
|
|
data_in: schemas.DelReport,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
):
|
|
"""删除报表"""
|
|
del_item = {'report_id': data_in.report_id}
|
|
await crud.dashboard.update_one(db, {'_id': data_in.id}, {'$pull': {'reports': del_item}})
|
|
return schemas.Msg(code=0, msg='ok', data='ok')
|
|
|
|
|
|
@router.post("/edit")
|
|
async def edit(
|
|
game: str,
|
|
data_in: schemas.EditDashboard,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
):
|
|
"""编辑看板名"""
|
|
await crud.dashboard.update_one(db, {'_id': data_in.dashboard_id}, {'$set': {'name': data_in.new_name}})
|
|
return schemas.Msg(code=0, msg='ok', data='ok')
|
|
|
|
|
|
@router.post("/")
|
|
async def dashboards(request: Request,
|
|
game: str,
|
|
data_in: schemas.ReadDashboard,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
):
|
|
"""获取一个看板"""
|
|
res = await crud.dashboard.get(db, id=data_in.id)
|
|
reports = {item['report_id']: item for item in res['reports']}
|
|
reports_detail = await crud.report.find_many(db, {'_id': {'$in': list(reports.keys())}}, {'query.cachedata': False})
|
|
for item in reports_detail:
|
|
reports[item['_id']].update(item)
|
|
return schemas.Msg(code=0, msg='ok', data=reports)
|