미디어 썸네일 재생성 로직 분리
This commit is contained in:
@@ -53,8 +53,6 @@ const editingUrl = ref('')
|
||||
const editingName = ref('')
|
||||
const editingCategory = ref('')
|
||||
const deletingUrl = ref('')
|
||||
const regeneratingThumbnailUrl = ref('')
|
||||
const regeneratingBodyThumbnailUrl = ref('')
|
||||
const selectedMediaUrl = ref('')
|
||||
const selectedMediaUrls = ref([])
|
||||
const lastSelectedIndex = ref(-1)
|
||||
@@ -123,6 +121,21 @@ const { data: mediaResponse, refresh } = await useFetch('/admin/api/media', {
|
||||
}
|
||||
})
|
||||
|
||||
const {
|
||||
canRegeneratePageCoverThumbnail,
|
||||
canRegeneratePostBodyThumbnail,
|
||||
canRegeneratePostThumbnail,
|
||||
regeneratePageCoverThumbnail,
|
||||
regeneratePostBodyThumbnail,
|
||||
regeneratePostThumbnail,
|
||||
regeneratingBodyThumbnailUrl,
|
||||
regeneratingThumbnailUrl
|
||||
} = useAdminMediaThumbnailRegeneration({
|
||||
refresh,
|
||||
selectedMediaUrl,
|
||||
showToast
|
||||
})
|
||||
|
||||
const mediaItems = computed(() => Array.isArray(mediaResponse.value)
|
||||
? mediaResponse.value
|
||||
: (mediaResponse.value?.items || []))
|
||||
@@ -397,38 +410,6 @@ const getMediaUsageBadgeCount = (item) => {
|
||||
return usageCount + avatarOwnerCount
|
||||
}
|
||||
|
||||
/**
|
||||
* 카드 썸네일을 생성할 수 있는 원본 이미지인지 확인한다.
|
||||
* @param {Object} item - 미디어 항목
|
||||
* @returns {boolean} 생성 가능 여부
|
||||
*/
|
||||
const canRegeneratePostThumbnail = (item) => (
|
||||
item?.thumbnailStatus?.role === 'original'
|
||||
&& item?.thumbnailStatus?.variant !== 'pageCover'
|
||||
&& (item.thumbnailStatus.isFallbackActive || item.thumbnailStatus.hasThumbnail)
|
||||
)
|
||||
|
||||
/**
|
||||
* 페이지 커버 썸네일을 생성할 수 있는 원본 이미지인지 확인한다.
|
||||
* @param {Object} item - 미디어 항목
|
||||
* @returns {boolean} 생성 가능 여부
|
||||
*/
|
||||
const canRegeneratePageCoverThumbnail = (item) => (
|
||||
item?.thumbnailStatus?.role === 'original'
|
||||
&& item?.thumbnailStatus?.variant === 'pageCover'
|
||||
&& (item.thumbnailStatus.isFallbackActive || item.thumbnailStatus.hasThumbnail)
|
||||
)
|
||||
|
||||
/**
|
||||
* 본문 표시용 이미지를 생성할 수 있는 원본 이미지인지 확인한다.
|
||||
* @param {Object} item - 미디어 항목
|
||||
* @returns {boolean} 생성 가능 여부
|
||||
*/
|
||||
const canRegeneratePostBodyThumbnail = (item) => (
|
||||
item?.bodyThumbnailStatus?.role === 'original'
|
||||
&& (item.bodyThumbnailStatus.isFallbackActive || item.bodyThumbnailStatus.hasThumbnail)
|
||||
)
|
||||
|
||||
/**
|
||||
* 미디어 항목 종류를 반환한다.
|
||||
* @param {Object} item - 미디어 항목
|
||||
@@ -1103,95 +1084,6 @@ const deleteMedia = async (item) => {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 선택한 원본 이미지의 대표 이미지 파일을 다시 생성한다.
|
||||
* @param {Object} item - 미디어 항목
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
const regeneratePostThumbnail = async (item) => {
|
||||
if (!canRegeneratePostThumbnail(item)) {
|
||||
return
|
||||
}
|
||||
|
||||
regeneratingThumbnailUrl.value = item.url
|
||||
|
||||
try {
|
||||
await $fetch('/admin/api/media/thumbnail', {
|
||||
method: 'POST',
|
||||
body: {
|
||||
url: item.url
|
||||
}
|
||||
})
|
||||
await refresh()
|
||||
selectedMediaUrl.value = item.url
|
||||
showToast('success', '대표 이미지 파일을 생성했습니다.')
|
||||
} catch (error) {
|
||||
showToast('error', error?.data?.message || '대표 이미지 파일을 생성하지 못했습니다.')
|
||||
} finally {
|
||||
regeneratingThumbnailUrl.value = ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 선택한 원본 이미지의 페이지 커버 썸네일을 다시 생성한다.
|
||||
* @param {Object} item - 미디어 항목
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
const regeneratePageCoverThumbnail = async (item) => {
|
||||
if (!canRegeneratePageCoverThumbnail(item)) {
|
||||
return
|
||||
}
|
||||
|
||||
regeneratingThumbnailUrl.value = item.url
|
||||
|
||||
try {
|
||||
await $fetch('/admin/api/media/thumbnail', {
|
||||
method: 'POST',
|
||||
body: {
|
||||
url: item.url,
|
||||
kind: 'pageCover'
|
||||
}
|
||||
})
|
||||
await refresh()
|
||||
selectedMediaUrl.value = item.url
|
||||
showToast('success', '페이지 커버 썸네일을 생성했습니다.')
|
||||
} catch (error) {
|
||||
showToast('error', error?.data?.message || '페이지 커버 썸네일을 생성하지 못했습니다.')
|
||||
} finally {
|
||||
regeneratingThumbnailUrl.value = ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 선택한 원본 이미지의 본문 표시용 이미지를 다시 생성한다.
|
||||
* @param {Object} item - 미디어 항목
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
const regeneratePostBodyThumbnail = async (item) => {
|
||||
if (!canRegeneratePostBodyThumbnail(item)) {
|
||||
return
|
||||
}
|
||||
|
||||
regeneratingBodyThumbnailUrl.value = item.url
|
||||
|
||||
try {
|
||||
await $fetch('/admin/api/media/thumbnail', {
|
||||
method: 'POST',
|
||||
body: {
|
||||
url: item.url,
|
||||
kind: 'body'
|
||||
}
|
||||
})
|
||||
await refresh()
|
||||
selectedMediaUrl.value = item.url
|
||||
showToast('success', '본문 이미지를 생성했습니다.')
|
||||
} catch (error) {
|
||||
showToast('error', error?.data?.message || '본문 이미지를 생성하지 못했습니다.')
|
||||
} finally {
|
||||
regeneratingBodyThumbnailUrl.value = ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 선택한 미디어 중 삭제 가능한 항목을 한 번에 삭제한다.
|
||||
* @returns {Promise<void>}
|
||||
|
||||
Reference in New Issue
Block a user