Skip to content

Commit 447d635

Browse files
feat(filters): Routes of filters
Routes dedicated to filter the information about tasks from projects.
1 parent cc4e939 commit 447d635

File tree

1 file changed

+62
-18
lines changed

1 file changed

+62
-18
lines changed

src/routes/filter_routes.py

Lines changed: 62 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from src.models.task_model import Task
1010
from src.schemas.projects.projects_schema import ProjectResponse
1111
from src.schemas.tasks.tasks_schema import TaskResponse
12-
from src.utils.security import get_current_user
12+
from src.utils.security import get_current_user
1313

1414
router = APIRouter(
1515
prefix="/filters",
@@ -26,26 +26,33 @@ def filter_tasks(
2626
current_user: User = Depends(get_current_user)
2727
):
2828
"""
29-
Retorna as tarefas pertencentes aos projetos do usuário logado.
30-
É possível aplicar filtros por status, lembrete e data de vencimento.
29+
Return tasks filtered by completion status, reminder flag, and due date,
30+
only for tasks belonging to projects owned by the authenticated user.
31+
32+
Args:
33+
completed (Optional[bool]): Filter by completion status.
34+
reminder (Optional[bool]): Filter by reminder flag.
35+
due_before (Optional[date]): Filter tasks due before this date.
36+
db (Session): Database session.
37+
current_user (User): Authenticated user.
38+
39+
Returns:
40+
List[Task]: List of filtered tasks.
41+
42+
Raises:
43+
HTTPException: If no tasks are found.
3144
"""
3245

33-
# Busca apenas as tarefas de projetos pertencentes ao usuário autenticado
3446
query = (
3547
db.query(Task)
3648
.join(Project, Project.id == Task.project_id)
37-
.filter(Project.owner_id == current_user.id)
49+
.filter(Project.user_id == current_user.id)
3850
)
3951

40-
# Filtro por status de conclusão
4152
if completed is not None:
4253
query = query.filter(Task.completed == completed)
43-
44-
# Filtro por lembrete
4554
if reminder is not None:
4655
query = query.filter(Task.reminder == reminder)
47-
48-
# Filtro por data de entrega
4956
if due_before:
5057
query = query.filter(Task.due_date <= due_before)
5158

@@ -58,10 +65,22 @@ def get_projects_by_user(
5865
current_user: User = Depends(get_current_user)
5966
):
6067
"""
61-
Retorna todos os projetos pertencentes ao usuário autenticado.
68+
Return all projects belonging to the authenticated user.
69+
70+
Args:
71+
db (Session): Database session.
72+
current_user (User): Authenticated user.
73+
74+
Returns:
75+
List[Project]: List of projects owned by the user.
76+
77+
Raises:
78+
HTTPException: If no projects are found.
6279
"""
6380

64-
projects = db.query(Project).filter(Project.owner_id == current_user.id).all()
81+
projects = db.query(Project).filter(Project.user_id == current_user.id).all()
82+
if not projects:
83+
raise HTTPException(status_code=404, detail="No projects found.")
6584
return projects
6685

6786

@@ -72,11 +91,22 @@ def get_tasks_by_project(
7291
current_user: User = Depends(get_current_user)
7392
):
7493
"""
75-
Retorna todas as tarefas de um projeto específico,
76-
desde que o projeto pertença ao usuário autenticado.
94+
Return all tasks for a specific project,
95+
only if the project belongs to the authenticated user.
96+
97+
Args:
98+
project_id (int): ID of the project.
99+
db (Session): Database session.
100+
current_user (User): Authenticated user.
101+
102+
Returns:
103+
List[Task]: List of tasks for the specified project.
104+
105+
Raises:
106+
HTTPException: If the project is not found or not owned by the user.
77107
"""
78108

79-
project = db.query(Project).filter(Project.id == project_id, Project.owner_id == current_user.id).first()
109+
project = db.query(Project).filter(Project.id == project_id, Project.user_id == current_user.id).first()
80110
if not project:
81111
raise HTTPException(status_code=404, detail="Project not found or not owned by user")
82112

@@ -93,14 +123,28 @@ def advanced_filter_tasks(
93123
current_user: User = Depends(get_current_user)
94124
):
95125
"""
96-
Filtro avançado de tarefas relacionadas ao usuário autenticado.
97-
Permite combinar múltiplos parâmetros de busca.
126+
Advanced filtering for tasks related to the authenticated user.
127+
Allows combining multiple search parameters.
128+
129+
Args:
130+
completed (Optional[bool]): Filter by completion status.
131+
reminder (Optional[bool]): Filter by reminder flag.
132+
project_id (Optional[int]): Filter by project ID.
133+
due_before (Optional[date]): Filter tasks due before this date.
134+
db (Session): Database session.
135+
current_user (User): Authenticated user.
136+
137+
Returns:
138+
List[Task]: List of filtered tasks.
139+
140+
Raises:
141+
HTTPException: If no tasks are found.
98142
"""
99143

100144
query = (
101145
db.query(Task)
102146
.join(Project, Project.id == Task.project_id)
103-
.filter(Project.owner_id == current_user.id)
147+
.filter(Project.user_id == current_user.id)
104148
)
105149

106150
if completed is not None:

0 commit comments

Comments
 (0)