419cc3fb6a
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Successful in 3m12s
CI/CD Pipeline / Validate Code Quality And Tests (push) Successful in 5m56s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 5m58s
CI/CD Pipeline / Frontend Lint (push) Successful in 6m32s
CI/CD Pipeline / Unit Tests (push) Failing after 6m48s
CI/CD Pipeline / Build Staging API Image (push) Successful in 8m5s
CI/CD Pipeline / Integration Tests (push) Successful in 2m9s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 9m50s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 2m1s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 41s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1m34s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m40s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com> Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
80 lines
2.7 KiB
Python
Executable File
80 lines
2.7 KiB
Python
Executable File
"""SQLAlchemy implementation of EditTemplateVersionRepository."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import List
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from packages.domain.template_version import EditTemplateVersion
|
|
|
|
|
|
class SQLAlchemyTemplateVersionRepository:
|
|
"""模板版本仓储实现(SQLAlchemy)。"""
|
|
|
|
def __init__(self, db: Session) -> None:
|
|
self._db = db
|
|
|
|
def create(self, version: EditTemplateVersion) -> EditTemplateVersion:
|
|
"""保存新版本快照"""
|
|
from packages.adapters.sqlalchemy_impl.models import EditTemplateVersionModel
|
|
|
|
model = EditTemplateVersionModel(
|
|
id=version.id,
|
|
template_id=version.template_id,
|
|
version=version.version,
|
|
name=version.name,
|
|
editing_mode=version.editing_mode,
|
|
config=version.config,
|
|
clip_configs=version.clip_configs,
|
|
change_note=version.change_note,
|
|
published_by=version.published_by,
|
|
created_at=version.created_at,
|
|
)
|
|
self._db.add(model)
|
|
self._db.flush()
|
|
return version
|
|
|
|
def get_by_version(self, template_id: str, version: int) -> EditTemplateVersion | None:
|
|
"""按版本号获取快照"""
|
|
from packages.adapters.sqlalchemy_impl.models import EditTemplateVersionModel
|
|
|
|
model = (
|
|
self._db.query(EditTemplateVersionModel)
|
|
.filter(
|
|
EditTemplateVersionModel.template_id == template_id,
|
|
EditTemplateVersionModel.version == version,
|
|
)
|
|
.first()
|
|
)
|
|
if model is None:
|
|
return None
|
|
return self._to_entity(model)
|
|
|
|
def list_by_template(self, template_id: str, limit: int = 50) -> List[EditTemplateVersion]:
|
|
"""列出模板的所有历史版本(按版本号倒序)"""
|
|
from packages.adapters.sqlalchemy_impl.models import EditTemplateVersionModel
|
|
|
|
models = (
|
|
self._db.query(EditTemplateVersionModel)
|
|
.filter(EditTemplateVersionModel.template_id == template_id)
|
|
.order_by(EditTemplateVersionModel.version.desc())
|
|
.limit(limit)
|
|
.all()
|
|
)
|
|
return [self._to_entity(m) for m in models]
|
|
|
|
def _to_entity(self, model) -> EditTemplateVersion:
|
|
return EditTemplateVersion(
|
|
id=model.id,
|
|
template_id=model.template_id,
|
|
version=model.version,
|
|
name=model.name or "",
|
|
editing_mode=model.editing_mode or "one_take",
|
|
config=model.config or {},
|
|
clip_configs=model.clip_configs or [],
|
|
change_note=model.change_note or "",
|
|
published_by=model.published_by or "",
|
|
created_at=model.created_at,
|
|
)
|