feat: /new_creative tg_bot
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import datetime
|
||||
import typing
|
||||
import uuid
|
||||
|
||||
from sqlalchemy import delete, select
|
||||
@@ -441,3 +442,31 @@ class Postgres(DatabaseBase):
|
||||
|
||||
result = await self.session.execute(q)
|
||||
return list(result.scalars().all())
|
||||
|
||||
async def get_telegram_state(self, telegram_id: int) -> domain.TelegramState | None:
|
||||
q = select(domain.TelegramState).where(domain.TelegramState.telegram_id == telegram_id)
|
||||
result = await self.session.execute(q)
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
async def set_telegram_state(
|
||||
self, telegram_id: int, state: domain.TelegramStateEnum, context: dict[str, typing.Any]
|
||||
) -> domain.TelegramState:
|
||||
existing = await self.get_telegram_state(telegram_id)
|
||||
|
||||
if existing:
|
||||
existing.state = state
|
||||
existing.context = context
|
||||
existing.updated_at = datetime.datetime.now(datetime.UTC)
|
||||
await self.session.flush()
|
||||
await self.session.refresh(existing)
|
||||
return existing
|
||||
|
||||
new_state = domain.TelegramState(telegram_id=telegram_id, state=state, context=context)
|
||||
self.session.add(new_state)
|
||||
await self.session.flush()
|
||||
await self.session.refresh(new_state)
|
||||
return new_state
|
||||
|
||||
async def clear_telegram_state(self, telegram_id: int) -> None:
|
||||
q = delete(domain.TelegramState).where(domain.TelegramState.telegram_id == telegram_id)
|
||||
await self.session.execute(q)
|
||||
|
||||
Reference in New Issue
Block a user