Files
hackathon/app/routers/submissions.py
Artem Tsyrulnikov 477ddb8bf9 init
2026-04-06 19:27:27 +03:00

60 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from fastapi import APIRouter, Depends, HTTPException, status
from sqlmodel import Session, select
from app.connection import get_session
from app.models.submission import Submission
from app.models.user import User
from app.schemas.submission import SubmissionCreate, SubmissionRead, SubmissionReadWithDetails
from app.auth.dependencies import get_current_user
router = APIRouter(prefix="/submissions", tags=["Submissions"])
@router.post("/", response_model=SubmissionRead, status_code=status.HTTP_201_CREATED)
def create_submission(
data: SubmissionCreate,
session: Session = Depends(get_session),
current_user: User = Depends(get_current_user),
) -> Submission:
submission = Submission(**data.model_dump())
session.add(submission)
session.commit()
session.refresh(submission)
return submission
@router.get("/", response_model=list[SubmissionRead])
def list_submissions(
task_id: int | None = None,
team_id: int | None = None,
session: Session = Depends(get_session),
) -> list[Submission]:
query = select(Submission)
if task_id is not None:
query = query.where(Submission.task_id == task_id)
if team_id is not None:
query = query.where(Submission.team_id == team_id)
return list(session.exec(query).all())
@router.get("/{submission_id}", response_model=SubmissionReadWithDetails)
def get_submission(submission_id: int, session: Session = Depends(get_session)) -> Submission:
"""Возвращает работу с вложенными данными команды и задачи."""
submission = session.get(Submission, submission_id)
if not submission:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Работа не найдена")
return submission
@router.delete("/{submission_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_submission(
submission_id: int,
session: Session = Depends(get_session),
current_user: User = Depends(get_current_user),
) -> None:
submission = session.get(Submission, submission_id)
if not submission:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Работа не найдена")
session.delete(submission)
session.commit()