init
This commit is contained in:
101
app/api.py
Normal file
101
app/api.py
Normal file
@@ -0,0 +1,101 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user