100 lines
3.5 KiB
Python
100 lines
3.5 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(
|
|
game: str,
|
|
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("/set_members")
|
|
async def set_members(
|
|
data_in: schemas.AddSpaceMembers,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""设置空间成员"""
|
|
res = await crud.space.set_members(db, data_in)
|
|
return schemas.Msg(code=0, msg='ok', data=1)
|
|
|
|
|
|
@router.post("/detail")
|
|
async def detail(
|
|
data_in: schemas.SpaceDetail,
|
|
game: str,
|
|
db: AsyncIOMotorDatabase = Depends(get_database),
|
|
current_user: schemas.UserDB = Depends(deps.get_current_user)
|
|
) -> schemas.Msg:
|
|
"""空间详细"""
|
|
space_info = await crud.space.get(db, id=data_in.space_id)
|
|
exists_member = {item.get('user_id') for item in space_info.get('members', [])}
|
|
members_info = await crud.user.find_ids(db, list(exists_member))
|
|
members_info = {item['_id']: item for item in members_info}
|
|
for item in space_info.get('members', []):
|
|
if user_info := members_info.get(item['user_id']):
|
|
item.update(schemas.UserDB(**user_info).dict(by_alias=True))
|
|
return schemas.Msg(code=0, msg='ok', data=space_info)
|