diff --git a/src/api/v1/tasks.py b/src/api/v1/tasks.py index cb4db33..27e4edd 100644 --- a/src/api/v1/tasks.py +++ b/src/api/v1/tasks.py @@ -1,11 +1,11 @@ from typing import Annotated -from fastapi import APIRouter, Depends +from fastapi import APIRouter, Body, Depends from src.api.dependacies.db_dep import sessionDep from src.api.dependacies.task_dep import TaskFilterDep from src.api.dependacies.user_dep import ActiveUser, TaskOwnerDep -from src.schemas.tasks import TaskADDRequest +from src.schemas.tasks import TaskADDRequest, TaskPATCHRequest from src.services.tasks import TaskService from src.services.users import UserService @@ -13,14 +13,9 @@ router = APIRouter(prefix="/tasks", tags=["Tasks"]) @router.get("/") -async def get_tasks( - session: sessionDep, - user: ActiveUser, - filter: TaskFilterDep - ): +async def get_tasks(session: sessionDep, user: ActiveUser, filter: TaskFilterDep): result = await UserService(session).get_user_with_tasks( - user_id=user.id, - **filter.model_dump(exclude_unset=True) + user_id=user.id, **filter.model_dump(exclude_unset=True) ) return result @@ -43,6 +38,17 @@ async def post_task( return result +@router.patch("/{id}") +async def patch_task( + session: sessionDep, + id: int, + _: TaskOwnerDep, + task_data: TaskPATCHRequest = Body(), +): + task = await TaskService(session).update_task(id, task_data) + return task + + @router.delete("/{id}") async def delete_task( session: sessionDep, diff --git a/src/repository/users.py b/src/repository/users.py index 3c61569..0220a56 100644 --- a/src/repository/users.py +++ b/src/repository/users.py @@ -50,7 +50,11 @@ class UsersRepo(BaseRepo): selectinload( self.model.tasks.and_(TasksORM.id.in_(tasks_subquery)) ).load_only( - TasksORM.id, TasksORM.title, TasksORM.due_date, TasksORM.priority, TasksORM.status + TasksORM.id, + TasksORM.title, + TasksORM.due_date, + TasksORM.priority, + TasksORM.status, ) ) ) diff --git a/src/services/tasks.py b/src/services/tasks.py index 061d823..19bc499 100644 --- a/src/services/tasks.py +++ b/src/services/tasks.py @@ -1,7 +1,7 @@ from fastapi import HTTPException from src.models.tasks import TasksORM -from src.schemas.tasks import Task, TaskADDRequest +from src.schemas.tasks import Task, TaskADDRequest, TaskPATCHRequest from src.services.base import BaseService @@ -27,3 +27,8 @@ class TaskService(BaseService): async def delete_task(self, task_id: int): await self.session.task.delete_one(id=task_id) await self.session.commit() + + async def update_task(self, task_id: int, task_data: TaskPATCHRequest, exclude_unset: bool = True): + task = await self.session.task.update_one(id=task_id, data=task_data.model_dump(exclude_unset=exclude_unset)) + await self.session.commit() + return Task.model_validate(task) diff --git a/src/services/users.py b/src/services/users.py index 9508adb..ce90ff2 100644 --- a/src/services/users.py +++ b/src/services/users.py @@ -49,7 +49,6 @@ class UserService(BaseService): offset: int | None, date_to: date | None, date_from: date | None, - ): user = await self.session.user.get_one_with_load( user_id=user_id,