feat: enable assignments page

This commit is contained in:
swve 2024-08-07 23:47:18 +02:00
parent 40ef2d0cec
commit 364c24e15d
6 changed files with 232 additions and 3 deletions

View file

@ -20,6 +20,7 @@ from src.services.courses.activities.assignments import (
delete_assignment_submission,
delete_assignment_task,
delete_assignment_task_submission,
get_assignments_from_course,
get_grade_assignment_submission,
grade_assignment_submission,
handle_assignment_task_submission,
@ -426,6 +427,8 @@ async def api_delete_user_assignment_submissions(
return await delete_assignment_submission(
request, user_id, assignment_uuid, current_user, db_session
)
@router.get("/{assignment_uuid}/submissions/{user_id}/grade")
async def api_get_submission_grade(
request: Request,
@ -442,6 +445,7 @@ async def api_get_submission_grade(
request, user_id, assignment_uuid, current_user, db_session
)
@router.post("/{assignment_uuid}/submissions/{user_id}/grade")
async def api_final_grade_submission(
request: Request,
@ -474,3 +478,18 @@ async def api_submission_mark_as_done(
return await mark_activity_as_done_for_user(
request, user_id, assignment_uuid, current_user, db_session
)
@router.get("/course/{course_uuid}")
async def api_get_assignments(
request: Request,
course_uuid: str,
current_user: PublicUser = Depends(get_current_user),
db_session=Depends(get_db_session),
):
"""
Get assignments for a course
"""
return await get_assignments_from_course(
request, course_uuid, current_user, db_session
)

View file

@ -1576,6 +1576,40 @@ async def mark_activity_as_done_for_user(
# return OK
return {"message": "Activity marked as done for user"}
async def get_assignments_from_course(
request: Request,
course_uuid: str,
current_user: PublicUser | AnonymousUser,
db_session: Session,
):
# Find course
statement = select(Course).where(Course.course_uuid == course_uuid)
course = db_session.exec(statement).first()
if not course:
raise HTTPException(
status_code=404,
detail="Course not found",
)
# Get Activities
statement = select(Activity).where(Activity.course_id == course.id)
activities = db_session.exec(statement).all()
# Get Assignments
assignments = []
for activity in activities:
statement = select(Assignment).where(Assignment.activity_id == activity.id)
assignment = db_session.exec(statement).first()
if assignment:
assignments.append(assignment)
# RBAC check
await rbac_check(request, course.course_uuid, current_user, "read", db_session)
# return assignments read
return [AssignmentRead.model_validate(assignment) for assignment in assignments]
## 🔒 RBAC Utils ##