1. Nessa aula vamos criar o endpoint para alterar e excluir uma tarefa.
  2. Vamos adicionar o seguinte código no arquivo task.py
from fastapi import APIRouter, Depends
from schemas.task_schema import TaskDetail, TaskCreate, TaskUpdate
from models.user_model import User
from api.dependencies.user_deps import get_current_user
from services.task_service import TaskService
from models.task_model import Task
from typing import List
from uuid import UUID

task_router = APIRouter()

@task_router.get('/', summary='Lista as Tarefas', response_model=List[TaskDetail])
async def list_tasks(user: User = Depends(get_current_user)):
    return await TaskService.list_tasks(user)

@task_router.get('/{task_id}', summary='Detalhe de uma Tarefa por ID', response_model=TaskDetail)
async def detail(task_id: UUID, user: User = Depends(get_current_user)):
    return await TaskService.detail(user, task_id)

@task_router.post('/create', summary='Adiciona Tarefa', response_model=Task)
async def create_task(data: TaskCreate, user: User = Depends(get_current_user)):
    return await TaskService.create_task(user, data)

@task_router.put('/{task_id}', summary='Atualiza Tarefa', response_model=TaskDetail)
async def update(task_id: UUID, data: TaskUpdate, user: User = Depends(get_current_user)):
    return await TaskService.update_task(user, task_id, data)

@task_router.delete('/{task_id}', summary='Exclui Tarefa')
async def delete(task_id: UUID, user: User = Depends(get_current_user)):
    await TaskService.delete_task(user, task_id)
    return None
3 - Vamos adicionar o seguinte código no arquivo task_service.py
from models.user_model import User
from models.task_model import Task
from typing import List
from schemas.task_schema import TaskCreate, TaskUpdate
from uuid import UUID

class TaskService:
    @staticmethod
    async def list_tasks(user: User) -> List[Task]:
        tasks = await Task.find(Task.owner.id == user.id).to_list()
        return tasks
    
    @staticmethod
    async def create_task(user: User, data: TaskCreate) -> Task:
        task = Task(**data.dict(), owner=user)
        return await task.insert()
    
    @staticmethod
    async def detail(user: User, task_id: UUID):
        task = await Task.find_one(Task.task_id == task_id, Task.owner.id == user.id)
        return task
    
    @staticmethod
    async def update_task(user: User, task_id: UUID, data: TaskUpdate):
        task = await TaskService.detail(user, task_id)
        await task.update({
            '$set': data.dict(
                exclude_unset=True
            )
        })
        await task.save()
        return task
    
    @staticmethod
    async def delete_task(user: User, task_id: UUID) -> None:
        task = await TaskService.detail(user, task_id)
        if task:
            await task.delete()
        return None