* chore: workspace user favorites * chore: added project id in entity type * chore: removed the extra key * chore: removed the project member filter * chore: updated the project permission layer * chore: updated the workspace group favorite filter * fix: project favorite toggle * chore: Fav feature * fix: build errors + added navigation * fix: added remove entity icon * fix: nomenclature * chore: hard delete favorites * fix: review changes * fix: added optimistic addition to the store * chore: user favorite hard delete * fix: linting fixed --------- Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
101 lines
2.7 KiB
Python
101 lines
2.7 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
|