From 192b407e15ba85e46e8cb42ed042d123311c870c Mon Sep 17 00:00:00 2001 From: wuaho Date: Wed, 18 Aug 2021 17:17:16 +0800 Subject: [PATCH] 1 --- api/api_v1/endpoints/data_auth.py | 2 +- api/api_v1/endpoints/project.py | 2 +- api/api_v1/endpoints/space.py | 30 ++++++++++++++++++++++++------ crud/crud_space.py | 16 ++++++++++++++-- models/x_analysis.py | 6 +++--- schemas/space.py | 10 +++++++--- 6 files changed, 50 insertions(+), 16 deletions(-) diff --git a/api/api_v1/endpoints/data_auth.py b/api/api_v1/endpoints/data_auth.py index 736d937..896500d 100644 --- a/api/api_v1/endpoints/data_auth.py +++ b/api/api_v1/endpoints/data_auth.py @@ -112,7 +112,7 @@ async def my_event(request: Request, my_data_auth = [] - my_data_auth = await ck.distinct(game, 'event', '#event_name') + my_data_auth = await ck.distinct(game, 'event_view', '#event_name') # # else: diff --git a/api/api_v1/endpoints/project.py b/api/api_v1/endpoints/project.py index e372902..d6b1a1b 100644 --- a/api/api_v1/endpoints/project.py +++ b/api/api_v1/endpoints/project.py @@ -227,7 +227,7 @@ async def read_kanban( # 我的空间 where = { 'project_id': data_in.id, - 'members._id': current_user.id + 'members.user_id': current_user.id # '$or': [{'rw_members': current_user.id}, {'r_members': current_user.id}] } spaces = await crud.space.find_many(db, where) diff --git a/api/api_v1/endpoints/space.py b/api/api_v1/endpoints/space.py index b74aa72..2e5c802 100644 --- a/api/api_v1/endpoints/space.py +++ b/api/api_v1/endpoints/space.py @@ -11,6 +11,7 @@ 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) @@ -68,14 +69,31 @@ async def rename( return schemas.Msg(code=0, msg='ok', data=1) -@router.post("/add_members") -async def add_members( +@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.rename(db, data_in) - pass - + """设置空间成员""" + 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) diff --git a/crud/crud_space.py b/crud/crud_space.py index 72f5b6d..bec447b 100644 --- a/crud/crud_space.py +++ b/crud/crud_space.py @@ -7,20 +7,32 @@ 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({'_id': user.id, 'name': user.name, 'authority': 'rw'}) + obj_in.members.append({'user_id': user.id, 'authority': 'rw'}) db_obj = SpaceDB( **obj_in.dict(by_alias=True), user_id=user.id, - _id=uuid.uuid1().hex + _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}}) diff --git a/models/x_analysis.py b/models/x_analysis.py index cba17d2..517e5c2 100644 --- a/models/x_analysis.py +++ b/models/x_analysis.py @@ -119,7 +119,7 @@ class XAnalysis: cnt1, {select_ltv_str} FROM (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, uniqExact(`{quota}`) cnt1 - FROM {self.game}.event + FROM {self.game}.event_view where `#event_name` = 'create_account' AND {where_str} GROUP BY toDate(addHours(`#event_time`, `#zone_offset`))) as reg @@ -127,11 +127,11 @@ class XAnalysis: (select a.date, {sumpay_str} from (SELECT toDate(addHours(`#event_time`, `#zone_offset`)) as date, `{quota}` - FROM {self.game}.event + FROM {self.game}.event_view where `#event_name` = 'create_account' and {where_str}) as a left join (select `{quota}`, unitPrice/100 as money, toDate(addHours(`#event_time`, `#zone_offset`)) as date - from {self.game}.event + from {self.game}.event_view where `#event_name` = 'pay' and {where_order_str}) b on a.`{quota}` = b.`{quota}` group by a.date) log on reg.date = log.date diff --git a/schemas/space.py b/schemas/space.py index de52c9e..0d79262 100644 --- a/schemas/space.py +++ b/schemas/space.py @@ -17,8 +17,8 @@ class Authority(str, Enum): r = 'r' -class Member(DBBase): - name: str +class Member(BaseModel): + user_id: str authority: Authority @@ -35,6 +35,10 @@ class SpaceDelete(DBBase): pass +class SpaceDetail(BaseModel): + space_id: str + + class SpaceRename(BaseModel): space_id: str new_name: str @@ -42,7 +46,7 @@ class SpaceRename(BaseModel): class AddSpaceMembers(BaseModel): space_id: str - user_ids: List[str] + members: List[Member] # --------------------------------------------------------------