Skip to content

Commit

Permalink
Merge branch 'develop' into fix/update-submodule
Browse files Browse the repository at this point in the history
  • Loading branch information
NiKuma0 authored Feb 13, 2024
2 parents 6a94fa7 + d5a6dda commit a134bda
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 8 deletions.
30 changes: 29 additions & 1 deletion src/bot/handlers/registration.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dependency_injector.wiring import Provide, inject
from telegram import Update
from telegram.constants import ParseMode
from telegram.ext import Application, CallbackQueryHandler, CommandHandler, ContextTypes
from telegram.ext import Application, CallbackQueryHandler, ChatMemberHandler, CommandHandler, ContextTypes

from src.bot.constants import callback_data, commands
from src.bot.keyboards import feedback_buttons, get_confirm_keyboard, get_start_keyboard
Expand Down Expand Up @@ -82,6 +82,34 @@ async def confirm_chosen_categories(
)


@logger_decor
@inject
async def on_chat_member_update(
update: Update,
context: ContextTypes.DEFAULT_TYPE,
ext_user_service: ExternalSiteUserService = Provide[Container.bot_services_container.bot_site_user_service],
user_service: UserService = Provide[Container.bot_services_container.bot_user_service],
):
user = await user_service.get_by_telegram_id(update.effective_user.id)

if user is None:
return None

if (
update.my_chat_member.new_chat_member.status == update.my_chat_member.new_chat_member.BANNED
and update.my_chat_member.old_chat_member.status == update.my_chat_member.old_chat_member.MEMBER
):
return await user_service.bot_banned(user)
if (
update.my_chat_member.new_chat_member.status == update.my_chat_member.new_chat_member.MEMBER
and update.my_chat_member.old_chat_member.status == update.my_chat_member.old_chat_member.BANNED
):
return await user_service.bot_unbanned(user)

return None


def registration_handlers(app: Application):
app.add_handler(CommandHandler(commands.START, start_command))
app.add_handler(CallbackQueryHandler(confirm_chosen_categories, pattern=commands.GREETING_REGISTERED_USER))
app.add_handler(ChatMemberHandler(on_chat_member_update, chat_member_types=ChatMemberHandler.MY_CHAT_MEMBER))
8 changes: 8 additions & 0 deletions src/bot/services/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@ async def register_user(
)
)

async def bot_banned(self, user: User) -> None:
"""Обновляет статус User.banned на соответствующий."""
await self._user_repository.update_bot_banned_status(user, banned=True)

async def bot_unbanned(self, user: User) -> None:
"""Обновляет статус User.unbanned на соответствующий."""
await self._user_repository.update_bot_banned_status(user, banned=False)

async def set_categories_to_user(self, telegram_id: int, categories_ids: list[int]) -> None:
"""Присваивает пользователю список категорий."""
await self._user_repository.set_categories_to_user(telegram_id, categories_ids)
Expand Down
30 changes: 23 additions & 7 deletions src/core/db/migrations/versions/2024-01-11_16.14.36_stub.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ def upgrade() -> None:

# User

op.add_column(
"users", sa.Column("id", sa.Integer(), autoincrement=True, nullable=False, primary_key=True, unique=True)
)
op.add_column(
"users", sa.Column("updated_at", sa.Date(), server_default=sa.text("CURRENT_TIMESTAMP"), nullable=False)
)
Expand All @@ -39,7 +36,18 @@ def upgrade() -> None:
op.alter_column(
"users", "external_signup_date", existing_type=postgresql.TIMESTAMP(), type_=sa.Date(), existing_nullable=True
)
op.create_unique_constraint("users_telegram_id_unique", "users", ["telegram_id"])
op.add_column(table_name="users", column=sa.Column("id", sa.Integer()))
op.create_unique_constraint(constraint_name="users_telegram_id_key", table_name="users", columns=["telegram_id"])
op.drop_constraint(constraint_name="users_categories_telegram_id_fkey", table_name="users_categories")
op.drop_constraint(constraint_name="users_pkey", table_name="users")
op.create_primary_key(constraint_name="users_pkey", table_name="users", columns=["id"])
op.create_foreign_key(
constraint_name="users_categories_telegram_id_fkey",
source_table="users_categories",
referent_table="users",
local_cols=["telegram_id"],
remote_cols=["telegram_id"],
)

# Admin User

Expand Down Expand Up @@ -73,9 +81,19 @@ def downgrade() -> None:

# User

op.drop_constraint(constraint_name="users_categories_telegram_id_fkey", table_name="users_categories")
op.drop_constraint(constraint_name="users_pkey", table_name="users")
op.create_primary_key(constraint_name="users_pkey", table_name="users", columns=["telegram_id"])
op.drop_constraint(constraint_name="users_telegram_id_key", table_name="users")
op.create_foreign_key(
constraint_name="users_categories_telegram_id_fkey",
source_table="users_categories",
referent_table="users",
local_cols=["telegram_id"],
remote_cols=["telegram_id"],
)
op.drop_column("users", "id")
op.drop_column("users", "updated_at")

op.alter_column("users", "has_mailing", existing_type=sa.Boolean(), nullable=False)
op.alter_column(
"users",
Expand All @@ -85,11 +103,9 @@ def downgrade() -> None:
autoincrement=False,
nullable=False,
)

op.alter_column(
"users", "external_signup_date", existing_type=sa.Date(), type_=postgresql.TIMESTAMP(), existing_nullable=True
)
op.drop_constraint("users_telegram_id_unique", "users", type_="unique")

# Admin User

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"""other_migrations
Revision ID: d4e4699c3473
Revises: 40dc5f0d5736
Create Date: 2024-02-04 19:27:24.317345
"""
import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = "d4e4699c3473"
down_revision = "40dc5f0d5736"
branch_labels = None
depends_on = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_unique_constraint(None, "external_site_users", ["email"])
op.alter_column("unsubscribe_reason", "user_id", existing_type=sa.INTEGER(), nullable=False)
op.alter_column("users_categories", "user_id", existing_type=sa.INTEGER(), nullable=False)
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column("users_categories", "user_id", existing_type=sa.INTEGER(), nullable=True)
op.alter_column("unsubscribe_reason", "user_id", existing_type=sa.INTEGER(), nullable=True)
op.drop_constraint(None, "external_site_users", type_="unique")
# ### end Alembic commands ###
5 changes: 5 additions & 0 deletions src/core/db/repository/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ async def restore_existing_user(self, user: User, username: str, first_name: str
await self.update(user.id, user)
return user

async def update_bot_banned_status(self, user: User, banned: bool) -> None:
"""Обновляем статус User.banned на соответствующий."""
user.banned = banned
await self.update(user.id, user)

async def set_categories_to_user(self, telegram_id: int, categories_ids: list[int]) -> None:
"""Присваивает пользователю список категорий."""
user = await self._session.scalar(
Expand Down

0 comments on commit a134bda

Please sign in to comment.