1. Nessa aula vamos adicionar o model para tarefas.
  2. Vamos criar o arquivo task_model.py e adicionar o seguinte código:
from typing import Optional
from datetime import datetime
from uuid import UUID, uuid4
from beanie import Document, Indexed, Link, before_event, Replace, Insert
from pydantic import Field
from .user_model import User

class Task(Document):
    task_id: UUID = Field(default_factory=uuid4, unique=True)
    status: bool = False
    title: Indexed(str)
    description: Indexed(str)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    updadet_at: datetime = Field(default_factory=datetime.utcnow)
    owner: Link[User]
    
    def __repr__(self) -> str:
        return f'Task {self.title}'
    
    def __str__(self) -> str:
        return self.title
    
    def __hash__(self) -> int:
        return hash(self.title)

    def __eq__(self, other: object) -> bool:
        if isinstance(other, Task):
            return self.task_id == other.task_id 
        return False
    
    @before_event([Replace, Insert])  
    def sync_update_at(self):
        self.updadet_at = datetime.utcnow()
3 - Vamos adicionar o seguinte código no arquivo app.py
from fastapi import FastAPI
from core.config import settings
from beanie import init_beanie
from motor.motor_asyncio import AsyncIOMotorClient

from api.api_v1.router import router
from models.user_model import User
from models.task_model import Task

app = FastAPI(
    title=settings.PROJECT_NAME,
    openapi_url=f'{settings.API_V1_STR}/openapi.json'
)

@app.on_event('startup')
async def app_init():
    client_db = AsyncIOMotorClient(
        settings.MONGO_CONNECTION_STRING).todoapp
    
    await init_beanie(
        database=client_db,
        document_models=[
            User,
            Task
        ]
    )

app.include_router(
    router,
    prefix=settings.API_V1_STR
)