# 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