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()