This commit is contained in:
Artem Tsyrulnikov
2026-04-06 19:27:27 +03:00
commit 477ddb8bf9
38 changed files with 1916 additions and 0 deletions

73
app/routers/tasks.py Normal file
View File

@@ -0,0 +1,73 @@
from fastapi import APIRouter, Depends, HTTPException, status
from sqlmodel import Session, select
from app.connection import get_session
from app.models.task import Task
from app.models.user import User
from app.schemas.task import TaskCreate, TaskRead, TaskUpdate
from app.auth.dependencies import get_current_organizer
router = APIRouter(prefix="/tasks", tags=["Tasks"])
@router.post("/", response_model=TaskRead, status_code=status.HTTP_201_CREATED)
def create_task(
data: TaskCreate,
session: Session = Depends(get_session),
organizer: User = Depends(get_current_organizer),
) -> Task:
task = Task(**data.model_dump())
session.add(task)
session.commit()
session.refresh(task)
return task
@router.get("/", response_model=list[TaskRead])
def list_tasks(
hackathon_id: int | None = None,
session: Session = Depends(get_session),
) -> list[Task]:
query = select(Task)
if hackathon_id is not None:
query = query.where(Task.hackathon_id == hackathon_id)
return list(session.exec(query).all())
@router.get("/{task_id}", response_model=TaskRead)
def get_task(task_id: int, session: Session = Depends(get_session)) -> Task:
task = session.get(Task, task_id)
if not task:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Задача не найдена")
return task
@router.patch("/{task_id}", response_model=TaskRead)
def update_task(
task_id: int,
data: TaskUpdate,
session: Session = Depends(get_session),
organizer: User = Depends(get_current_organizer),
) -> Task:
task = session.get(Task, task_id)
if not task:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Задача не найдена")
for field, value in data.model_dump(exclude_unset=True).items():
setattr(task, field, value)
session.add(task)
session.commit()
session.refresh(task)
return task
@router.delete("/{task_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_task(
task_id: int,
session: Session = Depends(get_session),
organizer: User = Depends(get_current_organizer),
) -> None:
task = session.get(Task, task_id)
if not task:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Задача не найдена")
session.delete(task)
session.commit()