Files
Airtep/gig-poc/apps/api/app/services/ingest_service.py
2026-03-30 20:49:40 +08:00

53 lines
2.0 KiB
Python

from __future__ import annotations
import json
from sqlalchemy.orm import Session
from app.core.config import get_settings
from app.core.logging import logger
from app.domain.schemas import BootstrapResponse, JobCard, WorkerCard
from app.repositories.job_repository import JobRepository
from app.repositories.worker_repository import WorkerRepository
from app.services.rag.lightrag_adapter import LightRAGAdapter
class IngestService:
def __init__(self, db: Session):
self.db = db
self.settings = get_settings()
self.job_repository = JobRepository(db)
self.worker_repository = WorkerRepository(db)
self.rag = LightRAGAdapter(self.settings)
def ingest_job(self, card: JobCard) -> JobCard:
logger.info("ingest_job job_id=%s", card.job_id)
self.job_repository.upsert(card)
self.rag.upsert_job(card)
return card
def ingest_worker(self, card: WorkerCard) -> WorkerCard:
logger.info("ingest_worker worker_id=%s", card.worker_id)
self.worker_repository.upsert(card)
self.rag.upsert_worker(card)
return card
def bootstrap(self) -> BootstrapResponse:
skills = json.loads((self.settings.sample_data_dir / "skills.json").read_text(encoding="utf-8"))
categories = json.loads((self.settings.sample_data_dir / "categories.json").read_text(encoding="utf-8"))
regions = json.loads((self.settings.sample_data_dir / "regions.json").read_text(encoding="utf-8"))
jobs = json.loads((self.settings.sample_data_dir / "jobs.json").read_text(encoding="utf-8"))
workers = json.loads((self.settings.sample_data_dir / "workers.json").read_text(encoding="utf-8"))
self.rag.ensure_ready()
for item in jobs:
self.ingest_job(JobCard(**item))
for item in workers:
self.ingest_worker(WorkerCard(**item))
return BootstrapResponse(
jobs=len(jobs),
workers=len(workers),
skills=len(skills),
categories=len(categories),
regions=len(regions),
)