from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from typing import List from database import get_db import models, validation router = APIRouter(prefix="/api/home", tags=["Home Page"]) @router.get("/dashboard", response_model=validation.DashboardResponse) def get_dashboard_data(db: Session = Depends(get_db)): root_folders = db.query(models.Folder).filter(models.Folder.parent_id == None).all() recent_docs = ( db.query(models.Document) .order_by(models.Document.updated_at.desc()) .limit(5) .all() ) return {"folders": root_folders, "recent_documents": recent_docs} @router.post("/folders", response_model=validation.FolderResponse) def create_folder(folder: validation.FolderCreate, db: Session = Depends(get_db)): new_folder = models.Folder(name=folder.name, parent_id=folder.parent_id) db.add(new_folder) db.commit() db.refresh(new_folder) return new_folder @router.get("/search", response_model=List[validation.DocumentResponse]) def search_documents( q: str = Query(..., min_length=1, description="Fraza wyszukiwania"), db: Session = Depends(get_db), ): # Wyszukiwanie po tytule pliku by_title = ( db.query(models.Document).filter(models.Document.title.ilike(f"%{q}%")).all() ) # Wyszukiwanie po tagach by_tag = ( db.query(models.Document) .join(models.Document.tags) .filter(models.Tag.name.ilike(f"%{q}%")) .all() ) # Połączenie wyników i usunięcie duplikatów results = list({doc.id: doc for doc in (by_title + by_tag)}.values()) return results @router.get("/folders/{folder_id}", response_model=validation.FolderContentResponse) def get_folder_content(folder_id: int, db: Session = Depends(get_db)): folder = db.query(models.Folder).filter(models.Folder.id == folder_id).first() if not folder: raise HTTPException(status_code=404, detail="Folder nie istnieje") subfolders = ( db.query(models.Folder).filter(models.Folder.parent_id == folder_id).all() ) documents = ( db.query(models.Document).filter(models.Document.folder_id == folder_id).all() ) return { "id": folder.id, "name": folder.name, "subfolders": subfolders, "documents": documents, }