Skip to content

Commit bd88687

Browse files
committed
feat(remove-from-member): add serializer for path params validation
1 parent 4b4ae55 commit bd88687

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from rest_framework import serializers
2+
from bson import ObjectId
3+
from todo.constants.messages import ValidationErrors
4+
5+
6+
class RemoveFromTeamSerializer(serializers.Serializer):
7+
team_id = serializers.CharField()
8+
user_id = serializers.CharField()
9+
10+
def validate_team_id(self, value):
11+
if not ObjectId.is_valid(value):
12+
raise serializers.ValidationError(ValidationErrors.INVALID_OBJECT_ID.format(value))
13+
return value
14+
15+
def validate_user_id(self, value):
16+
if not ObjectId.is_valid(value):
17+
raise serializers.ValidationError(ValidationErrors.INVALID_OBJECT_ID.format(value))
18+
return value

todo/views/team.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
CannotRemoveOwnerException,
2828
CannotRemoveTeamPOCException,
2929
)
30+
from todo.serializers.remove_from_team_serializer import RemoveFromTeamSerializer
3031

3132

3233
class TeamListView(APIView):
@@ -476,10 +477,37 @@ class RemoveTeamMemberView(APIView):
476477
},
477478
tags=["teams"],
478479
)
480+
def _handle_validation_errors(self, errors):
481+
"""Handle validation errors and return appropriate response."""
482+
formatted = []
483+
for field, msgs in errors.items():
484+
for msg in msgs:
485+
formatted.append(
486+
{
487+
"source": field,
488+
"title": "Invalid value",
489+
"detail": str(msg),
490+
}
491+
)
492+
return Response(
493+
{
494+
"statusCode": 400,
495+
"message": "Validation Error",
496+
"errors": formatted,
497+
"authenticated": getattr(self.request, "user", None) is not None,
498+
},
499+
status=400,
500+
)
501+
479502
def delete(self, request, team_id, user_id):
480503
print(f"DEBUG: RemoveTeamMemberView.delete called with team_id={team_id}, user_id={user_id}")
481504
from todo.services.team_service import TeamService
482505

506+
serializer = RemoveFromTeamSerializer(data={"team_id": team_id, "user_id": user_id})
507+
508+
if not serializer.is_valid():
509+
return self._handle_validation_errors(serializer.errors)
510+
483511
try:
484512
# Pass the user performing the removal (request.user_id) and the user being removed (user_id)
485513
TeamService.remove_member_from_team(user_id=user_id, team_id=team_id, removed_by_user_id=request.user_id)

0 commit comments

Comments
 (0)