141 lines
4.6 KiB
Python
141 lines
4.6 KiB
Python
from rest_framework import serializers
|
|
|
|
from .models import (
|
|
BaseAssetGroup,
|
|
ExportJob,
|
|
Project,
|
|
ProjectStage,
|
|
ScriptSegment,
|
|
ScriptVersion,
|
|
StoryboardFrame,
|
|
StoryboardVersion,
|
|
Timeline,
|
|
TimelineClip,
|
|
VideoSegment,
|
|
VideoSegmentVersion,
|
|
)
|
|
|
|
|
|
class ProjectStageSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProjectStage
|
|
fields = ["id", "stage", "status", "started_at", "completed_at", "error_message", "metadata"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class VideoSegmentSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = VideoSegment
|
|
fields = ["id", "sort_order", "target_duration_seconds", "status", "error_message", "adopted_version"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class BaseAssetGroupSerializer(serializers.ModelSerializer):
|
|
candidate_assets = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = BaseAssetGroup
|
|
fields = ["id", "kind", "prompt", "adopted_asset", "candidate_assets", "version", "metadata", "created_at"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class StoryboardFrameSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = StoryboardFrame
|
|
fields = ["id", "script_segment", "asset", "sort_order", "prompt"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class StoryboardVersionSerializer(serializers.ModelSerializer):
|
|
frames = StoryboardFrameSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = StoryboardVersion
|
|
fields = ["id", "prompt", "is_adopted", "frames", "created_at", "updated_at"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class VideoSegmentVersionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = VideoSegmentVersion
|
|
fields = ["id", "video_segment", "asset", "prompt", "is_adopted", "metadata", "created_at"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class TimelineClipSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TimelineClip
|
|
fields = ["id", "asset", "sort_order", "start_ms", "duration_ms", "trim_start_ms", "trim_end_ms"]
|
|
read_only_fields = ["id"]
|
|
|
|
|
|
class TimelineExportJobSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ExportJob
|
|
fields = ["id", "status", "output_asset", "progress", "error_message", "created_at", "updated_at"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class TimelineSerializer(serializers.ModelSerializer):
|
|
clips = TimelineClipSerializer(many=True, read_only=True)
|
|
export_jobs = TimelineExportJobSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = Timeline
|
|
fields = ["id", "name", "aspect_ratio", "resolution", "duration_seconds", "metadata", "clips", "export_jobs"]
|
|
read_only_fields = ["id", "clips", "export_jobs"]
|
|
|
|
|
|
class ExportJobSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ExportJob
|
|
fields = ["id", "status", "output_asset", "progress", "error_message", "metadata", "created_at", "updated_at"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class ScriptSegmentSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ScriptSegment
|
|
fields = ["id", "sort_order", "duration_seconds", "narration", "visual_prompt", "product_points"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class ScriptVersionSerializer(serializers.ModelSerializer):
|
|
segments = ScriptSegmentSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = ScriptVersion
|
|
fields = ["id", "title", "content", "source", "is_adopted", "segments", "created_at", "updated_at"]
|
|
read_only_fields = fields
|
|
|
|
|
|
class ProjectSerializer(serializers.ModelSerializer):
|
|
stages = ProjectStageSerializer(many=True, read_only=True)
|
|
video_segments = VideoSegmentSerializer(many=True, read_only=True)
|
|
script_versions = ScriptVersionSerializer(many=True, read_only=True)
|
|
base_asset_groups = BaseAssetGroupSerializer(many=True, read_only=True)
|
|
storyboard_versions = StoryboardVersionSerializer(many=True, read_only=True)
|
|
timeline = TimelineSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Project
|
|
fields = [
|
|
"id",
|
|
"name",
|
|
"product",
|
|
"status",
|
|
"current_stage",
|
|
"budget_limit",
|
|
"failure_reason",
|
|
"metadata",
|
|
"stages",
|
|
"script_versions",
|
|
"base_asset_groups",
|
|
"storyboard_versions",
|
|
"video_segments",
|
|
"timeline",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|
|
read_only_fields = ["id", "status", "current_stage", "failure_reason", "created_at", "updated_at"]
|