Files
orion/app/modules/prospecting/routes/api/admin_interactions.py
Samir Boulahtit 6d6eba75bf
Some checks failed
CI / pytest (push) Failing after 48m31s
CI / docs (push) Has been skipped
CI / deploy (push) Has been skipped
CI / ruff (push) Successful in 11s
CI / validate (push) Successful in 23s
CI / dependency-scanning (push) Successful in 28s
feat(prospecting): add complete prospecting module for lead discovery and scoring
Migrates scanning pipeline from marketing-.lu-domains app into Orion module.
Supports digital (domain scan) and offline (manual capture) lead channels
with enrichment, scoring, campaign management, and interaction tracking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 00:59:47 +01:00

66 lines
2.2 KiB
Python

# app/modules/prospecting/routes/api/admin_interactions.py
"""
Admin API routes for interaction logging and follow-ups.
"""
import logging
from datetime import date
from fastapi import APIRouter, Depends, Path, Query
from sqlalchemy.orm import Session
from app.api.deps import get_current_admin_api
from app.core.database import get_db
from app.modules.prospecting.schemas.interaction import (
InteractionCreate,
InteractionListResponse,
InteractionResponse,
)
from app.modules.prospecting.services.interaction_service import interaction_service
from app.modules.tenancy.schemas.auth import UserContext
router = APIRouter()
logger = logging.getLogger(__name__)
@router.get("/prospects/{prospect_id}/interactions", response_model=InteractionListResponse)
def get_prospect_interactions(
prospect_id: int = Path(...),
db: Session = Depends(get_db),
current_admin: UserContext = Depends(get_current_admin_api),
):
"""Get all interactions for a prospect."""
interactions = interaction_service.get_for_prospect(db, prospect_id)
return InteractionListResponse(
items=[InteractionResponse.model_validate(i) for i in interactions],
total=len(interactions),
)
@router.post("/prospects/{prospect_id}/interactions", response_model=InteractionResponse)
def create_interaction(
data: InteractionCreate,
prospect_id: int = Path(...),
db: Session = Depends(get_db),
current_admin: UserContext = Depends(get_current_admin_api),
):
"""Log a new interaction for a prospect."""
interaction = interaction_service.create(
db,
prospect_id=prospect_id,
user_id=current_admin.user_id,
data=data.model_dump(exclude_none=True),
)
return InteractionResponse.model_validate(interaction)
@router.get("/interactions/upcoming")
def get_upcoming_actions(
before: date | None = Query(None),
db: Session = Depends(get_db),
current_admin: UserContext = Depends(get_current_admin_api),
):
"""Get interactions with upcoming follow-up actions."""
interactions = interaction_service.get_upcoming_actions(db, before_date=before)
return [InteractionResponse.model_validate(i) for i in interactions]