Spaces:
Sleeping
Sleeping
| import os | |
| import json | |
| import uuid | |
| from typing import List, Dict, Any, Optional | |
| from datetime import datetime | |
| DATA_DIR = os.path.join(os.getcwd(), "data") | |
| JOBS_PATH = os.path.join(DATA_DIR, "jobs.json") | |
| CVS_PATH = os.path.join(DATA_DIR, "cvs.json") | |
| def _ensure_data_dir(): | |
| os.makedirs(DATA_DIR, exist_ok=True) | |
| def _read_json(path: str) -> Any: | |
| _ensure_data_dir() | |
| if not os.path.exists(path): | |
| # inicializa vazios | |
| return [] if path.endswith(".json") else None | |
| with open(path, "r", encoding="utf-8") as f: | |
| try: | |
| return json.load(f) | |
| except Exception: | |
| return [] | |
| def _write_json(path: str, data: Any): | |
| _ensure_data_dir() | |
| with open(path, "w", encoding="utf-8") as f: | |
| json.dump(data, f, indent=2, ensure_ascii=False) | |
| # ---------------- Jobs ---------------- | |
| def list_jobs() -> List[Dict[str, Any]]: | |
| data = _read_json(JOBS_PATH) | |
| if isinstance(data, dict): | |
| data = [data] | |
| return data or [] | |
| def create_job(title: str, description: str, details: str, requirements: Optional[list]=None) -> Dict[str, Any]: | |
| jobs = list_jobs() | |
| job_id = str(uuid.uuid4()) | |
| rec = { | |
| "id": job_id, | |
| "title": title, | |
| "description": description, | |
| "details": details, | |
| "requirements": requirements or [], | |
| "created_at": datetime.utcnow().isoformat() | |
| } | |
| jobs.append(rec) | |
| _write_json(JOBS_PATH, jobs) | |
| return rec | |
| def get_job(job_id: str) -> Optional[Dict[str, Any]]: | |
| for j in list_jobs(): | |
| if j.get("id") == job_id: | |
| return j | |
| return None | |
| # ---------------- CVs ---------------- | |
| def list_cvs() -> List[Dict[str, Any]]: | |
| data = _read_json(CVS_PATH) | |
| if isinstance(data, dict): | |
| data = [data] | |
| return data or [] | |
| def save_cv_result(result: Dict[str, Any], job: Optional[Dict[str, Any]]=None) -> Dict[str, Any]: | |
| cvs = list_cvs() | |
| rec_id = str(uuid.uuid4()) | |
| rec = { | |
| "id": rec_id, | |
| "name": result.get("name") or "", | |
| "area": result.get("area") or "", | |
| "summary": result.get("summary") or "", | |
| "skills": result.get("skills") or [], | |
| "education": result.get("education") or "", | |
| "interview_questions": result.get("interview_questions") or [], | |
| "strengths": result.get("strengths") or [], | |
| "areas_for_development": result.get("areas_for_development") or [], | |
| "important_considerations": result.get("important_considerations") or [], | |
| "final_recommendations": result.get("final_recommendations") or "", | |
| "score": result.get("score") or 0.0, | |
| "created_at": datetime.utcnow().isoformat(), | |
| "job_id": job.get("id") if job else None, | |
| "job_title": job.get("title") if job else None | |
| } | |
| cvs.append(rec) | |
| _write_json(CVS_PATH, cvs) | |
| return rec | |
| def get_cv(cv_id: str) -> Optional[Dict[str, Any]]: | |
| for c in list_cvs(): | |
| if c.get("id") == cv_id: | |
| return c | |
| return None | |