| 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) |