add patch endpoint and service update_task

This commit is contained in:
IluaAir
2025-09-03 23:55:26 +03:00
parent 6e6613662a
commit d7e522d362
4 changed files with 26 additions and 12 deletions

View File

@@ -1,11 +1,11 @@
from typing import Annotated 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.db_dep import sessionDep
from src.api.dependacies.task_dep import TaskFilterDep from src.api.dependacies.task_dep import TaskFilterDep
from src.api.dependacies.user_dep import ActiveUser, TaskOwnerDep 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.tasks import TaskService
from src.services.users import UserService from src.services.users import UserService
@@ -13,14 +13,9 @@ router = APIRouter(prefix="/tasks", tags=["Tasks"])
@router.get("/") @router.get("/")
async def get_tasks( async def get_tasks(session: sessionDep, user: ActiveUser, filter: TaskFilterDep):
session: sessionDep,
user: ActiveUser,
filter: TaskFilterDep
):
result = await UserService(session).get_user_with_tasks( result = await UserService(session).get_user_with_tasks(
user_id=user.id, user_id=user.id, **filter.model_dump(exclude_unset=True)
**filter.model_dump(exclude_unset=True)
) )
return result return result
@@ -43,6 +38,17 @@ async def post_task(
return result 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}") @router.delete("/{id}")
async def delete_task( async def delete_task(
session: sessionDep, session: sessionDep,

View File

@@ -50,7 +50,11 @@ class UsersRepo(BaseRepo):
selectinload( selectinload(
self.model.tasks.and_(TasksORM.id.in_(tasks_subquery)) self.model.tasks.and_(TasksORM.id.in_(tasks_subquery))
).load_only( ).load_only(
TasksORM.id, TasksORM.title, TasksORM.due_date, TasksORM.priority, TasksORM.status TasksORM.id,
TasksORM.title,
TasksORM.due_date,
TasksORM.priority,
TasksORM.status,
) )
) )
) )

View File

@@ -1,7 +1,7 @@
from fastapi import HTTPException from fastapi import HTTPException
from src.models.tasks import TasksORM 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 from src.services.base import BaseService
@@ -27,3 +27,8 @@ class TaskService(BaseService):
async def delete_task(self, task_id: int): async def delete_task(self, task_id: int):
await self.session.task.delete_one(id=task_id) await self.session.task.delete_one(id=task_id)
await self.session.commit() 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)

View File

@@ -49,7 +49,6 @@ class UserService(BaseService):
offset: int | None, offset: int | None,
date_to: date | None, date_to: date | None,
date_from: date | None, date_from: date | None,
): ):
user = await self.session.user.get_one_with_load( user = await self.session.user.get_one_with_load(
user_id=user_id, user_id=user_id,