Compare commits

..

2 Commits

Author SHA1 Message Date
IluaAir
a9997b1207 get one with load 2025-08-15 15:47:58 +03:00
IluaAir
9e5cde8e28 fix token data 2025-08-15 01:06:25 +03:00
6 changed files with 29 additions and 11 deletions

View File

@@ -1,22 +1,19 @@
from typing import Annotated
from fastapi import APIRouter, Depends
from sqlalchemy import select
from src.api.dependacies.db_dep import sessionDep
from src.api.dependacies.user_dep import ActiveUser
from src.models.tasks import TasksORM
from src.schemas.tasks import TaskADDRequest
from src.services.tasks import TaskService
from src.services.users import UserService
router = APIRouter(prefix="/tasks", tags=["Tasks"])
@router.get("/")
async def get_tasks(session: sessionDep, user: ActiveUser):
query = select(TasksORM.id, TasksORM.description).where(TasksORM.user_id == user.id)
tasks = await session.session.execute(query)
result = tasks.scalars().all()
result = await UserService(session).get_user_with_tasks(user.id)
return result

View File

@@ -1,6 +1,8 @@
from sqlalchemy import update
from sqlalchemy import select, update
from sqlalchemy.orm import selectinload
from src.models import UsersORM
from src.models.tasks import TasksORM
from src.repository.base import BaseRepo
@@ -17,3 +19,17 @@ class UsersRepo(BaseRepo):
result = await self.session.execute(stmt)
model = result.scalar_one()
return model
async def get_one_with_load(self, user_id: int) -> UsersORM | None:
quary = (
select(self.model)
.where(self.model.id == user_id)
.options(
selectinload(self.model.tasks).load_only(
TasksORM.id, TasksORM.title, TasksORM.due_date
)
)
)
result = await self.session.execute(quary)
obj = result.scalar_one_or_none()
return obj

View File

@@ -7,6 +7,6 @@ class Token(BaseModel):
class TokenData(BaseModel):
id: int | None = None
sub: str | None = None
id: int
sub: str
is_active: bool

View File

@@ -16,5 +16,5 @@ class Task(TaskADDRequest):
user_id: int
status: Literal["open", "closed", "in_progress", "todo"]
time_spent: int
model_config = ConfigDict(from_attributes=True)
model_config = ConfigDict(from_attributes=True)

View File

@@ -2,7 +2,7 @@ from src.core.interfaces import IUOWDB
class BaseService:
session: IUOWDB
session: IUOWDB
def __init__(self, session: "IUOWDB"):
self.session = session

View File

@@ -38,3 +38,8 @@ class UserService(BaseService):
)
await self.session.commit()
return User.model_validate(user)
async def get_user_with_tasks(self, user_id: int):
user = await self.session.user.get_one_with_load(user_id)
if user is None:
raise HTTPException(status_code=404, detail="User not found.")