diff --git a/src/repository/users.py b/src/repository/users.py index 535f038..46e669e 100644 --- a/src/repository/users.py +++ b/src/repository/users.py @@ -26,7 +26,7 @@ class UsersRepo(BaseRepo): .where(self.model.id == user_id) .options( selectinload(self.model.tasks).load_only( - TasksORM.id, TasksORM.title, TasksORM.due_date + TasksORM.id, TasksORM.title, TasksORM.due_date, TasksORM.priority ) ) ) diff --git a/src/schemas/tasks.py b/src/schemas/tasks.py index e862c5d..a446467 100644 --- a/src/schemas/tasks.py +++ b/src/schemas/tasks.py @@ -4,11 +4,19 @@ from typing import Literal from pydantic import BaseModel, ConfigDict -class TaskADDRequest(BaseModel): +class TaskShort(BaseModel): title: str - description: str | None = None due_date: date | None = None priority: Literal["low", "medium", "high", "critical"] = "medium" + model_config = ConfigDict(from_attributes=True) + + +class TaskWithId(TaskShort): + id: int + + +class TaskADDRequest(TaskShort): + description: str | None = None class Task(TaskADDRequest): diff --git a/src/schemas/users.py b/src/schemas/users.py index 15e3dd6..27e3db8 100644 --- a/src/schemas/users.py +++ b/src/schemas/users.py @@ -2,6 +2,7 @@ from typing import Annotated from pydantic import BaseModel, BeforeValidator, ConfigDict, EmailStr +from src.schemas.tasks import TaskWithId from src.schemas.validators import ensure_password @@ -25,6 +26,10 @@ class UserWithHashedPass(User): hashed_password: str +class UserWithTasks(User): + tasks: list[TaskWithId] + + class UserRequest(BaseModel): username: str password: str diff --git a/src/services/users.py b/src/services/users.py index 2093aa3..025cad9 100644 --- a/src/services/users.py +++ b/src/services/users.py @@ -1,6 +1,6 @@ from fastapi import HTTPException -from src.schemas.users import User, UserUpdate +from src.schemas.users import User, UserUpdate, UserWithTasks from src.services.base import BaseService @@ -43,3 +43,4 @@ class UserService(BaseService): user = await self.session.user.get_one_with_load(user_id) if user is None: raise HTTPException(status_code=404, detail="User not found.") + return UserWithTasks.model_validate(user)