139 lines
6.5 KiB
Python
139 lines
6.5 KiB
Python
from sqlalchemy import Boolean, Column, DateTime, Float, String, Text, create_engine
|
|
from sqlalchemy.orm import declarative_base
|
|
from datetime import datetime, timezone
|
|
|
|
Base = declarative_base()
|
|
|
|
|
|
class ProjectModel(Base):
|
|
__tablename__ = "projects"
|
|
|
|
id = Column(String(32), primary_key=True)
|
|
workspace_id = Column(String(32), nullable=False, index=True)
|
|
name = Column(String(100), nullable=False)
|
|
description = Column(Text, nullable=False, default="")
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class AssetLibraryModel(Base):
|
|
__tablename__ = "asset_libraries"
|
|
|
|
id = Column(String(36), primary_key=True)
|
|
workspace_id = Column(String(36), nullable=False, index=True)
|
|
project_id = Column(String(36), nullable=True, index=True)
|
|
name = Column(String(255), nullable=False)
|
|
kind = Column(String(20), nullable=False, index=True)
|
|
asset_count = Column(Float, nullable=False, default=0)
|
|
total_size = Column(Float, nullable=False, default=0)
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class AssetModel(Base):
|
|
__tablename__ = "assets"
|
|
|
|
id = Column(String(36), primary_key=True)
|
|
workspace_id = Column(String(36), nullable=False, index=True)
|
|
project_id = Column(String(36), nullable=False, index=True)
|
|
asset_library_id = Column(String(36), nullable=False, index=True)
|
|
name = Column(String(500), nullable=False)
|
|
file_type = Column(String(20), nullable=False, index=True)
|
|
file_size = Column(Float, nullable=False)
|
|
file_url = Column(String(1000), nullable=False)
|
|
thumbnail_url = Column(String(1000), nullable=True)
|
|
duration = Column(Float, nullable=True)
|
|
width = Column(Float, nullable=True)
|
|
height = Column(Float, nullable=True)
|
|
fps = Column(Float, nullable=True)
|
|
codec = Column(String(50), nullable=True)
|
|
status = Column(String(20), nullable=False, default="uploading", index=True)
|
|
classification_status = Column(String(20), nullable=False, default="pending", index=True)
|
|
classification_result = Column(Text, nullable=True)
|
|
quality_score = Column(Float, nullable=True)
|
|
uploaded_by_user_id = Column(String(36), nullable=False)
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc), index=True)
|
|
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class IngestJobModel(Base):
|
|
__tablename__ = "ingest_jobs"
|
|
|
|
id = Column(String(32), primary_key=True)
|
|
workspace_id = Column(String(32), nullable=False, index=True)
|
|
project_id = Column(String(32), nullable=False, index=True)
|
|
library_id = Column(String(32), nullable=False, index=True)
|
|
storage_key = Column(String(255), nullable=False)
|
|
status = Column(String(20), nullable=False, default="pending")
|
|
error_message = Column(Text, nullable=False, default="")
|
|
result_asset_id = Column(String(32), nullable=False, default="")
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class ClassificationJobModel(Base):
|
|
__tablename__ = "classification_jobs"
|
|
|
|
id = Column(String(32), primary_key=True)
|
|
workspace_id = Column(String(32), nullable=False, index=True)
|
|
project_id = Column(String(32), nullable=False, index=True)
|
|
asset_id = Column(String(32), nullable=False, index=True)
|
|
status = Column(String(20), nullable=False, default="pending")
|
|
classification = Column(String(50), nullable=False, default="")
|
|
confidence = Column(Float, nullable=False, default=0.0)
|
|
error_message = Column(Text, nullable=False, default="")
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class TaskModel(Base):
|
|
__tablename__ = "tasks"
|
|
|
|
id = Column(String(32), primary_key=True)
|
|
project_id = Column(String(32), nullable=False, index=True)
|
|
workspace_id = Column(String(32), nullable=False, index=True)
|
|
name = Column(String(200), nullable=False)
|
|
description = Column(Text, nullable=False, default="")
|
|
status = Column(String(20), nullable=False, default="pending", index=True)
|
|
priority = Column(String(20), nullable=False, default="medium")
|
|
parent_task_id = Column(String(32), nullable=False, default="", index=True)
|
|
assignee_user_id = Column(String(32), nullable=False, default="")
|
|
progress = Column(Float, nullable=False, default=0.0)
|
|
planned_start_date = Column(DateTime, nullable=True)
|
|
planned_end_date = Column(DateTime, nullable=True)
|
|
actual_start_date = Column(DateTime, nullable=True)
|
|
actual_end_date = Column(DateTime, nullable=True)
|
|
tags_json = Column(Text, nullable=False, default="[]")
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class MilestoneModel(Base):
|
|
__tablename__ = "milestones"
|
|
|
|
id = Column(String(32), primary_key=True)
|
|
project_id = Column(String(32), nullable=False, index=True)
|
|
workspace_id = Column(String(32), nullable=False, index=True)
|
|
name = Column(String(200), nullable=False)
|
|
description = Column(Text, nullable=False, default="")
|
|
target_date = Column(DateTime, nullable=True)
|
|
completed = Column(Boolean, nullable=False, default=False)
|
|
completed_at = Column(DateTime, nullable=True)
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
|
|
|
|
class TaskIssueModel(Base):
|
|
__tablename__ = "task_issues"
|
|
|
|
id = Column(String(32), primary_key=True)
|
|
task_id = Column(String(32), nullable=False, index=True)
|
|
project_id = Column(String(32), nullable=False, index=True)
|
|
workspace_id = Column(String(32), nullable=False, index=True)
|
|
title = Column(String(200), nullable=False)
|
|
description = Column(Text, nullable=False, default="")
|
|
resolved = Column(Boolean, nullable=False, default=False)
|
|
resolved_at = Column(DateTime, nullable=True)
|
|
created_by_user_id = Column(String(32), nullable=False, default="")
|
|
created_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|
|
updated_at = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc))
|