Coverage for backend/app/eis/routers.py: 48%
27 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-22 15:38 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-09-22 15:38 +0000
1"""FastAPI routers for the email ingestion service (EIS) 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 datetime import datetime, timedelta
8from fastapi import APIRouter, Depends, HTTPException, Query, status
9from sqlalchemy.orm import Session
11from app.models import User
12from app.eis import models, schemas
13from app.routers import generate_data_table_crud_router
14from app.database import get_db
15from app.oauth2 import get_current_user
18# Job Alert Email router
19email_router = generate_data_table_crud_router(
20 table_model=models.JobAlertEmail,
21 create_schema=schemas.JobAlertEmailCreate,
22 update_schema=schemas.JobAlertEmailUpdate,
23 out_schema=schemas.JobAlertEmailOut,
24 endpoint="jobalertemails",
25 not_found_msg="Job alert email not found",
26)
29# Scraped Job router
30scrapedjob_router = generate_data_table_crud_router(
31 table_model=models.ScrapedJob,
32 create_schema=schemas.ScrapedJobCreate,
33 update_schema=schemas.ScrapedJobUpdate,
34 out_schema=schemas.ScrapedJobOut,
35 endpoint="scrapedjobs",
36 not_found_msg="Scraped job not found",
37)
40# Email Ingestion Service Log router
41eis_servicelog_router = APIRouter(prefix="/servicelogs", tags=["servicelogs"])
44@eis_servicelog_router.get("/", response_model=list[schemas.EisServiceLogOut])
45def get_service_logs_by_date_range(
46 start_date: datetime | None = Query(None, description="Start date for filtering (ISO format)"),
47 end_date: datetime | None = Query(None, description="End date for filtering (ISO format)"),
48 delta_days: int | None = Query(None, description="Number of days to go back in time"),
49 limit: int | None = Query(None, description="Maximum number of logs to return"),
50 current_user: User = Depends(get_current_user),
51 db: Session = Depends(get_db),
52):
53 """Get service logs within a specified date range. Admin access required.
54 :param start_date: Optional start date filter (inclusive)
55 :param end_date: Optional end date filter (inclusive)
56 :param limit: Optional limit for number of logs to return
57 :param delta_days: Optional number of days to go back in time
58 :param current_user: Current authenticated admin user
59 :param db: Database session
60 :return: list of service logs within the date range ordered by run_datetime descending"""
62 if not current_user.is_admin:
63 raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Admin access required")
65 query = db.query(models.EisServiceLog)
67 # Apply date filters
68 if start_date:
69 query = query.filter(models.EisServiceLog.run_datetime >= start_date)
70 if end_date:
71 query = query.filter(models.EisServiceLog.run_datetime <= end_date)
72 if delta_days:
73 start_date = datetime.now() - timedelta(days=delta_days)
74 query = query.filter(models.EisServiceLog.run_datetime >= start_date)
76 # Order by run_datetime descending (most recent first)
77 query = query.order_by(models.EisServiceLog.run_datetime.desc())
79 # Apply limit if specified
80 if limit:
81 query = query.limit(limit)
83 return query.all()