From a5ae2c3fce5cdaf3e1f304f763edc7d2231d1aca Mon Sep 17 00:00:00 2001 From: zenn Date: Tue, 26 May 2026 16:31:56 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A9=A4=EB=B2=84=20=EB=93=B1=EA=B8=89=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EA=B6=8C=ED=95=9C=20=EA=B7=9C=EC=B9=99=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20v1.5.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/admin/AdminMemberForm.vue | 52 +++------ docs/changelog.md | 5 + docs/history.md | 4 + docs/map.md | 4 +- docs/spec.md | 4 +- docs/update.md | 7 ++ package-lock.json | 4 +- package.json | 2 +- server/repositories/member-repository.js | 132 ++++++++++++++--------- 9 files changed, 120 insertions(+), 94 deletions(-) diff --git a/components/admin/AdminMemberForm.vue b/components/admin/AdminMemberForm.vue index 85a379e..371c6f9 100644 --- a/components/admin/AdminMemberForm.vue +++ b/components/admin/AdminMemberForm.vue @@ -24,7 +24,6 @@ const passwordModalOpen = ref(false) const deleteModalOpen = ref(false) const isUpdatingPassword = ref(false) const isDeletingMember = ref(false) -const isUpdatingRole = ref(false) const actionMessage = ref('') const actionError = ref('') @@ -93,7 +92,10 @@ const currentRoleLabel = computed(() => roleOptions.find((option) => option.valu * 회원 저장 요청 본문을 문자열로 직렬화한다. * @returns {string} 직렬화된 회원 입력값 */ -const serializeMemberPayload = () => JSON.stringify(getMemberPayload()) +const serializeMemberPayload = () => JSON.stringify({ + ...getMemberPayload(), + roleCode: form.roleCode +}) /** * 날짜 표시 형식 변환 @@ -340,40 +342,6 @@ const updateMemberPassword = async () => { } } -/** - * 관리자 권한으로 회원 등급을 변경한다. - * @returns {Promise} - */ -const updateMemberRole = async () => { - if (isNewMember.value || isUpdatingRole.value) { - return - } - - actionMessage.value = '' - actionError.value = '' - isUpdatingRole.value = true - - try { - const updated = await $fetch(`/admin/api/members/${props.member.id}/role`, { - method: 'PUT', - body: { - role: form.roleCode - } - }) - - emit('saved', { - ...props.member, - ...updated - }) - actionMessage.value = '멤버 등급이 변경되었습니다.' - } catch (error) { - form.roleCode = props.member?.roleCode || 'member' - actionError.value = error?.data?.message || '멤버 등급 변경에 실패했습니다.' - } finally { - isUpdatingRole.value = false - } -} - /** * 관리자 권한으로 회원을 삭제한다. * @returns {Promise} @@ -415,6 +383,15 @@ const saveMember = async () => { try { const payload = getMemberPayload() + if (!isNewMember.value && form.roleCode !== props.member?.roleCode) { + await $fetch(`/admin/api/members/${props.member.id}/role`, { + method: 'PUT', + body: { + role: form.roleCode + } + }) + } + const saved = isNewMember.value ? await $fetch('/admin/api/members', { method: 'POST', @@ -584,8 +561,7 @@ watch(() => props.member, () => {