mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
407 lines
12 KiB
Python
407 lines
12 KiB
Python
from fastapi import APIRouter, Depends, Request, UploadFile
|
|
from src.db.courses.assignments import (
|
|
AssignmentCreate,
|
|
AssignmentRead,
|
|
AssignmentTaskCreate,
|
|
AssignmentTaskSubmissionCreate,
|
|
AssignmentTaskSubmissionUpdate,
|
|
AssignmentTaskUpdate,
|
|
AssignmentUpdate,
|
|
AssignmentUserSubmissionCreate,
|
|
)
|
|
from src.db.users import PublicUser
|
|
from src.core.events.database import get_db_session
|
|
from src.security.auth import get_current_user
|
|
from src.services.courses.activities.assignments import (
|
|
create_assignment,
|
|
create_assignment_submission,
|
|
create_assignment_task,
|
|
delete_assignment,
|
|
delete_assignment_from_activity_uuid,
|
|
delete_assignment_submission,
|
|
delete_assignment_task,
|
|
delete_assignment_task_submission,
|
|
handle_assignment_task_submission,
|
|
put_assignment_task_reference_file,
|
|
put_assignment_task_submission_file,
|
|
read_assignment,
|
|
read_assignment_from_activity_uuid,
|
|
read_assignment_submissions,
|
|
read_assignment_task,
|
|
read_assignment_task_submissions,
|
|
read_assignment_tasks,
|
|
read_user_assignment_submissions,
|
|
read_user_assignment_task_submissions,
|
|
read_user_assignment_task_submissions_me,
|
|
update_assignment,
|
|
update_assignment_submission,
|
|
update_assignment_task,
|
|
)
|
|
|
|
router = APIRouter()
|
|
|
|
## ASSIGNMENTS ##
|
|
|
|
|
|
@router.post("/")
|
|
async def api_create_assignments(
|
|
request: Request,
|
|
assignment_object: AssignmentCreate,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
) -> AssignmentRead:
|
|
"""
|
|
Create new activity
|
|
"""
|
|
return await create_assignment(request, assignment_object, current_user, db_session)
|
|
|
|
|
|
@router.get("/{assignment_uuid}")
|
|
async def api_read_assignment(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
) -> AssignmentRead:
|
|
"""
|
|
Read an assignment
|
|
"""
|
|
return await read_assignment(request, assignment_uuid, current_user, db_session)
|
|
|
|
|
|
@router.get("/activity/{activity_uuid}")
|
|
async def api_read_assignment_from_activity(
|
|
request: Request,
|
|
activity_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
) -> AssignmentRead:
|
|
"""
|
|
Read an assignment
|
|
"""
|
|
return await read_assignment_from_activity_uuid(
|
|
request, activity_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.put("/{assignment_uuid}")
|
|
async def api_update_assignment(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
assignment_object: AssignmentUpdate,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
) -> AssignmentRead:
|
|
"""
|
|
Update an assignment
|
|
"""
|
|
return await update_assignment(
|
|
request, assignment_uuid, assignment_object, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.delete("/{assignment_uuid}")
|
|
async def api_delete_assignment(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Delete an assignment
|
|
"""
|
|
return await delete_assignment(request, assignment_uuid, current_user, db_session)
|
|
|
|
|
|
@router.delete("/activity/{activity_uuid}")
|
|
async def api_delete_assignment_from_activity(
|
|
request: Request,
|
|
activity_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Delete an assignment
|
|
"""
|
|
return await delete_assignment_from_activity_uuid(
|
|
request, activity_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
## ASSIGNMENTS Tasks ##
|
|
|
|
|
|
@router.post("/{assignment_uuid}/tasks")
|
|
async def api_create_assignment_tasks(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
assignment_task_object: AssignmentTaskCreate,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Create new tasks for an assignment
|
|
"""
|
|
return await create_assignment_task(
|
|
request, assignment_uuid, assignment_task_object, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.get("/{assignment_uuid}/tasks")
|
|
async def api_read_assignment_tasks(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Read tasks for an assignment
|
|
"""
|
|
return await read_assignment_tasks(
|
|
request, assignment_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
@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/{assignment_task_uuid}")
|
|
async def api_update_assignment_tasks(
|
|
request: Request,
|
|
assignment_task_uuid: str,
|
|
assignment_task_object: AssignmentTaskUpdate,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Update tasks for an assignment
|
|
"""
|
|
return await update_assignment_task(
|
|
request, assignment_task_uuid, assignment_task_object, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.post("/{assignment_uuid}/tasks/{assignment_task_uuid}/ref_file")
|
|
async def api_put_assignment_task_ref_file(
|
|
request: Request,
|
|
assignment_task_uuid: str,
|
|
reference_file: UploadFile | None = None,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Update tasks for an assignment
|
|
"""
|
|
return await put_assignment_task_reference_file(
|
|
request, db_session, assignment_task_uuid, current_user, reference_file
|
|
)
|
|
|
|
@router.post("/{assignment_uuid}/tasks/{assignment_task_uuid}/sub_file")
|
|
async def api_put_assignment_task_sub_file(
|
|
request: Request,
|
|
assignment_task_uuid: str,
|
|
sub_file: UploadFile | None = None,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Update tasks for an assignment
|
|
"""
|
|
return await put_assignment_task_submission_file(
|
|
request, db_session, assignment_task_uuid, current_user, sub_file
|
|
)
|
|
|
|
|
|
@router.delete("/{assignment_uuid}/tasks/{assignment_task_uuid}")
|
|
async def api_delete_assignment_tasks(
|
|
request: Request,
|
|
assignment_task_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Delete tasks for an assignment
|
|
"""
|
|
return await delete_assignment_task(
|
|
request, assignment_task_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
## ASSIGNMENTS Tasks Submissions ##
|
|
|
|
|
|
@router.put("/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions")
|
|
async def api_handle_assignment_task_submissions(
|
|
request: Request,
|
|
assignment_task_submission_object: AssignmentTaskSubmissionUpdate,
|
|
assignment_task_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Create new task submissions for an assignment
|
|
"""
|
|
return await handle_assignment_task_submission(
|
|
request,
|
|
assignment_task_uuid,
|
|
assignment_task_submission_object,
|
|
current_user,
|
|
db_session,
|
|
)
|
|
|
|
|
|
@router.get("/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions/{user_id}")
|
|
async def api_read_user_assignment_task_submissions(
|
|
request: Request,
|
|
assignment_task_uuid: str,
|
|
user_id: int,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Read task submissions for an assignment from a user
|
|
"""
|
|
return await read_user_assignment_task_submissions(
|
|
request, assignment_task_uuid, user_id, current_user, db_session
|
|
)
|
|
|
|
@router.get("/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions/user/me")
|
|
async def api_read_user_assignment_task_submissions_me(
|
|
request: Request,
|
|
assignment_task_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Read task submissions for an assignment from a user
|
|
"""
|
|
return await read_user_assignment_task_submissions_me(
|
|
request, assignment_task_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.get("/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions")
|
|
async def api_read_assignment_task_submissions(
|
|
request: Request,
|
|
assignment_task_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Read task submissions for an assignment from a user
|
|
"""
|
|
return await read_assignment_task_submissions(
|
|
request, assignment_task_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.delete(
|
|
"/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions/{assignment_task_submission_uuid}"
|
|
)
|
|
async def api_delete_assignment_task_submissions(
|
|
request: Request,
|
|
assignment_task_submission_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Delete task submissions for an assignment from a user
|
|
"""
|
|
return await delete_assignment_task_submission(
|
|
request, assignment_task_submission_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
## ASSIGNMENTS Submissions ##
|
|
|
|
|
|
@router.post("/{assignment_uuid}/submissions")
|
|
async def api_create_assignment_submissions(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
assignment_submission: AssignmentUserSubmissionCreate,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Create new submissions for an assignment
|
|
"""
|
|
return await create_assignment_submission(
|
|
request, assignment_uuid, assignment_submission, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.get("/{assignment_uuid}/submissions")
|
|
async def api_read_assignment_submissions(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Read submissions for an assignment
|
|
"""
|
|
return await read_assignment_submissions(
|
|
request, assignment_uuid, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.get("/{assignment_uuid}/submissions/{user_id}")
|
|
async def api_read_user_assignment_submissions(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
user_id: int,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Read submissions for an assignment from a user
|
|
"""
|
|
return await read_user_assignment_submissions(
|
|
request, assignment_uuid, user_id, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.put("/{assignment_uuid}/submissions/{user_id}")
|
|
async def api_update_user_assignment_submissions(
|
|
request: Request,
|
|
assignment_uuid: str,
|
|
user_id: str,
|
|
assignment_submission: AssignmentUserSubmissionCreate,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Update submissions for an assignment from a user
|
|
"""
|
|
return await update_assignment_submission(
|
|
request, user_id, assignment_submission, current_user, db_session
|
|
)
|
|
|
|
|
|
@router.delete("/{assignment_uuid}/submissions/{user_id}")
|
|
async def api_delete_user_assignment_submissions(
|
|
request: Request,
|
|
assignment_id: str,
|
|
user_id: str,
|
|
current_user: PublicUser = Depends(get_current_user),
|
|
db_session=Depends(get_db_session),
|
|
):
|
|
"""
|
|
Delete submissions for an assignment from a user
|
|
"""
|
|
return await delete_assignment_submission(
|
|
request, assignment_id, user_id, current_user, db_session
|
|
)
|