import pymongo from motor.motor_asyncio import AsyncIOMotorDatabase import schemas from crud.base import CRUDBase from schemas import * __all__ = 'space', from utils import get_uid class CRUDSpace(CRUDBase): async def create(self, db: AsyncIOMotorDatabase, obj_in: SpaceCreate, user: UserDB): obj_in.members.append({'user_id': user.id, 'authority': 'rw'}) db_obj = SpaceDB( **obj_in.dict(by_alias=True), user_id=user.id, _id=get_uid() ) return await db[self.coll_name].insert_one(db_obj.dict(by_alias=True)) async def read_space(self, db, user_id, project_id): return await self.read_have(db, user_id=user_id, project_id=project_id) async def set_members(self, db, data_in: schemas.AddSpaceMembers): space_id = data_in.space_id # space_info = await self.get(db, space_id) # exists_member = {item.get('user_id') for item in space_info.get('members', [])} add_member = [] for member in data_in.members: # if member.user_id not in exists_member: add_member.append(member.dict()) return await self.update_one(db, {'_id': space_id}, {'$set': {'members': add_member}}) async def rename(self, db, data_in: schemas.SpaceRename): return await self.update_one(db, {'_id': data_in.space_id}, {'$set': {'name': data_in.new_name}}) async def create_index(self, db: AsyncIOMotorDatabase): await db[self.coll_name].create_index( [('project_id', pymongo.DESCENDING), ('name', pymongo.DESCENDING), ('user_id', pymongo.DESCENDING)], unique=True) space = CRUDSpace('space')