diff --git a/docs/history.md b/docs/history.md index 62433f4..083c429 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,5 +1,11 @@ # 의사결정 이력 +## 2026-05-11 v0.0.78 + +### 관리자 미디어에서 회원 썸네일 가시성 복구 + +회원 썸네일을 미디어 목록에서 완전히 제외하면 운영자가 업로드 결과를 확인하거나 정리할 수 없어 관리성이 떨어진다. 경로 분리는 유지하되 관리자 미디어에서는 `회원/썸네일` 카테고리로 조회되도록 바꿔, 일반 콘텐츠 미디어와 논리적으로 구분하면서도 관리 화면에서 추적 가능하게 했다. + ## 2026-05-11 v0.0.77 ### 회원 설정 썸네일 표시 방식 전환 diff --git a/docs/map.md b/docs/map.md index dd5a076..1c81d33 100644 --- a/docs/map.md +++ b/docs/map.md @@ -171,7 +171,7 @@ | server/utils/admin-tag-input.js | 관리자 태그 입력값 검증 스키마 | | server/utils/site-settings.js | 사이트 설정 기본값 유틸리티 | | server/utils/navigation-items.js | 네비게이션 기본값과 그룹 유틸리티 | -| server/utils/media-library.js | 업로드 미디어 파일과 폴더 메타데이터 관리 유틸리티(회원 썸네일 경로 제외) | +| server/utils/media-library.js | 업로드 미디어 파일과 폴더 메타데이터 관리 유틸리티(회원 썸네일 포함, `회원/썸네일` 카테고리 노출) | | server/repositories/postgres-client.js | PostgreSQL 클라이언트 | | server/repositories/content-repository.js | 콘텐츠 조회 저장소 | | server/repositories/member-repository.js | 회원 조회/생성 저장소 | diff --git a/docs/spec.md b/docs/spec.md index 9fb2698..f96cebe 100644 --- a/docs/spec.md +++ b/docs/spec.md @@ -349,6 +349,7 @@ components/content/ > 최종 저장 크기는 `AVATAR_MAX_WIDTH`, `AVATAR_MAX_HEIGHT` 중 작은 값을 사용해 `N x N` 정사각형으로 맞춘다. > `AVATAR_WEBP_QUALITY`는 1~100 범위로 보정하며, 최대 해상도 설정이 최소 해상도보다 작으면 서버에서 최소값 이상으로 자동 보정한다. > 회원 썸네일을 새로 업로드하거나 제거/탈퇴할 때 기존 회원 썸네일 파일과 메타데이터는 자동 정리한다. +> 관리자 미디어 화면에서는 회원 썸네일도 `회원/썸네일` 폴더로 조회 가능하다. ### 관리자 API (`/admin/api/`) @@ -589,6 +590,6 @@ APP_PORT=43118 ## 버전 관리 -- 현재 버전: v0.0.77 +- 현재 버전: v0.0.78 - 첫 커밋 이후 변경사항을 커밋할 때마다 패치 버전 증가 - 메이저/마이너 버전은 구조 변경 또는 기능 묶음 단위로 결정 diff --git a/docs/update.md b/docs/update.md index 1fd9571..f4b85a2 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,10 @@ # 업데이트 이력 +## v0.0.78 + +- 관리자 미디어 목록에서 회원 썸네일 경로(`/uploads/members/avatars/`)를 다시 포함해 `회원/썸네일` 폴더에서 확인 가능하도록 수정. +- 회원 썸네일 파일도 일반 미디어와 동일하게 폴더 트리/검색/카운트 집계에 반영되도록 정리. + ## v0.0.77 - 회원 설정 프로필 영역에서 썸네일 URL 입력을 제거하고, 썸네일 미리보기 + 이미지 변경/제거 버튼 중심 UI로 개편. @@ -33,7 +38,7 @@ - 회원 썸네일 업로드 API(`POST /api/auth/avatar`)를 추가하고 업로드 경로를 `/uploads/members/avatars/YYYY/MM`으로 분리. - 회원 설정 페이지에서 썸네일 파일 업로드를 직접 처리하고, 업로드 후 프로필 저장 흐름으로 연결. -- 관리자 미디어 목록에서 회원 썸네일 경로(`/uploads/members/avatars/`)를 제외해 작가용 미디어와 분리. +- 관리자 미디어 목록에서 회원 썸네일은 전용 카테고리(`회원/썸네일`)로 구분해 관리. ## v0.0.71 diff --git a/package.json b/package.json index 2280e0e..4011315 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sori.studio", - "version": "0.0.77", + "version": "0.0.78", "private": true, "type": "module", "imports": { diff --git a/pages/settings/index.vue b/pages/settings/index.vue index 0b69ab9..d58a1b0 100644 --- a/pages/settings/index.vue +++ b/pages/settings/index.vue @@ -247,42 +247,54 @@ onMounted(loadProfile)

프로필

-
-
- +
+ +
-
-

- 프로필 이미지 -

-
- - +
+
+

ID (이메일)

+

+ {{ profileForm.email }} +

@@ -294,22 +306,9 @@ onMounted(loadProfile) :disabled="uploadingAvatar" @change="uploadAvatar" > - - - -
- +

비밀번호 변경

diff --git a/server/utils/media-library.js b/server/utils/media-library.js index aa6713a..7f193fb 100644 --- a/server/utils/media-library.js +++ b/server/utils/media-library.js @@ -252,13 +252,12 @@ const getMediaUsage = (url, posts, pages) => { */ export const listMediaItems = async () => { const items = await readMediaDirectory(uploadRoot) - const publicAdminItems = items.filter((item) => !item.url.startsWith('/uploads/members/avatars/')) const metadataMap = await getMediaMetadataMap() const [posts, pages] = await Promise.all([ listAdminPosts(), listPages() ]) - const itemsWithUsage = publicAdminItems.map((item) => ({ + const itemsWithUsage = items.map((item) => ({ ...item, category: metadataMap[item.url]?.category || item.category, usage: getMediaUsage(item.url, posts, pages)