Отедельные таблицы User и TelegramUser
This commit is contained in:
@@ -23,6 +23,24 @@ class Postgres(DatabaseBase, Database):
|
||||
async def update_user(self, user: domain.User) -> None:
|
||||
await user.save()
|
||||
|
||||
async def get_telegram_user(
|
||||
self,
|
||||
telegram_user_id: uuid.UUID | None = None,
|
||||
telegram_id: int | None = None,
|
||||
) -> domain.TelegramUser | None:
|
||||
if telegram_user_id:
|
||||
return await domain.TelegramUser.get_or_none(id=telegram_user_id)
|
||||
if telegram_id:
|
||||
return await domain.TelegramUser.get_or_none(telegram_id=telegram_id)
|
||||
|
||||
raise ValueError('Either telegram_user_id or telegram_id must be provided')
|
||||
|
||||
async def create_telegram_user(self, telegram_user: domain.TelegramUser) -> None:
|
||||
await telegram_user.save()
|
||||
|
||||
async def update_telegram_user(self, telegram_user: domain.TelegramUser) -> None:
|
||||
await telegram_user.save()
|
||||
|
||||
async def create_workspace(self, workspace: domain.Workspace) -> None:
|
||||
await workspace.save()
|
||||
|
||||
@@ -75,14 +93,14 @@ class Postgres(DatabaseBase, Database):
|
||||
) -> domain.WorkspaceUser | None:
|
||||
return (
|
||||
await domain.WorkspaceUser.filter(workspace_id=workspace_id, user_id=user_id)
|
||||
.prefetch_related('workspace', 'user', 'permissions', 'permission_scopes')
|
||||
.prefetch_related('workspace', 'user', 'user__telegram_user', 'permissions', 'permission_scopes')
|
||||
.first()
|
||||
)
|
||||
|
||||
async def get_workspace_members(self, workspace_id: uuid.UUID) -> list[domain.WorkspaceUser]:
|
||||
return (
|
||||
await domain.WorkspaceUser.filter(workspace_id=workspace_id)
|
||||
.prefetch_related('workspace', 'user', 'permissions', 'permission_scopes')
|
||||
.prefetch_related('workspace', 'user__telegram_user', 'permissions', 'permission_scopes')
|
||||
.order_by('created_at')
|
||||
.all()
|
||||
)
|
||||
@@ -90,7 +108,7 @@ class Postgres(DatabaseBase, Database):
|
||||
async def get_workspace_member(self, workspace_user_id: uuid.UUID) -> domain.WorkspaceUser | None:
|
||||
return (
|
||||
await domain.WorkspaceUser.filter(id=workspace_user_id)
|
||||
.prefetch_related('workspace', 'user', 'permissions', 'permission_scopes')
|
||||
.prefetch_related('workspace', 'user__telegram_user', 'permissions', 'permission_scopes')
|
||||
.first()
|
||||
)
|
||||
|
||||
@@ -103,7 +121,7 @@ class Postgres(DatabaseBase, Database):
|
||||
async def get_workspace_invite(self, invite_id: uuid.UUID) -> domain.WorkspaceInvite | None:
|
||||
return (
|
||||
await domain.WorkspaceInvite.filter(id=invite_id)
|
||||
.prefetch_related('workspace', 'user', 'invited_by')
|
||||
.prefetch_related('workspace', 'user__telegram_user', 'invited_by__telegram_user')
|
||||
.first()
|
||||
)
|
||||
|
||||
@@ -115,7 +133,7 @@ class Postgres(DatabaseBase, Database):
|
||||
async def get_workspace_invites(self, workspace_id: uuid.UUID) -> list[domain.WorkspaceInvite]:
|
||||
return (
|
||||
await domain.WorkspaceInvite.filter(workspace_id=workspace_id)
|
||||
.prefetch_related('user', 'invited_by')
|
||||
.prefetch_related('user__telegram_user', 'invited_by__telegram_user')
|
||||
.order_by('created_at')
|
||||
.all()
|
||||
)
|
||||
@@ -165,14 +183,24 @@ class Postgres(DatabaseBase, Database):
|
||||
|
||||
async def get_user(self, user_id: uuid.UUID | None = None, telegram_id: int | None = None) -> domain.User | None:
|
||||
if user_id:
|
||||
return await domain.User.get_or_none(id=user_id)
|
||||
return (
|
||||
await domain.User.filter(id=user_id).prefetch_related('telegram_user').first()
|
||||
)
|
||||
elif telegram_id:
|
||||
return await domain.User.get_or_none(telegram_id=telegram_id)
|
||||
return (
|
||||
await domain.User.filter(telegram_user__telegram_id=telegram_id)
|
||||
.prefetch_related('telegram_user')
|
||||
.first()
|
||||
)
|
||||
|
||||
raise ValueError('Either user_id or telegram_id must be provided')
|
||||
|
||||
async def get_user_by_username(self, username: str) -> domain.User | None:
|
||||
return await domain.User.get_or_none(username__iexact=username)
|
||||
return (
|
||||
await domain.User.filter(telegram_user__username__iexact=username)
|
||||
.prefetch_related('telegram_user')
|
||||
.first()
|
||||
)
|
||||
|
||||
async def get_login_token(self, token: str) -> domain.LoginToken | None:
|
||||
return await domain.LoginToken.get_or_none(token=token)
|
||||
@@ -444,9 +472,11 @@ class Postgres(DatabaseBase, Database):
|
||||
await subscription.save()
|
||||
|
||||
async def get_subscription_by_subscriber_and_placement(
|
||||
self, subscriber_id: uuid.UUID, placement_id: uuid.UUID
|
||||
self, telegram_user_id: uuid.UUID, placement_id: uuid.UUID
|
||||
) -> domain.Subscription | None:
|
||||
return await domain.Subscription.get_or_none(subscriber_id=subscriber_id, placement_id=placement_id)
|
||||
return await domain.Subscription.get_or_none(
|
||||
telegram_user_id=telegram_user_id, placement_id=placement_id
|
||||
)
|
||||
|
||||
async def update_subscription(self, subscription: domain.Subscription) -> None:
|
||||
await subscription.save()
|
||||
@@ -471,28 +501,28 @@ class Postgres(DatabaseBase, Database):
|
||||
return await query.all()
|
||||
|
||||
async def get_active_subscriptions_by_subscriber_and_project(
|
||||
self, subscriber_id: uuid.UUID, project_id: uuid.UUID
|
||||
self, telegram_user_id: uuid.UUID, project_id: uuid.UUID
|
||||
) -> list[domain.Subscription]:
|
||||
return (
|
||||
await domain.Subscription.filter(
|
||||
subscriber_id=subscriber_id,
|
||||
telegram_user_id=telegram_user_id,
|
||||
placement__project_id=project_id,
|
||||
status=domain.SubscriptionStatus.ACTIVE,
|
||||
)
|
||||
.prefetch_related('placement', 'subscriber')
|
||||
.prefetch_related('placement', 'telegram_user')
|
||||
.all()
|
||||
)
|
||||
|
||||
async def get_active_subscription_by_subscriber_and_project(
|
||||
self, subscriber_id: uuid.UUID, project_id: uuid.UUID
|
||||
self, telegram_user_id: uuid.UUID, project_id: uuid.UUID
|
||||
) -> domain.Subscription | None:
|
||||
return (
|
||||
await domain.Subscription.filter(
|
||||
subscriber_id=subscriber_id,
|
||||
telegram_user_id=telegram_user_id,
|
||||
placement__project_id=project_id,
|
||||
status=domain.SubscriptionStatus.ACTIVE,
|
||||
)
|
||||
.prefetch_related('placement', 'subscriber')
|
||||
.prefetch_related('placement', 'telegram_user')
|
||||
.first()
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user