Files
orion/app/modules/prospecting/routes/api/admin_interactions.py
Samir Boulahtit 8a70259445
Some checks failed
CI / ruff (push) Successful in 15s
CI / pytest (push) Has been cancelled
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
fix(tenancy): use absolute URL in team invitation email link
Email clients need absolute URLs to make links clickable. The
acceptance_link was a relative path (/store/invitation/accept?token=...)
which rendered as plain text. Now prepends the platform domain with
the correct protocol.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 17:39:46 +02: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.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]