Spaces:
Configuration error
Configuration error
File size: 3,496 Bytes
d6d292e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | from fastapi import FastAPI, Request
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse, RedirectResponse
import os
from config import settings
from database import init_db, SessionLocal, User
app = FastAPI(title=settings.APP_NAME, description=settings.APP_DESCRIPTION)
app.mount("/static", StaticFiles(directory="static"), name="static")
app.mount("/uploads", StaticFiles(directory=settings.UPLOAD_DIR), name="uploads")
templates = Jinja2Templates(directory="templates")
from routes_auth import router as auth_router
from routes_profiles import router as profiles_router
from routes_chat import router as chat_router
from routes_search import router as search_router
from routes_admin import router as admin_router
from routes_voice import router as voice_router
app.include_router(auth_router)
app.include_router(profiles_router)
app.include_router(chat_router)
app.include_router(search_router)
app.include_router(admin_router)
app.include_router(voice_router)
@app.on_event("startup")
async def startup():
init_db()
os.makedirs(settings.UPLOAD_DIR, exist_ok=True)
os.makedirs("static", exist_ok=True)
os.makedirs("static/js", exist_ok=True)
os.makedirs("static/css", exist_ok=True)
os.makedirs("templates", exist_ok=True)
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
from auth import get_user_from_request
db = SessionLocal()
try:
user = get_user_from_request(request, db)
if user:
return RedirectResponse(url="/dashboard", status_code=302)
return RedirectResponse(url="/auth/login", status_code=302)
finally:
db.close()
@app.get("/dashboard", response_class=HTMLResponse)
async def dashboard(request: Request):
from auth import get_user_from_request
db = SessionLocal()
try:
user = get_user_from_request(request, db)
if not user:
return RedirectResponse(url="/auth/login", status_code=302)
from database import MemoryProfile, Conversation, MemoryFile
profiles = db.query(MemoryProfile).filter(MemoryProfile.user_id == user.id).all()
total_conversations = db.query(Conversation).filter(Conversation.user_id == user.id).count()
total_files = db.query(MemoryFile).join(MemoryProfile).filter(MemoryProfile.user_id == user.id).count()
recent_conversations = db.query(Conversation).filter(
Conversation.user_id == user.id
).order_by(Conversation.updated_at.desc()).limit(5).all()
recent_conv_profiles = {}
for rc in recent_conversations:
p = db.query(MemoryProfile).filter(MemoryProfile.id == rc.profile_id).first()
if p:
recent_conv_profiles[rc.id] = p.name
return templates.TemplateResponse("dashboard.html", {
"request": request, "user": user, "profiles": profiles,
"total_conversations": total_conversations,
"total_files": total_files,
"recent_conversations": recent_conversations,
"recent_conv_profiles": recent_conv_profiles,
})
finally:
db.close()
@app.exception_handler(302)
async def redirect_handler(request: Request, exc):
return RedirectResponse(url=exc.headers.get("Location", "/"), status_code=302)
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
|