영상과 같이 업로드·SEO 결과를 행에 남기고, 다음 요청부터는 DB 값을 쓴다. Co-authored-by: Cursor <cursoragent@cursor.com>
46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
"""SNS 업로드용 메타데이터 비교/반영 헬퍼.
|
|
|
|
`video` 와 `ssul_content` 모두 `title` / `description` / `hashtags` 를 갖는다.
|
|
"""
|
|
|
|
from typing import Protocol
|
|
|
|
|
|
class SnsMetadataTarget(Protocol):
|
|
title: str | None
|
|
description: str | None
|
|
hashtags: list | None
|
|
|
|
|
|
def has_stored_sns_metadata(row: SnsMetadataTarget) -> bool:
|
|
"""행에 SNS 제목이 이미 저장되어 있는지 확인합니다."""
|
|
return bool(row.title)
|
|
|
|
|
|
def sns_metadata_changed(
|
|
row: SnsMetadataTarget,
|
|
title: str,
|
|
description: str | None,
|
|
tags: list[str] | None,
|
|
) -> bool:
|
|
"""게시 폼 값이 저장된 SNS 메타데이터와 다른지 비교합니다."""
|
|
stored_tags = list(row.hashtags or [])
|
|
incoming_tags = list(tags or [])
|
|
return (
|
|
(row.title or "") != title
|
|
or (row.description or "") != (description or "")
|
|
or stored_tags != incoming_tags
|
|
)
|
|
|
|
|
|
def apply_sns_metadata(
|
|
row: SnsMetadataTarget,
|
|
title: str,
|
|
description: str | None,
|
|
hashtags: list[str] | None,
|
|
) -> None:
|
|
"""행에 SNS 메타데이터를 반영합니다."""
|
|
row.title = title
|
|
row.description = description
|
|
row.hashtags = list(hashtags or [])
|