5 from django.conf import settings |
5 from django.conf import settings |
6 from guardian.shortcuts import assign_perm |
6 from guardian.shortcuts import assign_perm |
7 from renkanmanager.models import Renkan, Workspace, Revision |
7 from renkanmanager.models import Renkan, Workspace, Revision |
8 from rest_framework import serializers |
8 from rest_framework import serializers |
9 |
9 |
|
10 RENKAN_USER_DISPLAY_FIELD = getattr(settings, "RENKAN_USER_DISPLAY_FIELD", get_user_model().USERNAME_FIELD) |
10 |
11 |
11 class RenkanSerializer(serializers.Serializer): |
12 class RenkanSerializer(serializers.Serializer): |
12 id = serializers.ReadOnlyField(source="renkan_guid") |
13 id = serializers.ReadOnlyField(source="renkan_guid") |
13 current_revision_id = serializers.ReadOnlyField(source="current_revision_guid") |
14 current_revision_id = serializers.ReadOnlyField(source="current_revision_guid") |
14 workspace_id = serializers.CharField(source="workspace_guid", required=False) |
15 workspace_id = serializers.CharField(source="workspace_guid", required=False) |
15 source_revision_id = serializers.CharField(source="source_revision_guid", required=False) |
16 source_revision_id = serializers.CharField(source="source_revision_guid", required=False) |
16 revision_count = serializers.ReadOnlyField() |
17 revision_count = serializers.ReadOnlyField() |
17 created_by = serializers.SlugRelatedField(source="creator", slug_field=settings.RENKAN_USER_DISPLAY_FIELD, read_only=True) |
18 created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True) |
18 last_updated_by = serializers.SerializerMethodField("get_current_revision_last_updator") |
19 last_updated_by = serializers.SerializerMethodField("get_current_revision_last_updator") |
19 title = serializers.CharField(required=False) |
20 title = serializers.CharField(required=False) |
20 content = serializers.JSONField(required=False) |
21 content = serializers.JSONField(required=False) |
21 creation_date = serializers.ReadOnlyField() |
22 creation_date = serializers.ReadOnlyField() |
22 modification_date = serializers.SerializerMethodField("get_current_revision_modification_date") |
23 modification_date = serializers.SerializerMethodField("get_current_revision_modification_date") |
23 create_new_revision = serializers.BooleanField(write_only=True, required=False) # only used for updating |
24 create_new_revision = serializers.BooleanField(write_only=True, required=False) # only used for updating |
24 |
25 |
25 # ADD ERROR HANDLING |
26 # ADD ERROR HANDLING |
26 def get_current_revision_last_updator(self, renkan): |
27 def get_current_revision_last_updator(self, renkan): |
27 current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid) |
28 current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid) |
28 return getattr(current_revision.last_updated_by, settings.RENKAN_USER_DISPLAY_FIELD) |
29 return getattr(current_revision.last_updated_by, RENKAN_USER_DISPLAY_FIELD) |
29 |
30 |
30 |
31 |
31 def get_current_revision_modification_date(self, renkan): |
32 def get_current_revision_modification_date(self, renkan): |
32 current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid) |
33 current_revision = Revision.objects.get(revision_guid = renkan.current_revision_guid) |
33 return current_revision.modification_date |
34 return current_revision.modification_date |
129 workspace_id = serializers.SerializerMethodField("get_related_workspace_guid") |
130 workspace_id = serializers.SerializerMethodField("get_related_workspace_guid") |
130 title = serializers.ReadOnlyField() |
131 title = serializers.ReadOnlyField() |
131 content = serializers.JSONField(read_only=True) |
132 content = serializers.JSONField(read_only=True) |
132 renkan_created_by = serializers.SerializerMethodField("get_related_renkan_creator") |
133 renkan_created_by = serializers.SerializerMethodField("get_related_renkan_creator") |
133 renkan_creation_date = serializers.SerializerMethodField("get_related_renkan_creation_date") |
134 renkan_creation_date = serializers.SerializerMethodField("get_related_renkan_creation_date") |
134 revision_created_by = serializers.SlugRelatedField(source="creator", slug_field=settings.RENKAN_USER_DISPLAY_FIELD, read_only=True) |
135 revision_created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True) |
135 revision_last_updated_by = serializers.StringRelatedField(source="last_updated_by") |
136 revision_last_updated_by = serializers.StringRelatedField(source="last_updated_by") |
136 revision_modification_date = serializers.ReadOnlyField(source="modification_date") |
137 revision_modification_date = serializers.ReadOnlyField(source="modification_date") |
137 |
138 |
138 def get_related_workspace_guid(self, revision): |
139 def get_related_workspace_guid(self, revision): |
139 parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid) |
140 parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid) |
140 return parent_renkan.workspace_guid |
141 return parent_renkan.workspace_guid |
141 |
142 |
142 def get_related_renkan_creator(self, revision): |
143 def get_related_renkan_creator(self, revision): |
143 parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid) |
144 parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid) |
144 return getattr(parent_renkan.creator, settings.RENKAN_USER_DISPLAY_FIELD) |
145 return getattr(parent_renkan.creator, RENKAN_USER_DISPLAY_FIELD) |
145 |
146 |
146 def get_related_renkan_creation_date(self, revision): |
147 def get_related_renkan_creation_date(self, revision): |
147 parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid) |
148 parent_renkan = Renkan.objects.get(renkan_guid = revision.parent_renkan_guid) |
148 return parent_renkan.creation_date |
149 return parent_renkan.creation_date |
149 |
150 |
150 |
151 |
151 class WorkspaceSerializer(serializers.Serializer): |
152 class WorkspaceSerializer(serializers.Serializer): |
152 id = serializers.ReadOnlyField(source="workspace_guid") |
153 id = serializers.ReadOnlyField(source="workspace_guid") |
153 workspace_created_by = serializers.SlugRelatedField(source="creator", slug_field=settings.RENKAN_USER_DISPLAY_FIELD, read_only=True) |
154 workspace_created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True) |
154 creation_date = serializers.ReadOnlyField() |
155 creation_date = serializers.ReadOnlyField() |
155 renkan_count = serializers.ReadOnlyField() |
156 renkan_count = serializers.ReadOnlyField() |
156 title = serializers.CharField() |
157 title = serializers.CharField() |
157 |
158 |
158 def create(self, validated_data): |
159 def create(self, validated_data): |