29 lines
987 B
Python
29 lines
987 B
Python
from sqlalchemy.future import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from . import models
|
|
|
|
async def get_or_create_user(db: AsyncSession, telegram_id: str):
|
|
result = await db.execute(select(models.User).where(models.User.telegram_id == telegram_id))
|
|
user = result.scalar_one_or_none()
|
|
if not user:
|
|
user = models.User(telegram_id=telegram_id)
|
|
db.add(user)
|
|
await db.commit()
|
|
await db.refresh(user)
|
|
return user
|
|
|
|
async def add_message(db: AsyncSession, user, role, content):
|
|
msg = models.Message(user_id=user.id, role=role, content=content)
|
|
db.add(msg)
|
|
await db.commit()
|
|
await db.refresh(msg)
|
|
return msg
|
|
|
|
async def get_conversation(db: AsyncSession, user, limit=10):
|
|
result = await db.execute(
|
|
select(models.Message)
|
|
.where(models.Message.user_id == user.id)
|
|
.order_by(models.Message.timestamp.desc())
|
|
.limit(limit)
|
|
)
|
|
return list(reversed(result.scalars().all())) |