mirror of
https://github.com/makeplane/plane
synced 2025-08-07 19:59:33 +00:00
88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
from rest_framework import serializers
|
|
|
|
from plane.db.models import UserFavorite, Cycle, Module, Issue, IssueView, Page, Project
|
|
|
|
|
|
class ProjectFavoriteLiteSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Project
|
|
fields = ["id", "name", "logo_props"]
|
|
|
|
|
|
class PageFavoriteLiteSerializer(serializers.ModelSerializer):
|
|
project_id = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Page
|
|
fields = ["id", "name", "logo_props", "project_id"]
|
|
|
|
def get_project_id(self, obj):
|
|
project = (
|
|
obj.projects.first()
|
|
) # This gets the first project related to the Page
|
|
return project.id if project else None
|
|
|
|
|
|
class CycleFavoriteLiteSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Cycle
|
|
fields = ["id", "name", "logo_props", "project_id"]
|
|
|
|
|
|
class ModuleFavoriteLiteSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Module
|
|
fields = ["id", "name", "logo_props", "project_id"]
|
|
|
|
|
|
class ViewFavoriteSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = IssueView
|
|
fields = ["id", "name", "logo_props", "project_id"]
|
|
|
|
|
|
def get_entity_model_and_serializer(entity_type):
|
|
entity_map = {
|
|
"cycle": (Cycle, CycleFavoriteLiteSerializer),
|
|
"issue": (Issue, None),
|
|
"module": (Module, ModuleFavoriteLiteSerializer),
|
|
"view": (IssueView, ViewFavoriteSerializer),
|
|
"page": (Page, PageFavoriteLiteSerializer),
|
|
"project": (Project, ProjectFavoriteLiteSerializer),
|
|
"folder": (None, None),
|
|
}
|
|
return entity_map.get(entity_type, (None, None))
|
|
|
|
|
|
class UserFavoriteSerializer(serializers.ModelSerializer):
|
|
entity_data = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = UserFavorite
|
|
fields = [
|
|
"id",
|
|
"entity_type",
|
|
"entity_identifier",
|
|
"entity_data",
|
|
"name",
|
|
"is_folder",
|
|
"sequence",
|
|
"parent",
|
|
"workspace_id",
|
|
"project_id",
|
|
]
|
|
read_only_fields = ["workspace", "created_by", "updated_by"]
|
|
|
|
def get_entity_data(self, obj):
|
|
entity_type = obj.entity_type
|
|
entity_identifier = obj.entity_identifier
|
|
|
|
entity_model, entity_serializer = get_entity_model_and_serializer(entity_type)
|
|
if entity_model and entity_serializer:
|
|
try:
|
|
entity = entity_model.objects.get(pk=entity_identifier)
|
|
return entity_serializer(entity).data
|
|
except entity_model.DoesNotExist:
|
|
return None
|
|
return None
|