22 lines
777 B
Python
22 lines
777 B
Python
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import HTTPException, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.models import Action, ActionIngestStatus, User, UserRole
|
|
|
|
|
|
async def get_active_action_or_404(
|
|
session: AsyncSession,
|
|
action_id: UUID,
|
|
current_user: User,
|
|
) -> Action:
|
|
action = await session.get(Action, action_id)
|
|
if action is None or action.is_deleted or action.ingest_status != ActionIngestStatus.SUCCEEDED:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Action not found")
|
|
if current_user.role != UserRole.ADMIN and action.user_id != current_user.id:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Action not found")
|
|
return action
|