1+ from django .apps import apps
12from rest_framework import serializers
23
34from invites .models import Invite
5+ from projects .models import Collaborator
46from projects .serializers import ProjectListSerializer
57from users .serializers import UserDetailSerializer
68
@@ -18,6 +20,48 @@ class Meta:
1820 "is_accepted" ,
1921 ]
2022
23+ def validate (self , attrs ):
24+ project = attrs ["project" ]
25+ user = attrs ["user" ]
26+
27+ if project .leader_id == user .id :
28+ raise serializers .ValidationError (
29+ {"user" : "Пользователь уже является лидером проекта." }
30+ )
31+
32+ if Collaborator .objects .filter (project = project , user = user ).exists ():
33+ raise serializers .ValidationError (
34+ {"user" : "Пользователь уже состоит в проекте." }
35+ )
36+
37+ if Invite .objects .filter (
38+ project = project , user = user , is_accepted__isnull = True
39+ ).exists ():
40+ raise serializers .ValidationError (
41+ {"user" : "У пользователя уже есть активное приглашение в этот проект." }
42+ )
43+
44+ link = project .program_links .select_related ("partner_program" ).first ()
45+ if link :
46+ PartnerProgramUserProfile = apps .get_model (
47+ "partner_programs" , "PartnerProgramUserProfile"
48+ )
49+ is_participant = PartnerProgramUserProfile .objects .filter (
50+ user_id = user .id ,
51+ partner_program_id = link .partner_program_id ,
52+ ).exists ()
53+ if not is_participant :
54+ raise serializers .ValidationError (
55+ {
56+ "user" : (
57+ "Нельзя пригласить пользователя: проект относится к программе, "
58+ "а пользователь не является её участником."
59+ )
60+ }
61+ )
62+
63+ return attrs
64+
2165
2266class InviteDetailSerializer (serializers .ModelSerializer [Invite ]):
2367 user = UserDetailSerializer (many = False , read_only = True )
0 commit comments