xbackend/api/api_v1/endpoints/space.py
2021-08-17 18:06:51 +08:00

82 lines
2.7 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.SpaceCreate,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""创建空间"""
try:
if data_in.is_all_member:
data_in.members.clear()
users = await crud.user.find_many(db)
for user in users:
if user['_id'] == current_user.id:
continue
data_in.members.append(schemas.space.Member(**user, authority=data_in.authority))
await crud.space.create(db, data_in, user=current_user)
except pymongo.errors.DuplicateKeyError:
return schemas.Msg(code=-1, msg='空间已存在', data='空间已存在')
return schemas.Msg(code=0, msg='创建成功', data='创建成功')
@router.post("/delete")
async def delete(
data_in: schemas.SpaceDelete,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""删除空间"""
# 删除空间 自己创建的
del_space = await crud.space.delete(db, {'_id': data_in.id})
# 删除文件夹
del_folder = await crud.folder.find_many(db, {'pid': data_in.id})
del_folder_ids = [f['_id'] for f in del_folder]
await crud.folder.delete(db, {'pid': data_in.id})
# 删除文件夹下的 dashboard
if del_folder_ids:
await crud.dashboard.delete(db, {'_id': {'$in': del_folder_ids}})
# 删除空间下的 dashboard
await crud.dashboard.delete(db, {'pid': data_in.id})
if del_space.deleted_count == 0:
return schemas.Msg(code=-1, msg='error', data='删除失败')
return schemas.Msg(code=0, msg='ok', data='删除成功')
@router.post("/rename")
async def rename(
data_in: schemas.SpaceRename,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""重命名空间"""
res = await crud.space.rename(db, data_in)
return schemas.Msg(code=0, msg='ok', data=1)
@router.post("/add_members")
async def add_members(
data_in: schemas.AddSpaceMembers,
db: AsyncIOMotorDatabase = Depends(get_database),
current_user: schemas.UserDB = Depends(deps.get_current_user)
) -> schemas.Msg:
"""添加空间成员"""
# res = await crud.space.rename(db, data_in)
pass
return schemas.Msg(code=0, msg='ok', data=1)