m-ahmad-official's picture
update
cc5866e
from dotenv import load_dotenv
load_dotenv() # Load environment variables from .env file
from fastapi import FastAPI
from src.api.v1 import tasks, chat
from src.api.v1.auth import router as auth_router
# from src.auth.middleware import JWTMiddleware # Temporarily disabled
from fastapi.middleware.cors import CORSMiddleware
from src.core.database import create_db_and_tables
from typing import Dict, List, Optional
from datetime import datetime
from sqlmodel import Field, SQLModel, Relationship
from pydantic import BaseModel, Field as PydanticField
from contextlib import asynccontextmanager
class MessageResponse(BaseModel):
"""Pydantic model for message responses."""
id: int
conversation_id: int
content: str
sender: str
created_at: datetime
metadata: Optional[Dict] = None
class ConversationResponse(BaseModel):
"""Pydantic model for conversation responses."""
id: int
user_id: str
created_at: datetime
updated_at: datetime
title: Optional[str] = None
message_count: Optional[int] = None
last_message: Optional[str] = None
class ConversationCreate(BaseModel):
"""Pydantic model for creating conversations."""
title: Optional[str] = None
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup: Create database tables
create_db_and_tables()
yield
# Shutdown: Add cleanup logic here if needed
app = FastAPI(
title="AI Chat Backend API",
version="1.0.0",
description="A RESTful API for AI-powered chat conversations with user authentication and conversation management.",
openapi_url="/openapi.json",
docs_url="/docs",
redoc_url="/redoc",
lifespan=lifespan,
)
# Add CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=[
"http://localhost:3000",
"https://ahmed-hackathon-ii-phase-iii.vercel.app",
], # frontend
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include API routes
app.include_router(tasks.router, prefix="/api/v1/tasks", tags=["tasks"])
app.include_router(auth_router, prefix="/api/v1", tags=["auth"])
app.include_router(chat.router, prefix="/api/v1/chat", tags=["chat"])
# Add routes at root level for backward compatibility
app.include_router(auth_router, tags=["auth-root"])
app.include_router(tasks.router, prefix="/tasks", tags=["tasks-root"])
app.include_router(chat.router, prefix="/chat", tags=["chat-root"])
@app.get("/")
def read_root():
return {"Hello": "World", "status": "running"}
@app.get("/health")
def health_check():
return {"status": "healthy", "service": "AI Chat Backend API"}
if __name__ == "__main__":
import uvicorn
import os
port = int(os.getenv("PORT", 8000))
uvicorn.run(app, host="0.0.0.0", port=port)