learnhouse/apps/api/src/routers/courses/activities/activities.py

164 lines
4.4 KiB
Python

from typing import List
from fastapi import APIRouter, Depends, UploadFile, Form, Request
from src.db.courses.activities import ActivityCreate, ActivityRead, ActivityUpdate
from src.db.users import PublicUser
from src.core.events.database import get_db_session
from src.services.courses.activities.activities import (
create_activity,
get_activity,
get_activities,
get_activityby_id,
update_activity,
delete_activity,
)
from src.security.auth import get_current_user
from src.services.courses.activities.pdf import create_documentpdf_activity
from src.services.courses.activities.video import (
ExternalVideo,
create_external_video_activity,
create_video_activity,
)
router = APIRouter()
@router.post("/")
async def api_create_activity(
request: Request,
activity_object: ActivityCreate,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
) -> ActivityRead:
"""
Create new activity
"""
return await create_activity(request, activity_object, current_user, db_session)
@router.get("/{activity_uuid}")
async def api_get_activity(
request: Request,
activity_uuid: str,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
) -> ActivityRead:
"""
Get single activity by activity_id
"""
return await get_activity(
request, activity_uuid, current_user=current_user, db_session=db_session
)
@router.get("/id/{activity_id}")
async def api_get_activityby_id(
request: Request,
activity_id: str,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
) -> ActivityRead:
"""
Get single activity by activity_id
"""
return await get_activityby_id(
request, activity_id, current_user=current_user, db_session=db_session
)
@router.get("/chapter/{chapter_id}")
async def api_get_chapter_activities(
request: Request,
chapter_id: int,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
) -> List[ActivityRead]:
"""
Get Activities for a chapter
"""
return await get_activities(request, chapter_id, current_user, db_session)
@router.put("/{activity_uuid}")
async def api_update_activity(
request: Request,
activity_object: ActivityUpdate,
activity_uuid: str,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
) -> ActivityRead:
"""
Update activity by activity_id
"""
return await update_activity(
request, activity_object, activity_uuid, current_user, db_session
)
@router.delete("/{activity_uuid}")
async def api_delete_activity(
request: Request,
activity_uuid: str,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
):
"""
Delete activity by activity_id
"""
return await delete_activity(request, activity_uuid, current_user, db_session)
# Video activity
@router.post("/video")
async def api_create_video_activity(
request: Request,
name: str = Form(),
chapter_id: str = Form(),
details: str = Form(default="{}"),
current_user: PublicUser = Depends(get_current_user),
video_file: UploadFile | None = None,
db_session=Depends(get_db_session),
) -> ActivityRead:
"""
Create new activity
"""
return await create_video_activity(
request,
name,
chapter_id,
current_user,
db_session,
video_file,
details,
)
@router.post("/external_video")
async def api_create_external_video_activity(
request: Request,
external_video: ExternalVideo,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
) -> ActivityRead:
"""
Create new activity
"""
return await create_external_video_activity(
request, current_user, external_video, db_session
)
@router.post("/documentpdf")
async def api_create_documentpdf_activity(
request: Request,
name: str = Form(),
chapter_id: str = Form(),
current_user: PublicUser = Depends(get_current_user),
pdf_file: UploadFile | None = None,
db_session=Depends(get_db_session),
) -> ActivityRead:
"""
Create new activity
"""
return await create_documentpdf_activity(
request, name, chapter_id, current_user, db_session, pdf_file
)