취소 비밀번호 변경 기능 추가 및 사용자 계정 관리 개선

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jay Sheen
2025-09-29 09:24:23 +09:00
parent 6a992012cf
commit 9711b50b5f
13 changed files with 219 additions and 32 deletions

View File

@@ -4,9 +4,6 @@ import { useNavigate } from '@/shared/lib/hooks/use-navigate';
export const PasswordManageWrap = () => {
const { navigate } = useNavigate();
const onClickTonavigation = () => {
navigate(PATHS.account.password.modifyLoginPassword);
};
return (
<>
<div className="ing-list">
@@ -15,11 +12,12 @@ export const PasswordManageWrap = () => {
<button
className="btn-44 btn-white pwd-btn"
type="button"
onClick={ () => onClickTonavigation() }
onClick={ () => navigate(PATHS.account.password.modifyLoginPassword) }
> </button>
<button
className="btn-44 btn-white pwd-btn"
type="button"
onClick={ () => navigate(PATHS.account.password.modifyCancelPassword) }
> </button>
</div>
</div>

View File

@@ -3,6 +3,9 @@ import { useUserFindAuthMethodMutation } from '@/entities/user/api/use-user-find
import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant';
import { useEffect, useState } from 'react';
import { useUserModifyAuthMethodMutation } from '@/entities/user/api/use-user-modify-authmethod-mutation';
import { snackBar } from '@/shared/lib/toast';
import { PATHS } from '@/shared/constants/paths';
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
export const UserLoginAuthInfoWrap = ({
mid,
@@ -10,8 +13,7 @@ export const UserLoginAuthInfoWrap = ({
idCl,
status,
}: UserFindAuthMethodParams) => {
const { mutateAsync: userFindAuthMethod } = useUserFindAuthMethodMutation();
const { mutateAsync: userModifyAuthMethod } = useUserModifyAuthMethodMutation();
const { navigate } = useNavigate();
const [pageParam] = useState(DEFAULT_PAGE_PARAM);
const [authMethodData, setAuthMethodData] = useState<UserAuthMethodData>();
const [initialData, setInitialData] = useState<UserAuthMethodData>();
@@ -21,6 +23,20 @@ export const UserLoginAuthInfoWrap = ({
const [editablePhoneIndex, setEditablePhoneIndex] = useState<number>(-1);
const [readOnlyEmails, setReadOnlyEmails] = useState<Set<number>>(new Set());
const [readOnlyPhones, setReadOnlyPhones] = useState<Set<number>>(new Set());
const { mutateAsync: userFindAuthMethod } = useUserFindAuthMethodMutation();
const { mutateAsync: userModifyAuthMethod } = useUserModifyAuthMethodMutation({
onSuccess: () => {
snackBar('사용자 정보가 성공적으로 저장되었습니다.');
navigate(PATHS.account.user.manage, {
state: {
mid: mid,
}
});
},
onError: (error) => {
snackBar(error?.response?.data?.message || '사용자 정보 저장에 실패했습니다.');
}
});
console.log("UserLoginAuthInfoWrap", mid, usrid, idCl, status);

View File

@@ -0,0 +1,29 @@
import axios from 'axios';
import { API_URL_USER } from '@/shared/api/api-url-user';
import { resultify } from '@/shared/lib/resultify';
import { CBDCAxiosError } from '@/shared/@types/error';
import {
ChangeCancelPasswordParams,
ChangeCancelPasswordResponse
} from '../model/types';
import {
useMutation,
UseMutationOptions
} from '@tanstack/react-query';
export const userChangeCancelPassword = (params: ChangeCancelPasswordParams) => {
return resultify(
axios.post<ChangeCancelPasswordResponse>(API_URL_USER.userChangeCancelPassword(), params),
);
};
export const useUserChangeCancelPasswordMutation = (options?: UseMutationOptions<ChangeCancelPasswordResponse, CBDCAxiosError, ChangeCancelPasswordParams>) => {
const mutation = useMutation<ChangeCancelPasswordResponse, CBDCAxiosError, ChangeCancelPasswordParams>({
...options,
mutationFn: (params: ChangeCancelPasswordParams) => userChangeCancelPassword(params),
});
return {
...mutation,
};
};

View File

@@ -133,9 +133,9 @@ export interface UserMenuPermissionData {
}
export interface ChangePasswordParams {
mid: string;
usrid: string;
password: string;
newPassword: string;
}
export interface ChangePasswordResponse {
@@ -143,6 +143,16 @@ export interface ChangePasswordResponse {
error?: ErrorResponse;
}
export interface ChangeCancelPasswordParams {
mid: string;
password: string;
}
export interface ChangeCancelPasswordResponse {
status: boolean;
error?: ErrorResponse;
}
export interface VerificationsItem {
type: string;
contact: string;