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='error', data='看板已存在') # todo 建默认文件夹 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: # 删除Dashboard 自己创建的 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 delete( 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, 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 add_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 add_report(_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'])