Python · 1880 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', 'moles_killed',
22 'total_commands', 'total_directories_visited'
23 ]
24 read_only_fields = ['created_at', 'tree_data', 'total_directories', 'moles_killed']
25
26 def get_total_directories(self, obj):
27 return obj.nodes.count()
28
29
30 class GameSessionSerializer(serializers.ModelSerializer):
31 tree_name = serializers.CharField(source='tree.name', read_only=True)
32 score = serializers.SerializerMethodField()
33
34 class Meta:
35 model = GameSession
36 fields = [
37 'id', 'tree', 'tree_name', 'player_name',
38 'started_at', 'completed_at', 'commands_used',
39 'directories_visited', 'time_taken', 'command_history',
40 'moles_killed', 'mole_stats', 'score'
41 ]
42 read_only_fields = [
43 'started_at', 'completed_at', 'time_taken', 'command_history',
44 'mole_stats', 'score'
45 ]
46
47 def get_score(self, obj):
48 return obj.calculate_score()
49
50
51 class GameCommandSerializer(serializers.Serializer):
52 """Serializer for game commands"""
53 command = serializers.CharField(max_length=200)
54 session_id = serializers.IntegerField(required=False)