"""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 [])