|
2 | 2 | from typing import List
|
3 | 3 | from bson import ObjectId
|
4 | 4 | from pymongo import ReturnDocument
|
5 |
| -import logging |
6 | 5 |
|
7 | 6 | from todo.exceptions.task_exceptions import TaskNotFoundException
|
8 | 7 | from todo.models.task import TaskModel
|
9 | 8 | from todo.repositories.common.mongo_repository import MongoRepository
|
10 | 9 | from todo.repositories.task_assignment_repository import TaskAssignmentRepository
|
11 | 10 | from todo.constants.messages import ApiErrors, RepositoryErrors
|
12 | 11 | from todo.constants.task import SORT_FIELD_PRIORITY, SORT_FIELD_ASSIGNEE, SORT_ORDER_DESC, TaskStatus
|
| 12 | +from todo.repositories.team_repository import UserTeamDetailsRepository |
13 | 13 |
|
14 | 14 |
|
15 | 15 | class TaskRepository(MongoRepository):
|
16 | 16 | collection_name = TaskModel.collection_name
|
17 | 17 |
|
| 18 | + @classmethod |
| 19 | + def _get_team_task_ids(cls, team_id: str) -> List[ObjectId]: |
| 20 | + team_tasks = TaskAssignmentRepository.get_collection().find({"team_id": team_id, "is_active": True}) |
| 21 | + team_task_ids = [ObjectId(task["task_id"]) for task in team_tasks] |
| 22 | + return list(set(team_task_ids)) |
| 23 | + |
18 | 24 | @classmethod
|
19 | 25 | def _build_status_filter(cls, status_filter: str = None) -> dict:
|
20 | 26 | now = datetime.now(timezone.utc)
|
@@ -60,17 +66,12 @@ def list(
|
60 | 66 | status_filter: str = None,
|
61 | 67 | ) -> List[TaskModel]:
|
62 | 68 | tasks_collection = cls.get_collection()
|
63 |
| - logger = logging.getLogger(__name__) |
64 | 69 |
|
65 | 70 | base_filter = cls._build_status_filter(status_filter)
|
66 | 71 |
|
67 | 72 | if team_id:
|
68 |
| - logger.debug(f"TaskRepository.list: team_id={team_id}") |
69 |
| - team_assignments = TaskAssignmentRepository.get_by_assignee_id(team_id, "team") |
70 |
| - team_task_ids = [assignment.task_id for assignment in team_assignments] |
71 |
| - logger.debug(f"TaskRepository.list: team_task_ids={team_task_ids}") |
72 |
| - query_filter = {"$and": [base_filter, {"_id": {"$in": team_task_ids}}]} |
73 |
| - logger.debug(f"TaskRepository.list: query_filter={query_filter}") |
| 73 | + all_team_task_ids = cls._get_team_task_ids(team_id) |
| 74 | + query_filter = {"$and": [base_filter, {"_id": {"$in": all_team_task_ids}}]} |
74 | 75 | elif user_id:
|
75 | 76 | assigned_task_ids = cls._get_assigned_task_ids_for_user(user_id)
|
76 | 77 | query_filter = {"$and": [base_filter, {"_id": {"$in": assigned_task_ids}}]}
|
@@ -98,7 +99,7 @@ def _get_assigned_task_ids_for_user(cls, user_id: str) -> List[ObjectId]:
|
98 | 99 | direct_task_ids = [assignment.task_id for assignment in direct_assignments]
|
99 | 100 |
|
100 | 101 | # Get teams where user is a member
|
101 |
| - from todo.repositories.team_repository import UserTeamDetailsRepository, TeamRepository |
| 102 | + from todo.repositories.team_repository import TeamRepository |
102 | 103 |
|
103 | 104 | user_teams = UserTeamDetailsRepository.get_by_user_id(user_id)
|
104 | 105 | team_ids = [str(team.team_id) for team in user_teams]
|
@@ -128,9 +129,9 @@ def count(cls, user_id: str = None, team_id: str = None, status_filter: str = No
|
128 | 129 | base_filter = cls._build_status_filter(status_filter)
|
129 | 130 |
|
130 | 131 | if team_id:
|
131 |
| - team_assignments = TaskAssignmentRepository.get_by_assignee_id(team_id, "team") |
132 |
| - team_task_ids = [assignment.task_id for assignment in team_assignments] |
133 |
| - query_filter = {"$and": [base_filter, {"_id": {"$in": team_task_ids}}]} |
| 132 | + all_team_task_ids = cls._get_team_task_ids(team_id) |
| 133 | + query_filter = {"$and": [base_filter, {"_id": {"$in": all_team_task_ids}}]} |
| 134 | + |
134 | 135 | elif user_id:
|
135 | 136 | assigned_task_ids = cls._get_assigned_task_ids_for_user(user_id)
|
136 | 137 | query_filter = {
|
|
0 commit comments