49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
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')
|