Files
postbot/app/services/channels.py

94 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Сервис для работы с каналами."""
from typing import List, Optional
from sqlalchemy import select
from app.models.channel import Channel, BotChannel
from app.models.bot import Bot
from app.db.session import async_session_maker
class ChannelService:
"""Сервис для работы с каналами."""
@staticmethod
async def get_user_channels(user_id: int) -> List[Channel]:
"""Получает список каналов пользователя."""
async with async_session_maker() as session:
stmt = select(Channel).where(Channel.owner_id == user_id)
result = await session.execute(stmt)
return list(result.scalars().all())
@staticmethod
async def get_channel(channel_id: int) -> Optional[Channel]:
"""Получает канал по ID."""
async with async_session_maker() as session:
stmt = select(Channel).where(Channel.id == channel_id)
result = await session.execute(stmt)
return result.scalars().first()
@staticmethod
async def get_bot_channels(bot_id: int) -> List[Channel]:
"""Получает список каналов бота."""
async with async_session_maker() as session:
stmt = select(Channel).where(Channel.bot_id == bot_id)
result = await session.execute(stmt)
return list(result.scalars().all())
@staticmethod
async def add_channel(
owner_id: int,
bot_id: int,
chat_id: int,
title: Optional[str] = None,
username: Optional[str] = None
) -> Channel:
"""Добавляет новый канал."""
async with async_session_maker() as session:
channel = Channel(
owner_id=owner_id,
bot_id=bot_id,
chat_id=chat_id,
title=title,
username=username
)
session.add(channel)
await session.commit()
await session.refresh(channel)
return channel
@staticmethod
async def update_channel(
channel_id: int,
title: Optional[str] = None,
username: Optional[str] = None
) -> bool:
"""Обновляет данные канала."""
async with async_session_maker() as session:
stmt = select(Channel).where(Channel.id == channel_id)
result = await session.execute(stmt)
channel = result.scalars().first()
if not channel:
return False
if title is not None:
channel.title = title
if username is not None:
channel.username = username
await session.commit()
return True
@staticmethod
async def delete_channel(channel_id: int) -> bool:
"""Удаляет канал."""
async with async_session_maker() as session:
stmt = select(Channel).where(Channel.id == channel_id)
result = await session.execute(stmt)
channel = result.scalars().first()
if not channel:
return False
await session.delete(channel)
await session.commit()
return True