101 lines
3.5 KiB
Python
101 lines
3.5 KiB
Python
# from fastapi import APIRouter, Depends
|
|
# from sqlalchemy.ext.asyncio import AsyncSession
|
|
# from .database import async_session
|
|
# from . import crud, openrouter_client
|
|
|
|
# router = APIRouter()
|
|
|
|
# async def get_db():
|
|
# async with async_session() as db:
|
|
# yield db
|
|
|
|
# @router.get("/history/{telegram_id}")
|
|
# async def get_history(telegram_id: str, db: AsyncSession = Depends(get_db)):
|
|
# user = await crud.get_or_create_user(db, telegram_id)
|
|
# history = await crud.get_conversation(db, user, limit=20)
|
|
# return [{"role": m.role, "content": m.content} for m in history]
|
|
|
|
# @router.post("/chat/{telegram_id}")
|
|
# async def chat(telegram_id: str, payload: dict, db: AsyncSession = Depends(get_db)):
|
|
# user = await crud.get_or_create_user(db, telegram_id)
|
|
# user_msg = payload.get("message", "")
|
|
# if not user_msg:
|
|
# return {"error": "Empty message"}
|
|
|
|
# await crud.add_message(db, user, "user", user_msg)
|
|
|
|
# history = await crud.get_conversation(db, user, limit=10)
|
|
# messages_payload = [{"role": m.role, "content": m.content} for m in history]
|
|
|
|
# response = await openrouter_client.generate_response(messages_payload)
|
|
# await crud.add_message(db, user, "assistant", response)
|
|
|
|
# return {"response": response}
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy.future import select
|
|
from sqlalchemy.orm import selectinload
|
|
from app import models, schemas
|
|
from .database import async_session
|
|
|
|
router = APIRouter()
|
|
|
|
# --- Dependency ---
|
|
async def get_db() -> AsyncSession:
|
|
async with async_session() as db:
|
|
yield db
|
|
|
|
|
|
# 📌 Получить профиль пользователя (берём первого для примера)
|
|
@router.get("/profile", response_model=schemas.UserOut)
|
|
async def get_profile(db: AsyncSession = Depends(get_db)):
|
|
result = await db.execute(
|
|
select(models.User).options(
|
|
selectinload(models.User.chats).selectinload(models.Chat.messages)
|
|
)
|
|
)
|
|
user = result.scalars().first()
|
|
if not user:
|
|
raise HTTPException(status_code=404, detail="User not found")
|
|
return user
|
|
|
|
|
|
# 📌 Получить список чатов
|
|
@router.get("/chats", response_model=list[schemas.ChatOut])
|
|
async def get_chats(db: AsyncSession = Depends(get_db)):
|
|
result = await db.execute(
|
|
select(models.Chat).options(selectinload(models.Chat.messages))
|
|
)
|
|
return result.scalars().all()
|
|
|
|
|
|
# 📌 Сообщения конкретного чата
|
|
@router.get("/chats/{chat_id}/messages", response_model=list[schemas.MessageOut])
|
|
async def get_chat_messages(chat_id: int, db: AsyncSession = Depends(get_db)):
|
|
result = await db.execute(
|
|
select(models.Chat)
|
|
.options(selectinload(models.Chat.messages))
|
|
.filter_by(id=chat_id)
|
|
)
|
|
chat = result.scalars().first()
|
|
if not chat:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
return chat.messages
|
|
|
|
|
|
# 📌 Добавить новое сообщение
|
|
@router.post("/chats/{chat_id}/messages", response_model=schemas.MessageOut)
|
|
async def add_message(chat_id: int, msg: schemas.MessageBase, db: AsyncSession = Depends(get_db)):
|
|
result = await db.execute(
|
|
select(models.Chat).filter_by(id=chat_id)
|
|
)
|
|
chat = result.scalars().first()
|
|
if not chat:
|
|
raise HTTPException(status_code=404, detail="Chat not found")
|
|
|
|
new_msg = models.Message(chat_id=chat_id, role=msg.role, content=msg.content)
|
|
db.add(new_msg)
|
|
await db.commit()
|
|
await db.refresh(new_msg)
|
|
return new_msg |