xbackend/api/api_v1/endpoints/dashboard.py
2021-05-14 09:46:28 +08:00

88 lines
3.2 KiB
Python

import pymongo
from fastapi import APIRouter, Depends
from motor.motor_asyncio import AsyncIOMotorDatabase
import crud, schemas
from db import get_database
from api import deps
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("/delete")
async def delete(
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=data_in.id, user_id=current_user.id)
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:
"""
移动看板
"""
res = await crud.dashboard.update_one(db, {'_id': data_in.source_id},
{'$set': dict(cat=data_in.cat, pid=data_in.dest_id)})
if res.deleted_count == 0:
return schemas.Msg(code=-1, msg='error', data='删除失败')
return schemas.Msg(code=0, msg='ok', data='删除成功')
@router.post("/add_report")
async def add_report(data_in: schemas.AddReport,
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},
{'$push': {'reports': {'$each': data_in.report_ids}}})
return schemas.Msg(code=0, msg='ok', data='ok')
@router.post("/del_report")
async def del_report(data_in: schemas.DelReport,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
):
"""删除报表"""
for item in data_in.report_ids:
await crud.dashboard.update_one(db, {'_id': data_in.id}, {'$pull': {'reports': item}})
return schemas.Msg(code=0, msg='ok', data='ok')
@router.get("/")
async def dashboards(_id: str,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
):
"""获取一个看板"""
res = await crud.dashboard.get(db, id=_id)
res['reports'] = await crud.report.find_many(db, **{'$in': {'_id': res.get('reports')}})
return schemas.Msg(code=0, msg='ok', data=res['reports'])