Skip to content

Commit c5a607c

Browse files
feat: enhance CycleCreateSerializer to include ownership assignment
* Added 'owned_by' field to CycleCreateSerializer to specify the user who owns the cycle. * Updated CycleListCreateAPIEndpoint to remove redundant ownership assignment logic, relying on the serializer to handle default ownership. * Ensured that if 'owned_by' is not provided, it defaults to the current user during cycle creation.
1 parent bb9f4fa commit c5a607c

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

apps/api/plane/api/serializers/cycle.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
# Module imports
66
from .base import BaseSerializer
7-
from plane.db.models import Cycle, CycleIssue
7+
from plane.db.models import Cycle, CycleIssue, User
88
from plane.utils.timezone_converter import convert_to_utc
99

1010

@@ -16,6 +16,13 @@ class CycleCreateSerializer(BaseSerializer):
1616
and UTC normalization for time-bound iteration planning and sprint management.
1717
"""
1818

19+
owned_by = serializers.PrimaryKeyRelatedField(
20+
queryset=User.objects.all(),
21+
required=False,
22+
allow_null=True,
23+
help_text="User who owns the cycle. If not provided, defaults to the current user.",
24+
)
25+
1926
def __init__(self, *args, **kwargs):
2027
super().__init__(*args, **kwargs)
2128
project = self.context.get("project")
@@ -77,6 +84,10 @@ def validate(self, data):
7784
date=str(data.get("end_date", None).date()),
7885
project_id=project_id,
7986
)
87+
88+
if not data.get("owned_by"):
89+
data["owned_by"] = self.context["request"].user
90+
8091
return data
8192

8293

apps/api/plane/api/views/cycle.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -316,12 +316,7 @@ def post(self, request, slug, project_id):
316316
and request.data.get("end_date", None) is not None
317317
):
318318

319-
# If owned_by is not provided, set it to the current user
320-
data = request.data
321-
if not data.get("owned_by"):
322-
data["owned_by"] = request.user.id
323-
324-
serializer = CycleCreateSerializer(data=data)
319+
serializer = CycleCreateSerializer(data=request.data, context={"request": request})
325320
if serializer.is_valid():
326321
if (
327322
request.data.get("external_id")
@@ -346,7 +341,7 @@ def post(self, request, slug, project_id):
346341
},
347342
status=status.HTTP_409_CONFLICT,
348343
)
349-
serializer.save(project_id=project_id, owned_by=request.user)
344+
serializer.save(project_id=project_id)
350345
# Send the model activity
351346
model_activity.delay(
352347
model_name="cycle",
@@ -540,7 +535,7 @@ def patch(self, request, slug, project_id, pk):
540535
status=status.HTTP_400_BAD_REQUEST,
541536
)
542537

543-
serializer = CycleUpdateSerializer(cycle, data=request.data, partial=True)
538+
serializer = CycleUpdateSerializer(cycle, data=request.data, partial=True, context={"request": request})
544539
if serializer.is_valid():
545540
if (
546541
request.data.get("external_id")

0 commit comments

Comments
 (0)