feat: assignmentTask creation and switching

This commit is contained in:
swve 2024-07-13 20:03:08 +02:00
parent 6a4e16ec29
commit acfcea026b
9 changed files with 354 additions and 55 deletions

View file

@ -102,11 +102,7 @@ class AssignmentTaskBase(SQLModel):
contents: Dict = Field(default={}, sa_column=Column(JSON))
max_grade_value: int = 0 # Value is always between 0-100
assignment_id: int
org_id: int
course_id: int
chapter_id: int
activity_id: int
class AssignmentTaskCreate(AssignmentTaskBase):

View file

@ -24,6 +24,7 @@ from src.services.courses.activities.assignments import (
read_assignment,
read_assignment_from_activity_uuid,
read_assignment_submissions,
read_assignment_task,
read_assignment_task_submissions,
read_assignment_tasks,
read_user_assignment_submissions,
@ -151,6 +152,20 @@ async def api_read_assignment_tasks(
)
@router.get("/task/{assignment_task_uuid}")
async def api_read_assignment_task(
request: Request,
assignment_task_uuid: str,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
):
"""
Read task for an assignment
"""
return await read_assignment_task(
request, assignment_task_uuid, current_user, db_session
)
@router.put("/{assignment_uuid}/tasks/{task_uuid}")
async def api_update_assignment_tasks(
request: Request,

View file

@ -315,6 +315,10 @@ async def create_assignment_task(
assignment_task.creation_date = str(datetime.now())
assignment_task.update_date = str(datetime.now())
assignment_task.org_id = course.org_id
assignment_task.chapter_id = assignment.chapter_id
assignment_task.activity_id = assignment.activity_id
assignment_task.assignment_id = assignment.id # type: ignore
assignment_task.course_id = assignment.course_id
# Insert Assignment Task in DB
db_session.add(assignment_task)
@ -365,6 +369,48 @@ async def read_assignment_tasks(
for assignment_task in db_session.exec(statement).all()
]
async def read_assignment_task(
request: Request,
assignment_task_uuid: str,
current_user: PublicUser | AnonymousUser,
db_session: Session,
):
# Find assignment
statement = select(AssignmentTask).where(AssignmentTask.assignment_task_uuid == assignment_task_uuid)
assignmenttask = db_session.exec(statement).first()
if not assignmenttask:
raise HTTPException(
status_code=404,
detail="Assignment Task not found",
)
# Check if assignment exists
statement = select(Assignment).where(Assignment.id == assignmenttask.assignment_id)
assignment = db_session.exec(statement).first()
if not assignment:
raise HTTPException(
status_code=404,
detail="Assignment not found",
)
# Check if course exists
statement = select(Course).where(Course.id == assignment.course_id)
course = db_session.exec(statement).first()
if not course:
raise HTTPException(
status_code=404,
detail="Course not found",
)
# RBAC check
await rbac_check(request, course.course_uuid, current_user, "read", db_session)
# return assignment task read
return AssignmentTaskRead.model_validate(assignmenttask)
async def update_assignment_task(
request: Request,