Source code for orghandbookapi.routers.v1.activity
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from orghandbookapi.database.database import get_db_session
from orghandbookapi.database.models.repositories import ActivityRepository
from orghandbookapi.schemas.activity import (
Activity,
ActivityCreate,
ActivityTree,
ActivityUpdate,
ActivityWithRelations,
)
activity_router = APIRouter()
[docs]
@activity_router.get("/", response_model=list[Activity])
async def get_activities( # noqa: D103
skip: int = 0,
limit: int = 100,
session: AsyncSession = Depends(get_db_session), # noqa: B008
):
activities = await ActivityRepository.get_all(session)
return activities[skip : skip + limit]
[docs]
@activity_router.get("/{activity_id}", response_model=ActivityWithRelations)
async def get_activity( # noqa: D103
activity_id: int,
session: AsyncSession = Depends(get_db_session), # noqa: B008
):
activity = await ActivityRepository.get_with_relations(session, activity_id)
if not activity:
raise HTTPException(status_code=404, detail="Activity not found")
return activity
[docs]
@activity_router.post("/", response_model=Activity)
async def create_activity( # noqa: D103
activity: ActivityCreate,
session: AsyncSession = Depends(get_db_session), # noqa: B008
):
return await ActivityRepository.create(session, activity)
[docs]
@activity_router.put("/{activity_id}", response_model=Activity)
async def update_activity( # noqa: D103
activity_id: int,
activity: ActivityUpdate,
session: AsyncSession = Depends(get_db_session), # noqa: B008
):
existing_activity = await ActivityRepository.get(session, activity_id)
if not existing_activity:
raise HTTPException(status_code=404, detail="Activity not found")
return await ActivityRepository.update(session, activity)
[docs]
@activity_router.delete("/{activity_id}")
async def delete_activity( # noqa: D103
activity_id: int,
session: AsyncSession = Depends(get_db_session), # noqa: B008
):
await ActivityRepository.delete(session, activity_id)
return {"message": "Activity deleted"}
[docs]
@activity_router.get("/tree/{parent_id}", response_model=list[ActivityTree])
async def get_activity_tree( # noqa: D103
parent_id: int | None = None,
session: AsyncSession = Depends(get_db_session), # noqa: B008
):
return await ActivityRepository.get_tree(session, parent_id)