Skip to content

Commit 7219ec5

Browse files
committed
feat: add task assignment creation functionality and streamline task assignment deletion process
1 parent e6c37e9 commit 7219ec5

File tree

7 files changed

+30
-34
lines changed

7 files changed

+30
-34
lines changed

todo/services/task_assignment_service.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from todo.dto.task_assignment_dto import TaskAssignmentResponseDTO, CreateTaskAssignmentDTO
44
from todo.dto.responses.create_task_assignment_response import CreateTaskAssignmentResponse
55
from todo.models.common.pyobjectid import PyObjectId
6+
from todo.models.task_assignment import TaskAssignmentModel
67
from todo.repositories.task_assignment_repository import TaskAssignmentRepository
78
from todo.repositories.task_repository import TaskRepository
89
from todo.repositories.user_repository import UserRepository
@@ -58,6 +59,18 @@ def create_task_assignment(cls, dto: CreateTaskAssignmentDTO, user_id: str) -> C
5859
raise ValueError("Failed to update task assignment")
5960
assignment = updated_assignment
6061

62+
else:
63+
# Create new assignment
64+
task_assignment = TaskAssignmentModel(
65+
task_id=PyObjectId(dto.task_id),
66+
assignee_id=PyObjectId(dto.assignee_id),
67+
user_type=dto.user_type,
68+
created_by=PyObjectId(user_id),
69+
updated_by=None,
70+
team_id=PyObjectId(dto.team_id) if dto.team_id else None,
71+
)
72+
assignment = TaskAssignmentRepository.create(task_assignment)
73+
6174
# If new assignment is to a team, log assignment
6275
if assignment.user_type == "team":
6376
AuditLogRepository.create(
@@ -133,9 +146,7 @@ def get_task_assignment(cls, task_id: str) -> Optional[TaskAssignmentResponseDTO
133146

134147
@classmethod
135148
def delete_task_assignment(cls, task_id: str, user_id: str) -> bool:
136-
assignment = TaskAssignmentRepository.get_by_task_id(task_id)
137-
138-
success = TaskAssignmentRepository.delete_assignment(task_id, user_id)
139-
140-
if success and assignment:
141-
return success
149+
"""
150+
Delete task assignment by task ID.
151+
"""
152+
return TaskAssignmentRepository.delete_assignment(task_id, user_id)

todo/services/task_service.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,6 @@ def update_task_with_assignee_from_dict(cls, task_id: str, validated_data: dict,
435435
and current_task.deferredDetails
436436
):
437437
update_payload["deferredDetails"] = None
438-
cls._remove_deferred_details_from_postgres(task_id)
439438

440439
if validated_data.get("status") == TaskStatus.DEFERRED.value:
441440
update_payload["status"] = current_task.status
@@ -682,7 +681,6 @@ def delete_task(cls, task_id: str, user_id: str) -> None:
682681
deleted_task_model = TaskRepository.delete_by_id(task_id, user_id)
683682
if deleted_task_model is None:
684683
raise TaskNotFoundException(task_id)
685-
686684
return None
687685

688686
@classmethod

todo/services/team_service.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from todo.repositories.audit_log_repository import AuditLogRepository
1414
from todo.dto.responses.error_response import ApiErrorResponse, ApiErrorDetail
1515

16-
1716
DEFAULT_ROLE_ID = "1"
1817

1918

@@ -284,6 +283,7 @@ def join_team_by_invite_code(cls, invite_code: str, user_id: str) -> TeamDTO:
284283
)
285284
UserTeamDetailsRepository.create(user_team)
286285

286+
# NEW: Assign default member role using new role system
287287
cls._assign_user_role(user_id, str(team.id), "member")
288288

289289
# Audit log for team join
@@ -442,6 +442,7 @@ def add_team_members(cls, team_id: str, member_ids: List[str], added_by_user_id:
442442
if new_user_teams:
443443
UserTeamDetailsRepository.create_many(new_user_teams)
444444

445+
# NEW: Assign default member roles using new role system
445446
for member_id in member_ids:
446447
cls._assign_user_role(member_id, team_id, "member")
447448

@@ -479,19 +480,17 @@ class TeamOrUserNotFound(Exception):
479480
def remove_member_from_team(cls, user_id: str, team_id: str, removed_by_user_id: str = None):
480481
from todo.repositories.user_team_details_repository import UserTeamDetailsRepository
481482

482-
user_team_details = UserTeamDetailsRepository.get_by_user_and_team(user_id, team_id)
483-
484483
success = UserTeamDetailsRepository.remove_member_from_team(user_id=user_id, team_id=team_id)
485484
if not success:
486485
raise cls.TeamOrUserNotFound()
487486

488-
if user_team_details:
489-
AuditLogRepository.create(
490-
AuditLogModel(
491-
team_id=PyObjectId(team_id),
492-
action="member_removed_from_team",
493-
performed_by=PyObjectId(removed_by_user_id) if removed_by_user_id else PyObjectId(user_id),
494-
)
487+
# Audit log for team member removal
488+
AuditLogRepository.create(
489+
AuditLogModel(
490+
team_id=PyObjectId(team_id),
491+
action="member_removed_from_team",
492+
performed_by=PyObjectId(removed_by_user_id) if removed_by_user_id else PyObjectId(user_id),
495493
)
494+
)
496495

497496
return True

todo/services/user_role_service.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,16 @@ def assign_role(cls, user_id: str, role_name: str, scope: str, team_id: Optional
3636
role_enum = RoleName(role_name)
3737
scope_enum = RoleScope(scope)
3838

39-
user_role = UserRoleRepository.assign_role(user_id, role_enum, scope_enum, team_id)
40-
41-
if user_role:
42-
return True
39+
UserRoleRepository.assign_role(user_id, role_enum, scope_enum, team_id)
40+
return True
4341
except Exception as e:
4442
logger.error(f"Failed to assign role: {str(e)}")
4543
return False
4644

4745
@classmethod
4846
def remove_role_by_id(cls, user_id: str, role_id: str, scope: str, team_id: Optional[str] = None) -> bool:
4947
try:
50-
user_role = UserRoleRepository.get_by_user_role_scope_team(user_id, role_id, scope, team_id)
51-
52-
success = UserRoleRepository.remove_role_by_id(user_id, role_id, scope, team_id)
53-
54-
if success and user_role:
55-
return success
48+
return UserRoleRepository.remove_role_by_id(user_id, role_id, scope, team_id)
5649
except Exception as e:
5750
logger.error(f"Failed to remove role: {str(e)}")
5851
return False

todo/services/user_service.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ class UserService:
1616
def create_or_update_user(cls, google_user_data: dict) -> UserModel:
1717
try:
1818
cls._validate_google_user_data(google_user_data)
19-
user = UserRepository.create_or_update(google_user_data)
20-
21-
return user
19+
return UserRepository.create_or_update(google_user_data)
2220
except (UserNotFoundException, APIException, DRFValidationError):
2321
raise
2422
except Exception as e:

todo/services/watchlist_service.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,6 @@ def update_task(cls, taskId: ObjectId, dto: UpdateWatchlistDTO, userId: ObjectId
137137
if not updated_watchlist:
138138
raise TaskNotFoundException(taskId)
139139

140-
return CreateWatchlistResponse(data=updated_watchlist)
141-
142140
@classmethod
143141
def _prepare_label_dtos(cls, label_ids: list[str]) -> list[LabelDTO]:
144142
object_ids = [ObjectId(id) for id in label_ids] # Convert here!

todo/views/task_assignment.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,6 @@ def patch(self, request: Request, task_id: str):
238238
{"error": "Failed to update assignment. Check server logs for details."},
239239
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
240240
)
241-
242241
except Exception as e:
243242
print(f"DEBUG: Exception in update_executor: {str(e)}")
244243
import traceback

0 commit comments

Comments
 (0)