import pymongo from fastapi import APIRouter, Depends from motor.motor_asyncio import AsyncIOMotorDatabase import crud, schemas from api import deps from db import get_database from schemas.project import ProjectCreate router = APIRouter() @router.post("/create") async def create( data_in: ProjectCreate, db: AsyncIOMotorDatabase = Depends(get_database), current_user: schemas.UserDB = Depends(deps.get_current_user) ) -> schemas.Msg: """创建项目""" try: await crud.project.create(db, data_in, user_id=current_user.id) except pymongo.errors.DuplicateKeyError: return schemas.Msg(code=-1, msg='error', detail='项目名已存在') # todo 建默认文件夹 return schemas.Msg(code=0, msg='ok', detail='创建成功') @router.get("/") async def read_project( db: AsyncIOMotorDatabase = Depends(get_database), current_user: schemas.UserDB = Depends(deps.get_current_user) ): """查看自己拥有的项目""" res = await crud.project.read_project(db, user_id=current_user.id) return res @router.post("/kanban") async def read_kanban( data_in: schemas.ProjectKanban, db: AsyncIOMotorDatabase = Depends(get_database), current_user: schemas.UserDB = Depends(deps.get_current_user) ): """获取自己的看板""" res = {'kanban': [], 'space': []} # 我的看板 kanban = await crud.folder.read_folder(db, project_id=data_in.id, user_id=current_user.id, cat='kanban') for item in kanban: dashboards = await crud.dashboard.find_many(db, pid=item['_id']) res['kanban'].append({ 'folder_name': item['name'], 'dashboards': [], '_id': item['_id'] }) for d in dashboards: res['kanban'][-1]['dashboards'].append({ 'name': d['name'], '_id': item['_id'] }) # 我的空间 where = { 'project_id': data_in.id, '$or': [{'rw_members': current_user.id}, {'r_members': current_user.id}] } spaces = await crud.space.find_many(db, **where) # 空间 文件夹 看板 for item in spaces: res['space'].append({ 'space_name': item['name'], 'folders': [], 'dashboards': [], '_id': item['_id'] }) res['space'][-1]['authority'] = 'rw' if current_user.id in item['rw_members'] else 'r' for f in await crud.folder.find_many(db, pid=item['_id']): res['space'][-1]['folders'].append({ 'name': f['name'], '_id': f['_id'], 'dashboards': [], }) for d in await crud.dashboard.find_many(db, pid=f['_id']): res['space'][-1]['folders'][-1]['dashboards'].append({ 'name': d['name'], '_id': d['_id'] }) # 空间 看板 for d in await crud.dashboard.find_many(db, pid=item['_id']): res['space'][-1]['dashboards'].append({ 'name': d['name'], '_id': d['_id'] }) return res