ban.py 883 B

1234567891011121314151617181920212223
  1. from sqlalchemy import func, select, update
  2. from sqlalchemy.ext.asyncio import AsyncSession
  3. from anonflow.database.orm import Ban
  4. class BanRepository:
  5. async def ban(self, session: AsyncSession, actor_user_id: int, user_id: int):
  6. ban = Ban(user_id=user_id, banned_by=actor_user_id)
  7. session.add(ban)
  8. async def is_banned(self, session: AsyncSession, user_id: int):
  9. result = await session.execute(
  10. select(Ban).where(Ban.user_id == user_id, Ban.is_active.is_(True)).limit(1)
  11. )
  12. return bool(result.scalar_one_or_none())
  13. async def unban(self, session: AsyncSession, actor_user_id: int, user_id: int):
  14. await session.execute(
  15. update(Ban)
  16. .where(Ban.user_id == user_id, Ban.is_active.is_(True))
  17. .values(is_active=False, unbanned_at=func.now(), unbanned_by=actor_user_id)
  18. )