Python · 1583 bytes Raw Blame History
1 # apps/trees/serializers.py
2 from rest_framework import serializers
3 from .models import FileSystemTree, DirectoryNode, GameSession
4
5
6 class DirectoryNodeSerializer(serializers.ModelSerializer):
7 class Meta:
8 model = DirectoryNode
9 fields = ['id', 'name', 'path', 'is_fhs_standard', 'description', 'depth']
10 read_only_fields = ['depth']
11
12
13 class FileSystemTreeSerializer(serializers.ModelSerializer):
14 total_directories = serializers.SerializerMethodField()
15
16 class Meta:
17 model = FileSystemTree
18 fields = [
19 'id', 'name', 'created_at', 'seed',
20 'player_location', 'is_completed', 'completed_at',
21 'tree_data', 'total_directories'
22 ]
23 read_only_fields = ['created_at', 'tree_data', 'total_directories']
24
25 def get_total_directories(self, obj):
26 return obj.nodes.count()
27
28
29 class GameSessionSerializer(serializers.ModelSerializer):
30 tree_name = serializers.CharField(source='tree.name', read_only=True)
31
32 class Meta:
33 model = GameSession
34 fields = [
35 'id', 'tree', 'tree_name', 'player_name',
36 'started_at', 'completed_at', 'commands_used',
37 'directories_visited', 'time_taken', 'command_history'
38 ]
39 read_only_fields = [
40 'started_at', 'completed_at', 'time_taken', 'command_history'
41 ]
42
43
44 class GameCommandSerializer(serializers.Serializer):
45 """Serializer for game commands"""
46 command = serializers.CharField(max_length=200)
47 session_id = serializers.IntegerField(required=False)