$extensionIds 확장 ID 목록 * @return array 확장 ID → 최신 버전 번호 */ public function getCurrentVersionsByExtensionIds(array $extensionIds): array; /** * 특정 버전 조회 * * @param int $versionId 버전 ID * @return TemplateLayoutExtensionVersion|null 찾은 버전 모델 또는 null */ public function getVersion(int $versionId): ?TemplateLayoutExtensionVersion; /** * 다음 버전 번호 계산 * * @param int $extensionId 레이아웃 확장 ID * @return int 다음 버전 번호 */ public function getNextVersion(int $extensionId): int; /** * JSON content 변경사항 카운트 계산 (라인 단위) * * @param array $oldContent 이전 콘텐츠 * @param array $newContent 새 콘텐츠 * @return array{added: int, removed: int, char_diff: int} 추가/삭제 라인 수 + 문자 수 변화 */ public function calculateChanges(array $oldContent, array $newContent): array; /** * 버전 복원 * * @param int $extensionId 레이아웃 확장 ID * @param int $versionId 복원할 버전 ID * @return TemplateLayoutExtensionVersion 복원 후 생성된 새 버전 모델 * * @throws ModelNotFoundException 버전을 찾을 수 없는 경우 */ public function restoreVersion(int $extensionId, int $versionId): TemplateLayoutExtensionVersion; }