Compare commits
2 Commits
723f59d35e
...
a9997b1207
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9997b1207 | ||
|
|
9e5cde8e28 |
@@ -1,22 +1,19 @@
|
|||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
from sqlalchemy import select
|
|
||||||
|
|
||||||
from src.api.dependacies.db_dep import sessionDep
|
from src.api.dependacies.db_dep import sessionDep
|
||||||
from src.api.dependacies.user_dep import ActiveUser
|
from src.api.dependacies.user_dep import ActiveUser
|
||||||
from src.models.tasks import TasksORM
|
|
||||||
from src.schemas.tasks import TaskADDRequest
|
from src.schemas.tasks import TaskADDRequest
|
||||||
from src.services.tasks import TaskService
|
from src.services.tasks import TaskService
|
||||||
|
from src.services.users import UserService
|
||||||
|
|
||||||
router = APIRouter(prefix="/tasks", tags=["Tasks"])
|
router = APIRouter(prefix="/tasks", tags=["Tasks"])
|
||||||
|
|
||||||
|
|
||||||
@router.get("/")
|
@router.get("/")
|
||||||
async def get_tasks(session: sessionDep, user: ActiveUser):
|
async def get_tasks(session: sessionDep, user: ActiveUser):
|
||||||
query = select(TasksORM.id, TasksORM.description).where(TasksORM.user_id == user.id)
|
result = await UserService(session).get_user_with_tasks(user.id)
|
||||||
tasks = await session.session.execute(query)
|
|
||||||
result = tasks.scalars().all()
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 import UsersORM
|
||||||
|
from src.models.tasks import TasksORM
|
||||||
from src.repository.base import BaseRepo
|
from src.repository.base import BaseRepo
|
||||||
|
|
||||||
|
|
||||||
@@ -17,3 +19,17 @@ class UsersRepo(BaseRepo):
|
|||||||
result = await self.session.execute(stmt)
|
result = await self.session.execute(stmt)
|
||||||
model = result.scalar_one()
|
model = result.scalar_one()
|
||||||
return model
|
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
|
||||||
|
|||||||
@@ -7,6 +7,6 @@ class Token(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class TokenData(BaseModel):
|
class TokenData(BaseModel):
|
||||||
id: int | None = None
|
id: int
|
||||||
sub: str | None = None
|
sub: str
|
||||||
is_active: bool
|
is_active: bool
|
||||||
|
|||||||
@@ -16,5 +16,5 @@ class Task(TaskADDRequest):
|
|||||||
user_id: int
|
user_id: int
|
||||||
status: Literal["open", "closed", "in_progress", "todo"]
|
status: Literal["open", "closed", "in_progress", "todo"]
|
||||||
time_spent: int
|
time_spent: int
|
||||||
|
|
||||||
model_config = ConfigDict(from_attributes=True)
|
model_config = ConfigDict(from_attributes=True)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from src.core.interfaces import IUOWDB
|
|||||||
|
|
||||||
|
|
||||||
class BaseService:
|
class BaseService:
|
||||||
session: IUOWDB
|
session: IUOWDB
|
||||||
|
|
||||||
def __init__(self, session: "IUOWDB"):
|
def __init__(self, session: "IUOWDB"):
|
||||||
self.session = session
|
self.session = session
|
||||||
|
|||||||
@@ -38,3 +38,8 @@ class UserService(BaseService):
|
|||||||
)
|
)
|
||||||
await self.session.commit()
|
await self.session.commit()
|
||||||
return User.model_validate(user)
|
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.")
|
||||||
|
|||||||
Reference in New Issue
Block a user