103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
import pymongo
|
|
from fastapi import APIRouter, Depends, Request
|
|
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='项目名已存在', data='项目名已存在')
|
|
# todo 建默认文件夹
|
|
# schemas.FolderCreate
|
|
# await crud.folder.create(db, data_in, user_id=current_user.id)
|
|
|
|
return schemas.Msg(code=0, msg='创建成功')
|
|
|
|
|
|
@router.get("/")
|
|
async def read_project(request: Request,
|
|
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 schemas.Msg(code=0, msg='ok', data=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': [], 'spaces': []}
|
|
# 我的看板
|
|
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({
|
|
'name': item['name'],
|
|
'children': [],
|
|
'_id': item['_id']
|
|
})
|
|
for d in dashboards:
|
|
res['kanban'][-1]['children'].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['spaces'].append({
|
|
'name': item['name'],
|
|
'children': [],
|
|
'_id': item['_id']
|
|
})
|
|
res['spaces'][-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['spaces'][-1]['children'].append({
|
|
'name': f['name'],
|
|
'_id': f['_id'],
|
|
'children': [],
|
|
'isFolder': True
|
|
})
|
|
|
|
for d in await crud.dashboard.find_many(db, pid=f['_id']):
|
|
res['spaces'][-1]['children'][-1]['children'].append({
|
|
'name': d['name'],
|
|
'_id': d['_id']
|
|
})
|
|
|
|
# 空间 看板
|
|
for d in await crud.dashboard.find_many(db, pid=item['_id']):
|
|
res['spaces'][-1]['children'].append({
|
|
'name': d['name'],
|
|
'_id': d['_id'],
|
|
'isFolder': False
|
|
})
|
|
|
|
return schemas.Msg(code=0, msg='ok', data=res)
|