fix: update details handling in video activities to use JSON strings

This commit is contained in:
swve 2025-04-23 17:47:26 +02:00
parent 31b5104dd5
commit 260bd60c7a
4 changed files with 108 additions and 99 deletions

View file

@ -1,4 +1,4 @@
from typing import List, Optional
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
@ -113,7 +113,7 @@ async def api_create_video_activity(
request: Request,
name: str = Form(),
chapter_id: str = Form(),
details: Optional[dict] = Form(default=None),
details: str = Form(default="{}"),
current_user: PublicUser = Depends(get_current_user),
video_file: UploadFile | None = None,
db_session=Depends(get_db_session),

View file

@ -1,4 +1,5 @@
from typing import Literal, Optional
from typing import Literal
import json
from src.db.courses.courses import Course
from src.db.organizations import Organization
@ -31,7 +32,7 @@ async def create_video_activity(
current_user: PublicUser,
db_session: Session,
video_file: UploadFile | None = None,
details: Optional[dict] = None,
details: str = "{}",
):
# RBAC check
await rbac_check(request, "activity_x", current_user, "create", db_session)
@ -40,6 +41,9 @@ async def create_video_activity(
statement = select(Chapter).where(Chapter.id == chapter_id)
chapter = db_session.exec(statement).first()
# convert details to dict
details = json.loads(details)
if not chapter:
raise HTTPException(
status_code=404,
@ -146,7 +150,7 @@ class ExternalVideo(BaseModel):
uri: str
type: Literal["youtube", "vimeo"]
chapter_id: str
details: Optional[dict] = None
details: str = "{}"
class ExternalVideoInDB(BaseModel):
@ -184,6 +188,9 @@ async def create_external_video_activity(
# generate activity_uuid
activity_uuid = str(f"activity_{uuid4()}")
# convert details to dict
details = json.loads(data.details)
activity_object = Activity(
name=data.name,
activity_type=ActivityTypeEnum.TYPE_VIDEO,
@ -197,7 +204,7 @@ async def create_external_video_activity(
"type": data.type,
"activity_uuid": activity_uuid,
},
details=data.details,
details=details,
version=1,
creation_date=str(datetime.now()),
update_date=str(datetime.now()),