Skip to content

Commit 89a4a6d

Browse files
authored
Add explaination
1 parent f0850f6 commit 89a4a6d

1 file changed

Lines changed: 43 additions & 32 deletions

File tree

src/pages/AuthUserPage.jsx

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,107 +4,118 @@ import '../styles/AuthUserPage.css';
44
import Header from '../components/Header';
55
import { useAuth } from '../context/AuthContext';
66

7+
// AuthUserPage 컴포넌트: 관리자 권한이 있는 사용자만 접근 가능한 페이지
78
function AuthUserPage() {
8-
const { isLoading, decodedAuth } = useAuth();
9-
const navigate = useNavigate();
10-
const [users, setUsers] = useState([]);
11-
const [error, setError] = useState(null);
9+
const { isLoading, decodedAuth } = useAuth(); // AuthContext에서 로딩 상태와 사용자 권한 정보 가져오기
10+
const navigate = useNavigate(); // 페이지 이동을 위한 useNavigate 훅
11+
const [users, setUsers] = useState([]); // 사용자 목록을 저장하는 상태
12+
const [error, setError] = useState(null); // 에러 메시지를 저장하는 상태
1213

14+
// 컴포넌트 마운트 및 업데이트 시 실행되는 useEffect 훅
1315
useEffect(() => {
14-
// Check authorization
16+
// 권한 확인: 로딩이 완료되고 사용자가 ADMIN이 아닌 경우 홈으로 리디렉션
1517
if (!isLoading && decodedAuth !== 'ADMIN') {
1618
navigate('/');
1719
}
1820

19-
// Fetch all users from API across all pages
21+
// 모든 사용자 데이터를 API에서 가져오는 함수
2022
const fetchAllUsers = async () => {
2123
try {
22-
let allUsers = [];
23-
let page = 0;
24-
let totalPages = 1;
24+
let allUsers = []; // 모든 사용자 데이터를 저장할 배열
25+
let page = 0; // 현재 페이지 번호
26+
let totalPages = 1; // 총 페이지 수
2527

28+
// 모든 페이지를 순회하며 사용자 데이터 가져오기
2629
while (page < totalPages) {
30+
// API 호출: 페이지와 페이지당 데이터 수를 쿼리 파라미터로 전달
2731
const response = await fetch(`${import.meta.env.VITE_ALL_USER_LIST}?page=${page}&size=10`, {
2832
headers: {
29-
'Content-Type': 'application/json'
33+
'Content-Type': 'application/json' // 요청 헤더 설정
3034
}
3135
});
3236

37+
// 응답이 실패하면 에러 발생
3338
if (!response.ok) {
34-
throw new Error('Failed to fetch users');
39+
throw new Error('사용자 데이터를 가져오지 못했습니다.');
3540
}
3641

37-
const data = await response.json();
42+
const data = await response.json(); // 응답 데이터를 JSON으로 파싱
43+
// 사용자 데이터를 필요한 필드만 추출하여 매핑
3844
const mappedUsers = data.content.map(user => ({
3945
userId: user.userId,
4046
userName: user.userName
4147
}));
4248

49+
// 기존 사용자 배열에 새로 가져온 사용자 데이터 추가
4350
allUsers = [...allUsers, ...mappedUsers];
44-
totalPages = data.totalPages;
45-
page++;
51+
totalPages = data.totalPages; // 총 페이지 수 업데이트
52+
page++; // 다음 페이지로 이동
4653
}
4754

48-
setUsers(allUsers);
55+
setUsers(allUsers); // 사용자 목록 상태 업데이트
4956
} catch (err) {
50-
setError(err.message);
57+
setError(err.message); // 에러 발생 시 에러 메시지 저장
5158
}
5259
};
5360

61+
// 로딩이 완료된 경우에만 사용자 데이터 가져오기
5462
if (!isLoading) {
5563
fetchAllUsers();
5664
}
57-
}, [isLoading, decodedAuth, navigate]);
65+
}, [isLoading, decodedAuth, navigate]); // 의존성 배열: isLoading, decodedAuth, navigate 변경 시 재실행
5866

67+
// 로딩 중일 때 표시되는 UI
5968
if (isLoading) {
6069
return (
6170
<>
62-
<Header />
71+
<Header /> {/* 헤더 컴포넌트 렌더링 */}
6372
<main className="auth-user-page">
6473
<section className="auth-user-section">
65-
<p>로딩 중...</p>
74+
<p>로딩 중...</p> {/* 로딩 메시지 표시 */}
6675
</section>
6776
</main>
6877
</>
6978
);
7079
}
7180

81+
// 에러 발생 시 표시되는 UI
7282
if (error) {
7383
return (
7484
<>
75-
<Header />
85+
<Header /> {/* 헤더 컴포넌트 렌더링 */}
7686
<main className="auth-user-page">
7787
<section className="auth-user-section">
78-
<p>Error: {error}</p>
88+
<p>에러: {error}</p> {/* 에러 메시지 표시 */}
7989
</section>
8090
</main>
8191
</>
8292
);
8393
}
8494

95+
// 정상적으로 사용자 목록을 렌더링하는 UI
8596
return (
8697
<>
87-
<Header />
98+
<Header /> {/* 헤더 컴포넌트 렌더링 */}
8899
<main className="auth-user-page">
89100
<section className="auth-user-section">
90-
<p className="user-list-title">User List</p>
101+
<p className="user-list-title">사용자 목록</p> {/* 사용자 목록 제목 */}
91102

92-
{/* 헤더 */}
103+
{/* 사용자 목록 헤더 */}
93104
<div className="user-list-header">
94-
<span>UserName</span>
95-
<span>UserID</span>
105+
<span>사용자 이름</span>
106+
<span>사용자 ID</span>
96107
</div>
97108

98-
{/* 스크롤 가능한 목록 */}
109+
{/* 스크롤 가능한 사용자 목록 */}
99110
<ul className="user-list-scroll">
100111
{users.map((user) => (
101112
<li
102-
key={user.userId}
113+
key={user.userId} // 각 사용자 항목의 고유 키
103114
className="user-list-item"
104-
onClick={() => navigate(`/Data?user=${user.userId}`)}
115+
onClick={() => navigate(`/Data?user=${user.userId}`)} // 클릭 시 해당 사용자 데이터 페이지로 이동
105116
>
106-
<span>{user.userName}</span>
107-
<span>{user.userId}</span>
117+
<span>{user.userName}</span> {/* 사용자 이름 표시 */}
118+
<span>{user.userId}</span> {/* 사용자 ID 표시 */}
108119
</li>
109120
))}
110121
</ul>
@@ -114,4 +125,4 @@ function AuthUserPage() {
114125
);
115126
}
116127

117-
export default AuthUserPage;
128+
export default AuthUserPage; // 컴포넌트 내보내기

0 commit comments

Comments
 (0)