관리자 설정 사이트 용량 카드를 간결한 통계형 UI로 정리
백업 현황을 사이트 용량으로 재정의하고 파일 집계를 이미지·영상·오디오·첨부 파일·보내기로 명확히 분리해 합계 불일치를 해소했다. 설정 화면의 통계 카드 스타일을 통일해 가독성을 높였다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -129,7 +129,7 @@ const getBackupContentSummary = async () => {
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 백업 현황 조회 API
|
||||
* 관리자 사이트 용량 조회 API
|
||||
* @param {import('h3').H3Event} event - 요청 이벤트
|
||||
* @returns {Promise<Object>} 백업 점검용 현황
|
||||
*/
|
||||
|
||||
@@ -49,28 +49,6 @@ const getFileKind = (filename) => {
|
||||
return 'files'
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 상대 경로를 공개 URL로 변환한다.
|
||||
* @param {string} relativePath - 업로드 루트 기준 상대 경로
|
||||
* @returns {string} 공개 URL
|
||||
*/
|
||||
const toUploadUrl = (relativePath) => `/uploads/${relativePath.split(sep).map(encodeURIComponent).join('/')}`
|
||||
|
||||
/**
|
||||
* 큰 파일 목록에 파일을 추가하고 상위 5개만 유지한다.
|
||||
* @param {Array<Object>} largestFiles - 큰 파일 목록
|
||||
* @param {Object} file - 파일 정보
|
||||
* @returns {void}
|
||||
*/
|
||||
const addLargestFile = (largestFiles, file) => {
|
||||
largestFiles.push(file)
|
||||
largestFiles.sort((a, b) => b.sizeBytes - a.sizeBytes)
|
||||
|
||||
if (largestFiles.length > 5) {
|
||||
largestFiles.length = 5
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 업로드 파일을 분류 집계에 반영한다.
|
||||
* @param {Object} summary - 업로드 집계
|
||||
@@ -81,7 +59,6 @@ const addLargestFile = (largestFiles, file) => {
|
||||
const addUploadFile = (summary, relativePath, sizeBytes) => {
|
||||
const segments = relativePath.split(sep)
|
||||
const firstSegment = segments[0] || ''
|
||||
const publicUrl = toUploadUrl(relativePath)
|
||||
const kind = getFileKind(relativePath)
|
||||
|
||||
if (firstSegment === 'exports') {
|
||||
@@ -99,13 +76,6 @@ const addUploadFile = (summary, relativePath, sizeBytes) => {
|
||||
} else {
|
||||
addFileBucket(summary.originals, sizeBytes)
|
||||
}
|
||||
|
||||
addLargestFile(summary.largestFiles, {
|
||||
name: segments.at(-1) || relativePath,
|
||||
url: publicUrl,
|
||||
kind,
|
||||
sizeBytes
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -151,7 +121,7 @@ const scanUploadDirectory = async (directory, summary) => {
|
||||
}
|
||||
|
||||
/**
|
||||
* 백업 점검용 업로드 파일 집계를 조회한다.
|
||||
* 사이트 용량 점검용 업로드 파일 집계를 조회한다.
|
||||
* @returns {Promise<Object>} 업로드 파일 집계
|
||||
*/
|
||||
export const getBackupStorageSummary = async () => {
|
||||
@@ -166,8 +136,7 @@ export const getBackupStorageSummary = async () => {
|
||||
videos: createFileBucket(),
|
||||
audio: createFileBucket(),
|
||||
files: createFileBucket()
|
||||
},
|
||||
largestFiles: []
|
||||
}
|
||||
}
|
||||
|
||||
await scanUploadDirectory(uploadRoot, summary)
|
||||
|
||||
Reference in New Issue
Block a user