Coverage for backend / app / job_email_scraping / routers / scraper_service.py: 79%
19 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-17 21:34 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-17 21:34 +0000
1"""FastAPI routers for the job email scraping service endpoints.
3Provides REST API endpoints for managing job alert emails, scraped job postings,
4and service execution logs with CRUD operations and admin access controls."""
6from fastapi import APIRouter, Depends, Query
8from app import models
9from app.core.oauth2 import get_current_user
10from app.job_email_scraping import schemas
11from app.job_email_scraping.email_scraper import job_scraping_service_runner, SERVICE_NAME
12from app.service_runner import routers
14email_scraper_service_router = APIRouter(prefix="/job-scraper-service", tags=["job-scraper-service"])
17@email_scraper_service_router.post("/start")
18def start_scraper(
19 request: schemas.JobEmailScrapingStartRequest,
20 current_user: models.User = Depends(get_current_user),
21) -> dict:
22 """Start the service runner with the specified period.
23 :param request: StartRequest object containing period_hours
24 :param current_user: Current authenticated user"""
26 return routers.start_scraper(job_scraping_service_runner, current_user, request.period_hours)
29@email_scraper_service_router.post("/stop")
30def stop_scraper(
31 current_user: models.User = Depends(get_current_user),
32) -> dict:
33 """Stop the service runner.
34 :param current_user: Current authenticated user"""
36 return routers.stop_scraper(job_scraping_service_runner, current_user)
39@email_scraper_service_router.get("/status")
40def scraper_status(
41 current_user: models.User = Depends(get_current_user),
42) -> dict:
43 """Get the current status of the service"""
45 return routers.scraper_status(job_scraping_service_runner, current_user)
48@email_scraper_service_router.get("/logs")
49def get_scraper_logs(
50 lines: int = Query(100, ge=1, le=10000),
51 current_user: models.User = Depends(get_current_user),
52):
53 """Get the last N lines from the service log file
54 :param lines: Number of lines to retrieve (default 100, max 10000)
55 :param current_user: Current authenticated user"""
57 return routers.get_service_logs(SERVICE_NAME, lines, current_user)