관리자 미디어 업로드 규칙 분리

This commit is contained in:
2026-07-27 18:36:34 +09:00
parent a122ef46ac
commit e5e4febbbc
10 changed files with 178 additions and 23 deletions

View File

@@ -263,6 +263,33 @@ export const buildMediaPickerApplyState = ({
}
}
/**
* 미디어 선택 모달의 목록 조회 query를 만든다.
* @param {Object} options - 조회 옵션
* @param {number} options.page - 페이지 번호
* @param {number} options.pageSize - 페이지 크기
* @param {string} options.kind - 미디어 종류
* @param {string} options.searchQuery - 검색어
* @returns {Record<string, string|number|undefined>} 미디어 API query
*/
export const createMediaPickerFetchQuery = ({
page,
pageSize,
kind,
searchQuery
}) => {
const normalizedSearchQuery = String(searchQuery || '').trim()
return {
paged: '1',
tab: 'library',
page,
pageSize,
kind,
search: normalizedSearchQuery || undefined
}
}
/**
* 미디어 항목으로 Prose 미디어 블록을 만든다.
* @param {'video'|'audio'|'file'} blockType - 블록 유형
@@ -381,6 +408,57 @@ export const createSelectedMediaInsertPlan = ({
return { kind: 'none' }
}
/**
* 업로드 입력 파일 목록을 배열로 정규화한다.
* @param {FileList|Array<File>|null|undefined} files - 업로드 입력 파일 목록
* @returns {File[]} 파일 배열
*/
export const normalizeMediaUploadFiles = (files) => {
return Array.from(files || []).filter(Boolean)
}
/**
* 업로드 파일 목록으로 multipart FormData를 만든다.
* @param {FileList|Array<File>} files - 업로드 파일 목록
* @returns {FormData} 업로드 요청 본문
*/
export const createMediaUploadFormData = (files) => {
const formData = new FormData()
normalizeMediaUploadFiles(files).forEach((file) => {
formData.append('files', file)
})
return formData
}
/**
* 업로드 API 응답에서 파일 목록을 추출한다.
* @param {Object|null|undefined} response - 업로드 API 응답
* @returns {Object[]} 업로드된 파일 목록
*/
export const resolveUploadedMediaFiles = (response) => {
return Array.isArray(response?.files) ? response.files : []
}
/**
* 이미지 파일 목록에 맞는 기본 삽입 대상을 반환한다.
* @param {FileList|Array<File>} files - 이미지 파일 목록
* @returns {'image'|'gallery'} 삽입 대상
*/
export const resolveImageUploadInsertTarget = (files) => {
return normalizeMediaUploadFiles(files).length > 1 ? 'gallery' : 'image'
}
/**
* 파일 목록에서 이미지 파일만 반환한다.
* @param {FileList|Array<File>} files - 입력 파일 목록
* @returns {File[]} 이미지 파일 목록
*/
export const filterImageUploadFiles = (files) => {
return normalizeMediaUploadFiles(files).filter((file) => String(file?.type || '').startsWith('image/'))
}
/**
* 갤러리 미디어 선택 순서를 반환한다.
* @param {string[]} selectedUrls - 선택된 URL 목록