import time, random from motor.motor_asyncio import AsyncIOMotorDatabase from crud.base import CRUDBase from schemas import * __all__ = 'project', def get_uid(): return hex(int(time.time() * 10 ** 7) + random.randint(0, 10000))[2:] class CRUDProject(CRUDBase): async def create(self, db: AsyncIOMotorDatabase, obj_in: ProjectCreate, current_user): db_obj = ProjectDB( **obj_in.dict(), user_id=current_user.id, members=[current_user.username], _id=get_uid() ) return await db[self.coll_name].insert_one(db_obj.dict(by_alias=True)) async def get_my_game(self, db, game_names: list): return await self.find_many(db, {'game': {'$in': game_names}}) async def all_game(self, db: AsyncIOMotorDatabase): return await self.find_many(db, {}) async def read_project(self, db: AsyncIOMotorDatabase, username: str, **kwargs): return await self.read_have(db, username, **kwargs) async def add_members(self, db: AsyncIOMotorDatabase, obj_in: ProjectMember): p = await self.get(db, obj_in.project_id) members = list(set(p.get('members')) | set(obj_in.members)) await self.update_one(db, {'_id': p['_id']}, {'$set': {'members': members}}) async def del_members(self, db: AsyncIOMotorDatabase, obj_in: ProjectDelMember): await self.update_one(db, {'_id': obj_in.project_id}, {'$pull': {'members': obj_in.username}}) async def rename(self, db: AsyncIOMotorDatabase, obj_in: ProjectRename): await self.update_one(db, {'_id': obj_in.project_id}, {'$set': {'name': obj_in.rename}}) async def create_index(self, db: AsyncIOMotorDatabase): await db[self.coll_name].create_index('game', unique=True) await db[self.coll_name].create_index('name', unique=True) project = CRUDProject('project')