2026-04-14 10:07:27 +00:00
|
|
|
from rest_framework import serializers
|
2026-04-14 11:46:52 +00:00
|
|
|
from .models import DiaryEntry, DailyProgress, Experience, Task, Comment
|
|
|
|
|
|
|
|
|
|
class CommentSerializer(serializers.ModelSerializer):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Comment
|
|
|
|
|
fields = '__all__'
|
|
|
|
|
read_only_fields = ['created_at']
|
2026-04-14 11:57:24 +00:00
|
|
|
extra_kwargs = {
|
|
|
|
|
'content': {'required': False},
|
|
|
|
|
'score': {'required': False}
|
|
|
|
|
}
|
2026-04-14 10:07:27 +00:00
|
|
|
|
|
|
|
|
class ExperienceSerializer(serializers.ModelSerializer):
|
2026-04-14 11:35:42 +00:00
|
|
|
category_display = serializers.CharField(source='get_category_display', read_only=True)
|
2026-04-14 11:46:52 +00:00
|
|
|
comments = CommentSerializer(many=True, read_only=True, source='comment_set')
|
2026-04-14 11:35:42 +00:00
|
|
|
|
2026-04-14 10:07:27 +00:00
|
|
|
class Meta:
|
|
|
|
|
model = Experience
|
|
|
|
|
fields = '__all__'
|
|
|
|
|
|
|
|
|
|
class DailyProgressSerializer(serializers.ModelSerializer):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DailyProgress
|
|
|
|
|
fields = '__all__'
|
|
|
|
|
|
2026-04-14 11:35:42 +00:00
|
|
|
class TaskSimpleSerializer(serializers.ModelSerializer):
|
|
|
|
|
status_display = serializers.CharField(source='get_status_display', read_only=True)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Task
|
|
|
|
|
fields = ['id', 'title', 'status', 'status_display', 'progress_percent']
|
|
|
|
|
|
2026-04-14 10:07:27 +00:00
|
|
|
class DiaryEntrySerializer(serializers.ModelSerializer):
|
|
|
|
|
progresses = DailyProgressSerializer(many=True, read_only=True)
|
2026-04-14 11:35:42 +00:00
|
|
|
linked_tasks = TaskSimpleSerializer(many=True, read_only=True)
|
|
|
|
|
experiences = ExperienceSerializer(many=True, read_only=True)
|
2026-04-14 11:46:52 +00:00
|
|
|
comments = CommentSerializer(many=True, read_only=True, source='comment_set')
|
2026-04-14 11:35:42 +00:00
|
|
|
|
2026-04-14 10:07:27 +00:00
|
|
|
class Meta:
|
|
|
|
|
model = DiaryEntry
|
|
|
|
|
fields = '__all__'
|
2026-04-14 10:16:14 +00:00
|
|
|
|
|
|
|
|
class TaskSerializer(serializers.ModelSerializer):
|
|
|
|
|
status_display = serializers.CharField(source='get_status_display', read_only=True)
|
|
|
|
|
priority_display = serializers.CharField(source='get_priority_display', read_only=True)
|
2026-04-14 11:35:42 +00:00
|
|
|
diary_entries = serializers.SerializerMethodField()
|
2026-04-14 11:46:52 +00:00
|
|
|
comments = CommentSerializer(many=True, read_only=True, source='comment_set')
|
2026-04-14 11:35:42 +00:00
|
|
|
|
|
|
|
|
def get_diary_entries(self, obj):
|
2026-04-14 11:46:52 +00:00
|
|
|
entries = obj.diary_entries.all()[:5]
|
2026-04-14 11:35:42 +00:00
|
|
|
return DiaryEntrySerializer(entries, many=True).data
|
2026-04-14 10:16:14 +00:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Task
|
|
|
|
|
fields = '__all__'
|
|
|
|
|
read_only_fields = ['completed_at', 'created_at', 'updated_at']
|