from fastapi import APIRouter, HTTPException from app.models.schema import GenerateRequest, GenerateResponse from app.services.generator import coverLetterGenerativeAIBot from app.services.resume_parser import extract_resume_text from app.utils.file_utils import generate_unique_filename from fastapi import UploadFile, File,Depends from app.services.hf_storage_service import HuggingFaceStorageService from app.auth.auth import verify_token storage_service = HuggingFaceStorageService() router = APIRouter() @router.post("/generate", response_model=GenerateResponse,) async def generate_cover_letter_api(data: GenerateRequest,user=Depends(verify_token)): try: if len(data.job_details) > 8192: raise HTTPException(status_code=400, detail="Job detail is too long") resume_text = extract_resume_text(data.resume_path) letter_text = await coverLetterGenerativeAIBot(data, resume_text) # md_cover_letter = build_cover_letter_md( # your_name=data.full_name, # postal_code=data.postal_code, # city=data.city, # email=data.email, # phone=data.phone_number, # job_title=data.job_title, # company_name=data.company_name, # generated_paragraphs=letter_text # ) # text_cover_letter = convert_md_to_text(md_cover_letter) filename = generate_unique_filename() # pdf_path = save_pdf(text_cover_letter, filename) return GenerateResponse( letter=letter_text, pdf_url="" ) except HTTPException as http_exc: raise http_exc except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/upload-resume") async def upload_resume(resume: UploadFile = File(...),user=Depends(verify_token)): try: resume_content = await resume.read() resume_url = storage_service.upload_file_to_hf( file_content=resume_content, folder="resumes", filename=resume.filename ) return { "success": True, "url": resume_url } except Exception as e: return { "success": False, "error": str(e) } @router.post("/upload-file") async def upload_file(pdf: UploadFile = File(...),user=Depends(verify_token)): try: # Read resume content pdf_content = await pdf.read() # Upload to HuggingFace Hub pdf_url = storage_service.upload_file_to_hf( file_content=pdf_content, folder="cover-letters", filename=pdf.filename ) return { "success": True, "url": pdf_url } except Exception as e: return { "success": False, "error": str(e) }