111 lines
2.4 KiB
Python
111 lines
2.4 KiB
Python
"""
|
|
FastAPI routes for the application.
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from pydantic import BaseModel
|
|
from typing import List, Dict, Any, Optional
|
|
|
|
from app.services.chatbot_service import chatbot_service
|
|
|
|
router = APIRouter()
|
|
|
|
class MessageRequest(BaseModel):
|
|
"""Request model for sending a message."""
|
|
message: str
|
|
user_id: str = "default_user"
|
|
|
|
class MessageResponse(BaseModel):
|
|
"""Response model for a message."""
|
|
content: str
|
|
is_user: bool
|
|
timestamp: str
|
|
|
|
class ChatResponse(BaseModel):
|
|
"""Response model for a chat."""
|
|
chat_id: int
|
|
messages: List[MessageResponse]
|
|
|
|
@router.get("/health")
|
|
async def health_check():
|
|
"""
|
|
Health check endpoint.
|
|
|
|
Returns:
|
|
JSON response with health status.
|
|
"""
|
|
return {"status": "healthy"}
|
|
|
|
@router.post("/chat", response_model=ChatResponse)
|
|
async def create_chat(user_id: str = "default_user"):
|
|
"""
|
|
Create a new chat.
|
|
|
|
Args:
|
|
user_id: ID of the user creating the chat.
|
|
|
|
Returns:
|
|
Created chat.
|
|
"""
|
|
chat_id = chatbot_service.create_chat(user_id)
|
|
|
|
return {
|
|
"chat_id": chat_id,
|
|
"messages": []
|
|
}
|
|
|
|
@router.post("/chat/{chat_id}/message", response_model=MessageResponse)
|
|
async def send_message(chat_id: int, request: MessageRequest):
|
|
"""
|
|
Send a message to the chatbot.
|
|
|
|
Args:
|
|
chat_id: ID of the chat.
|
|
request: Message request.
|
|
|
|
Returns:
|
|
Bot response.
|
|
"""
|
|
try:
|
|
response = chatbot_service.get_response(chat_id, request.message)
|
|
|
|
# Get the last message (bot response)
|
|
messages = chatbot_service.get_chat_messages(chat_id)
|
|
last_message = messages[-1]
|
|
|
|
return last_message
|
|
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=404, detail=str(e))
|
|
|
|
@router.get("/chat/{chat_id}", response_model=ChatResponse)
|
|
async def get_chat(chat_id: int):
|
|
"""
|
|
Get a chat by ID.
|
|
|
|
Args:
|
|
chat_id: ID of the chat.
|
|
|
|
Returns:
|
|
Chat with messages.
|
|
"""
|
|
try:
|
|
messages = chatbot_service.get_chat_messages(chat_id)
|
|
|
|
return {
|
|
"chat_id": chat_id,
|
|
"messages": messages
|
|
}
|
|
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=404, detail=str(e))
|
|
|
|
def init_app(app):
|
|
"""
|
|
Initialize FastAPI application with routes.
|
|
|
|
Args:
|
|
app: FastAPI application instance.
|
|
"""
|
|
app.include_router(router, prefix="/api")
|