feat: add AirShelf core implementation
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
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"]
|
||||
Reference in New Issue
Block a user