33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
from rest_framework.exceptions import ValidationError
|
|
from apps.projects.models import ProjectMembership
|
|
|
|
def add_project_member(project, user_id, role):
|
|
"""
|
|
Adds a user to a project. Ensures no duplicate active memberships exist.
|
|
"""
|
|
if ProjectMembership.objects.filter(project=project, user_id=user_id, is_deleted=False).exists():
|
|
raise ValidationError({"user_id": "This user is already a member of the project."})
|
|
|
|
return ProjectMembership.objects.create(
|
|
project=project,
|
|
user_id=user_id,
|
|
role=role,
|
|
is_active=True
|
|
)
|
|
|
|
def update_project_member(membership, **kwargs):
|
|
"""
|
|
Updates a project membership (e.g., changing role or active status).
|
|
"""
|
|
update_fields = []
|
|
for field, value in kwargs.items():
|
|
if hasattr(membership, field) and getattr(membership, field) != value:
|
|
setattr(membership, field, value)
|
|
update_fields.append(field)
|
|
|
|
if update_fields:
|
|
update_fields.append("updated_at")
|
|
membership.save(update_fields=update_fields)
|
|
|
|
return membership
|