49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
import time, random
|
|
import pymongo
|
|
from motor.motor_asyncio import AsyncIOMotorDatabase
|
|
|
|
import schemas
|
|
from crud.base import CRUDBase
|
|
from schemas import *
|
|
|
|
__all__ = 'space',
|
|
|
|
|
|
def get_uid():
|
|
return hex(int(time.time() * 10 ** 7) + random.randint(0, 10000))[2:]
|
|
|
|
|
|
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')
|