Files
malenia/repositories/users.py
hexdev 606aa4b89f feat: add admin promotion broadcast system and psql health check
- Add `/push` command for admins to broadcast messages to all users
  with approve/decline confirmation flow (handlers/ads.py)
- Add common handler for undefined commands and delete callback
- Add `UserRepository.get_users()` to fetch all users
- Add `UserService.send_promotion_to_users()` with error logging
- Add promotion confirmation keyboard and FSM state
- Add PostgreSQL availability check in startup.sh before migrations
- Add new text constants for promotion flow
2026-04-15 20:19:07 +07:00

73 lines
2.1 KiB
Python

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from db.models import User
from schemas.users import NewUserDTO
class UserRepository:
async def get_users(self, session: AsyncSession) -> list[User]:
stmt = select(User)
res = await session.execute(stmt)
return list(res.scalars().all())
async def get_user_by_id(self, session: AsyncSession, user_id: int) -> User | None:
stmt = select(User).where(User.id == user_id)
result = await session.execute(stmt)
return result.scalar_one_or_none()
async def create_user(self, session: AsyncSession, user_data: NewUserDTO) -> User:
user = User(
id=user_data.id,
referal_id=user_data.referal,
subscription_link=user_data.link,
)
session.add(user)
await session.commit()
return user
async def update_user_topic(
self, session: AsyncSession, user_id: int, thread_id: int
) -> User | None:
user = await self.get_user_by_id(session, user_id=user_id)
if not user:
return None
user.support_thread_id = thread_id
await session.commit()
return user
async def update_user_link(self, session: AsyncSession, user_id: int, link: str) -> User | None:
user = await self.get_user_by_id(session, user_id=user_id)
if not user:
return None
user.subscription_link = link
await session.commit()
return user
async def update_user_balance(
self, session: AsyncSession, user_id: int, balance: int
) -> User | None:
user = await self.get_user_by_id(session, user_id=user_id)
if not user:
return None
user.balance = balance
await session.commit()
return user
async def increase_user_balance(
self, session: AsyncSession, user_id: int, amount: int
) -> User | None:
user = await self.get_user_by_id(session, user_id=user_id)
if not user:
return None
user.balance += amount
await session.commit()
return user