* refactor: folder structure for urls * chore: deleted the urls file * chore: proper naming for urls * chore: reset password url * dev: create refresh token endpoint and endpoint to get settings for user * dev: workspace member me serializer * dev: remove extra fields from project list and retrieve endpoints * dev: update the project list endpoint with member details and deploy boolean * dev: enable user favorite project endpoint and remove is_favorite from project list * dev: analytics refactoring * dev: revert is_favorite settings * dev: create new serializer for project list and add pagination from projects * dev: fix analytics api * dev: module and cycle * dev: update error message, fix module analytics and add null check for labels * dev: member serializer * dev: dynamic base serializer * dev: remove view issues endpoint * dev: url pattern updates * dev: add comments to delete this file * dev: last workspace id * dev: analytics export * dev: export analytics validation * dev: update python runtime * dev: update notification endpoints * dev: cycle and validation fix * dev: issue activity validation when creating updating and deleting issue and comments * dev: update issue activity logging for link and reactions * dev: update module issue activity logging * dev: update module issue activity --------- Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
163 lines
4.3 KiB
Python
163 lines
4.3 KiB
Python
# Third party imports
|
|
from rest_framework import serializers
|
|
|
|
# Module import
|
|
from .base import BaseSerializer
|
|
from plane.db.models import User, Workspace, WorkspaceMemberInvite
|
|
|
|
|
|
class UserSerializer(BaseSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = "__all__"
|
|
read_only_fields = [
|
|
"id",
|
|
"created_at",
|
|
"updated_at",
|
|
"is_superuser",
|
|
"is_staff",
|
|
"last_active",
|
|
"last_login_time",
|
|
"last_logout_time",
|
|
"last_login_ip",
|
|
"last_logout_ip",
|
|
"last_login_uagent",
|
|
"token_updated_at",
|
|
"is_onboarded",
|
|
"is_bot",
|
|
]
|
|
extra_kwargs = {"password": {"write_only": True}}
|
|
|
|
# If the user has already filled first name or last name then he is onboarded
|
|
def get_is_onboarded(self, obj):
|
|
return bool(obj.first_name) or bool(obj.last_name)
|
|
|
|
|
|
class UserMeSerializer(BaseSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = [
|
|
"id",
|
|
"avatar",
|
|
"cover_image",
|
|
"date_joined",
|
|
"display_name",
|
|
"email",
|
|
"first_name",
|
|
"last_name",
|
|
"is_active",
|
|
"is_bot",
|
|
"is_email_verified",
|
|
"is_managed",
|
|
"is_onboarded",
|
|
"is_tour_completed",
|
|
"mobile_number",
|
|
"role",
|
|
"onboarding_step",
|
|
"user_timezone",
|
|
"username",
|
|
"theme",
|
|
"last_workspace_id",
|
|
]
|
|
read_only_fields = fields
|
|
|
|
|
|
class UserMeSettingsSerializer(BaseSerializer):
|
|
workspace = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = [
|
|
"id",
|
|
"email",
|
|
"workspace",
|
|
]
|
|
read_only_fields = fields
|
|
|
|
def get_workspace(self, obj):
|
|
workspace_invites = WorkspaceMemberInvite.objects.filter(
|
|
email=obj.email
|
|
).count()
|
|
if obj.last_workspace_id is not None:
|
|
workspace = Workspace.objects.get(
|
|
pk=obj.last_workspace_id, workspace_member__member=obj.id
|
|
)
|
|
return {
|
|
"last_workspace_id": obj.last_workspace_id,
|
|
"last_workspace_slug": workspace.slug,
|
|
"fallback_workspace_id": obj.last_workspace_id,
|
|
"fallback_workspace_slug": workspace.slug,
|
|
"invites": workspace_invites,
|
|
}
|
|
else:
|
|
fallback_workspace = (
|
|
Workspace.objects.filter(workspace_member__member_id=obj.id)
|
|
.order_by("created_at")
|
|
.first()
|
|
)
|
|
return {
|
|
"last_workspace_id": None,
|
|
"last_workspace_slug": None,
|
|
"fallback_workspace_id": fallback_workspace.id
|
|
if fallback_workspace is not None
|
|
else None,
|
|
"fallback_workspace_slug": fallback_workspace.slug
|
|
if fallback_workspace is not None
|
|
else None,
|
|
"invites": workspace_invites,
|
|
}
|
|
|
|
|
|
class UserLiteSerializer(BaseSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = [
|
|
"id",
|
|
"first_name",
|
|
"last_name",
|
|
"avatar",
|
|
"is_bot",
|
|
"display_name",
|
|
]
|
|
read_only_fields = [
|
|
"id",
|
|
"is_bot",
|
|
]
|
|
|
|
|
|
class UserAdminLiteSerializer(BaseSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = [
|
|
"id",
|
|
"first_name",
|
|
"last_name",
|
|
"avatar",
|
|
"is_bot",
|
|
"display_name",
|
|
"email",
|
|
]
|
|
read_only_fields = [
|
|
"id",
|
|
"is_bot",
|
|
]
|
|
|
|
|
|
class ChangePasswordSerializer(serializers.Serializer):
|
|
model = User
|
|
|
|
"""
|
|
Serializer for password change endpoint.
|
|
"""
|
|
old_password = serializers.CharField(required=True)
|
|
new_password = serializers.CharField(required=True)
|
|
|
|
|
|
class ResetPasswordSerializer(serializers.Serializer):
|
|
model = User
|
|
|
|
"""
|
|
Serializer for password change endpoint.
|
|
"""
|
|
new_password = serializers.CharField(required=True)
|
|
confirm_password = serializers.CharField(required=True)
|