Files
orion/app/modules/prospecting/routes/api/admin_interactions.py
Samir Boulahtit 22ae63b414
Some checks failed
CI / validate (push) Has been cancelled
CI / ruff (push) Successful in 10s
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has started running
refactor(prospecting): migrate SVC-006 transaction control to endpoint level
Move db.commit() from services to API endpoints and Celery tasks.
Services now use db.flush() only; endpoints own the transaction.

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

67 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),
)
db.commit()
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]