import profile from externals.databases.pg_models import CVUser from externals.databases.database import get_db from fastapi import APIRouter, Depends, status, HTTPException from interfaces.api.deps import get_current_user from services.knowledge.knowledge_setup import KnowledgeService from utils.logger import get_logger logger = get_logger("Profile API") router = APIRouter( prefix="/profile", tags=["Profile"], ) @router.post("/extract_profile") async def extract_profile( filename: str, db=Depends(get_db), current_user: CVUser = Depends(get_current_user), ): """ Extract structured profile from CV PDF """ knowledge_service = KnowledgeService( db=db, user=current_user, ) return await knowledge_service.extract.extract(filename) @router.get("/{profile_id}") async def get_profile( profile_id: str, db=Depends(get_db), current_user: CVUser = Depends(get_current_user), ): """ Get extracted profile by ID """ knowledge_service = KnowledgeService(db=db, user=current_user) profile = await knowledge_service.profile.get_profile(profile_id) if not profile: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Profile not found", ) return profile @router.get("/profiles/{criteria_id}") async def get_profiles( criteria_id: str, db=Depends(get_db), current_user: CVUser = Depends(get_current_user), ): """ Get profiles based on criteria id """ knowledge_service = KnowledgeService(db=db, user=current_user) profiles = await knowledge_service.profile.get_profiles_by_criteria(criteria_id=criteria_id) logger.info(f"retrieved profiles: {profiles}") if not profiles: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Profiles not found", ) return profiles