Coverage for backend / app / job_email_scraping / routers / service_log.py: 100%
15 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."""
6import datetime as dt
8from fastapi import APIRouter, Depends, Query
9from sqlalchemy.orm import Session
11from app import models
12from app.core.oauth2 import get_current_user
13from app.database import get_db
14from app.job_email_scraping import schemas
15from app.service_runner import routers
18job_scraping_service_log_router = APIRouter(prefix="/job-scraping-service-logs", tags=["job-scraping-service-logs"])
21# GET endpoint for admins to get the service logs
22@job_scraping_service_log_router.get("/", response_model=list[schemas.JobEmailScrapingServiceLogOut])
23def get_service_logs_by_date_range(
24 start_date: dt.datetime | None = Query(None, description="Start date for filtering (ISO format)"),
25 end_date: dt.datetime | None = Query(None, description="End date for filtering (ISO format)"),
26 delta_days: int | None = Query(None, description="Number of days to go back in time"),
27 limit: int | None = Query(None, description="Maximum number of logs to return"),
28 current_user: models.User = Depends(get_current_user),
29 db: Session = Depends(get_db),
30):
31 """Get service logs within a specified date range. Admin access required.
32 :param start_date: Optional start date filter (inclusive)
33 :param end_date: Optional end date filter (inclusive)
34 :param limit: Optional limit for number of logs to return
35 :param delta_days: Optional number of days to go back in time
36 :param current_user: Current authenticated admin user
37 :param db: Database session
38 :return: list of service logs within the date range ordered by run_datetime descending"""
40 return routers.get_service_logs_by_date_range(
41 start_date,
42 end_date,
43 delta_days,
44 limit,
45 current_user,
46 db,
47 models.JobEmailScrapingServiceLog,
48 )
51# GET endpoint for admin user to get the latest service log
52@job_scraping_service_log_router.get("/latest", response_model=schemas.JobEmailScrapingServiceLogOut)
53def get_latest(
54 current_user: models.User = Depends(get_current_user),
55 db: Session = Depends(get_db),
56):
57 """Get the latest service log entry. Admin access required.
58 :param current_user: Current authenticated admin user
59 :param db: Database session
60 :return: Latest service log entry"""
62 return routers.get_latest(current_user, db, models.JobEmailScrapingServiceLog)