From 037f21661545c361446654bea77550235eb98862 Mon Sep 17 00:00:00 2001 From: ivan koryshkin Date: Tue, 6 Feb 2024 17:04:14 +0400 Subject: [PATCH 1/2] M2-4632: Change source for secret_user_id and nikname to subject --- src/apps/invitations/crud.py | 27 +++++++++++++++++++++++---- src/apps/invitations/domain.py | 2 ++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/apps/invitations/crud.py b/src/apps/invitations/crud.py index b3c6f108d85..cf09e5a79ad 100644 --- a/src/apps/invitations/crud.py +++ b/src/apps/invitations/crud.py @@ -1,7 +1,8 @@ import uuid from typing import Any -from sqlalchemy import delete, select, text, update +from sqlalchemy import and_, delete, func, select, text, update +from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.engine import Result from sqlalchemy.orm import Query from sqlalchemy.sql.functions import count @@ -23,6 +24,7 @@ from apps.shared.paging import paging from apps.shared.query_params import QueryParams from apps.shared.searching import Searching +from apps.subjects.db.schemas import SubjectSchema from apps.workspaces.db.schemas import UserAppletAccessSchema from infrastructure.database import BaseCRUD @@ -83,12 +85,28 @@ async def get_pending_by_invitor_id( ) query: Query = select( - InvitationSchema, AppletSchema.display_name.label("applet_name") + InvitationSchema, + AppletSchema.display_name.label("applet_name"), + SubjectSchema.secret_user_id.label("user_secret_id"), + SubjectSchema.nickname.label("nickname") ) query = query.where(InvitationSchema.applet_id.in_(user_applet_ids)) query = query.join( AppletSchema, AppletSchema.id == InvitationSchema.applet_id ) + + query = query.join( + SubjectSchema, + and_( + InvitationSchema.meta.has_key('subject_id'), + SubjectSchema.id == func.cast( + InvitationSchema.meta['subject_id'].astext, + UUID(as_uuid=True) + ) + ), + isouter=True + ) + query = query.where( InvitationSchema.status == InvitationStatus.PENDING ) @@ -108,7 +126,7 @@ async def get_pending_by_invitor_id( db_result = await self._execute(query) results = [] - for invitation, applet_name in db_result.all(): + for invitation, applet_name, secret_id, nickname in db_result.all(): results.append( InvitationDetail( id=invitation.id, @@ -123,7 +141,8 @@ async def get_pending_by_invitor_id( first_name=invitation.first_name, last_name=invitation.last_name, created_at=invitation.created_at, - nickname=invitation.nickname, + nickname=nickname, + secret_user_id=secret_id ) ) return results diff --git a/src/apps/invitations/domain.py b/src/apps/invitations/domain.py index bcbc51e8297..7a24b1fe007 100644 --- a/src/apps/invitations/domain.py +++ b/src/apps/invitations/domain.py @@ -187,6 +187,7 @@ class InvitationDetail(InvitationDetailBase): meta: dict nickname: str | None + secret_user_id: str | None class InvitationDetailRespondent(InvitationDetailBase): @@ -271,6 +272,7 @@ class InvitationResponse(PublicModel): created_at: datetime meta: dict nickname: str | None + secret_user_id: str | None class _InvitationResponse(PublicModel): From 615164f02dd13c74457ba1e44499b4790f492e54 Mon Sep 17 00:00:00 2001 From: ivan koryshkin Date: Tue, 6 Feb 2024 18:38:09 +0400 Subject: [PATCH 2/2] M2-4632: Change query style --- src/apps/invitations/crud.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/apps/invitations/crud.py b/src/apps/invitations/crud.py index cf09e5a79ad..dcb9cc86ab8 100644 --- a/src/apps/invitations/crud.py +++ b/src/apps/invitations/crud.py @@ -95,7 +95,7 @@ async def get_pending_by_invitor_id( AppletSchema, AppletSchema.id == InvitationSchema.applet_id ) - query = query.join( + query = query.outerjoin( SubjectSchema, and_( InvitationSchema.meta.has_key('subject_id'), @@ -104,7 +104,6 @@ async def get_pending_by_invitor_id( UUID(as_uuid=True) ) ), - isouter=True ) query = query.where(