36
36
State ,
37
37
IssueVersion ,
38
38
IssueDescriptionVersion ,
39
+ ProjectMember ,
39
40
)
40
41
41
42
@@ -119,6 +120,17 @@ def validate(self, data):
119
120
raise serializers .ValidationError ("Start date cannot exceed target date" )
120
121
return data
121
122
123
+ def get_valid_assignees (self , assignees , project_id ):
124
+ if not assignees :
125
+ return []
126
+
127
+ return ProjectMember .objects .filter (
128
+ project_id = project_id ,
129
+ role__gte = 15 ,
130
+ is_active = True ,
131
+ member_id__in = assignees
132
+ ).values_list ('member_id' , flat = True )
133
+
122
134
def create (self , validated_data ):
123
135
assignees = validated_data .pop ("assignee_ids" , None )
124
136
labels = validated_data .pop ("label_ids" , None )
@@ -134,27 +146,33 @@ def create(self, validated_data):
134
146
created_by_id = issue .created_by_id
135
147
updated_by_id = issue .updated_by_id
136
148
137
- if assignees is not None and len (assignees ):
149
+ valid_assignee_ids = self .get_valid_assignees (assignees , project_id )
150
+ if valid_assignee_ids is not None and len (valid_assignee_ids ):
138
151
try :
139
152
IssueAssignee .objects .bulk_create (
140
153
[
141
154
IssueAssignee (
142
- assignee = user ,
155
+ assignee_id = user_id ,
143
156
issue = issue ,
144
157
project_id = project_id ,
145
158
workspace_id = workspace_id ,
146
159
created_by_id = created_by_id ,
147
160
updated_by_id = updated_by_id ,
148
161
)
149
- for user in assignees
162
+ for user_id in valid_assignee_ids
150
163
],
151
164
batch_size = 10 ,
152
165
)
153
166
except IntegrityError :
154
167
pass
155
168
else :
156
- # Then assign it to default assignee
157
- if default_assignee_id is not None :
169
+ # Then assign it to default assignee, if it is a valid assignee
170
+ if default_assignee_id is not None and ProjectMember .objects .filter (
171
+ member_id = default_assignee_id ,
172
+ project_id = project_id ,
173
+ role__gte = 15 ,
174
+ is_active = True
175
+ ).exists ():
158
176
try :
159
177
IssueAssignee .objects .create (
160
178
assignee_id = default_assignee_id ,
@@ -198,20 +216,21 @@ def update(self, instance, validated_data):
198
216
created_by_id = instance .created_by_id
199
217
updated_by_id = instance .updated_by_id
200
218
201
- if assignees is not None :
219
+ valid_assignee_ids = self .get_valid_assignees (assignees , project_id )
220
+ if valid_assignee_ids is not None and len (valid_assignee_ids ):
202
221
IssueAssignee .objects .filter (issue = instance ).delete ()
203
222
try :
204
223
IssueAssignee .objects .bulk_create (
205
224
[
206
225
IssueAssignee (
207
- assignee = user ,
226
+ assignee_id = user_id ,
208
227
issue = instance ,
209
228
project_id = project_id ,
210
229
workspace_id = workspace_id ,
211
230
created_by_id = created_by_id ,
212
231
updated_by_id = updated_by_id ,
213
232
)
214
- for user in assignees
233
+ for user_id in valid_assignee_ids
215
234
],
216
235
batch_size = 10 ,
217
236
ignore_conflicts = True ,
0 commit comments