2026-02-04 02:28:51 +05:30
|
|
|
from __future__ import annotations
|
|
|
|
|
|
2026-02-06 19:11:11 +05:30
|
|
|
from fastapi import APIRouter, Depends
|
2026-02-04 03:57:19 +05:30
|
|
|
from sqlalchemy import desc
|
2026-02-06 16:12:04 +05:30
|
|
|
from sqlmodel import col, select
|
|
|
|
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
2026-02-04 02:28:51 +05:30
|
|
|
|
2026-02-04 14:58:14 +05:30
|
|
|
from app.api.deps import ActorContext, require_admin_or_agent
|
2026-02-06 19:11:11 +05:30
|
|
|
from app.db.pagination import paginate
|
2026-02-04 02:28:51 +05:30
|
|
|
from app.db.session import get_session
|
|
|
|
|
from app.models.activity_events import ActivityEvent
|
|
|
|
|
from app.schemas.activity_events import ActivityEventRead
|
2026-02-06 19:11:11 +05:30
|
|
|
from app.schemas.pagination import DefaultLimitOffsetPage
|
2026-02-04 02:28:51 +05:30
|
|
|
|
|
|
|
|
router = APIRouter(prefix="/activity", tags=["activity"])
|
|
|
|
|
|
|
|
|
|
|
2026-02-06 19:11:11 +05:30
|
|
|
@router.get("", response_model=DefaultLimitOffsetPage[ActivityEventRead])
|
2026-02-06 16:12:04 +05:30
|
|
|
async def list_activity(
|
|
|
|
|
session: AsyncSession = Depends(get_session),
|
2026-02-04 14:58:14 +05:30
|
|
|
actor: ActorContext = Depends(require_admin_or_agent),
|
2026-02-06 19:11:11 +05:30
|
|
|
) -> DefaultLimitOffsetPage[ActivityEventRead]:
|
2026-02-04 14:58:14 +05:30
|
|
|
statement = select(ActivityEvent)
|
|
|
|
|
if actor.actor_type == "agent" and actor.agent:
|
|
|
|
|
statement = statement.where(ActivityEvent.agent_id == actor.agent.id)
|
2026-02-06 19:11:11 +05:30
|
|
|
statement = statement.order_by(desc(col(ActivityEvent.created_at)))
|
|
|
|
|
return await paginate(session, statement)
|