init
This commit is contained in:
73
app/routers/tasks.py
Normal file
73
app/routers/tasks.py
Normal 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()
|
||||
Reference in New Issue
Block a user